00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef OST_IO_SWAP_UTIL_HH
00021 #define OST_IO_SWAP_UTIL_HH
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <cmath>
00031
00032 namespace ost { namespace io {
00033
00034
00035
00036 template <typename T> void swap_buf(T* p, int n);
00037
00038 inline
00039 void swap_short(short int *p, short int n) {swap_buf<short int>(p,n);}
00040 inline
00041 void swap_ushort(unsigned short int *p, short int n) {swap_buf<unsigned short int>(p,n);}
00042 inline
00043 void swap_int(int *p, int n) {swap_buf<int>(p,n);}
00044 inline
00045 void swap_uint(uint *p, int n) {swap_buf<uint>(p,n);}
00046 inline
00047 void swap_float(float *p, int n) {swap_buf<float>(p,n);}
00048 inline
00049 void swap_double(double *p, int n) {swap_buf<double>(p,n);}
00050 inline
00051 void swap_long(long *p, int n) {swap_buf<long>(p,n);}
00052
00053
00054 template <typename T>
00055 void swap_buf(T* p, int n)
00056 {
00057 unsigned char *a,tmp;
00058
00059 for(int k=0;k<n;k++) {
00060 a=reinterpret_cast<unsigned char *>(&p[k]);
00061
00062 if(sizeof(T)==2) {
00063 tmp=a[0];
00064 a[0]=a[1];
00065 a[1]=tmp;
00066 } else if(sizeof(T)==4) {
00067 tmp=a[0];
00068 a[0]=a[3];
00069 a[3]=tmp;
00070 tmp=a[1];
00071 a[1]=a[2];
00072 a[2]=tmp;
00073 } else if(sizeof(T)==8) {
00074 tmp = a[0];
00075 a[0] = a[7];
00076 a[7] = tmp;
00077 tmp = a[1];
00078 a[1] = a[6];
00079 a[6] = tmp;
00080 tmp = a[2];
00081 a[2] = a[5];
00082 a[5] =tmp;
00083 tmp = a[3];
00084 a[3] = a[4];
00085 a[4] = tmp;
00086 }
00087 }
00088 }
00089
00090 }}
00091
00092 #endif
00093
00094