00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 #ifndef INC_MI32_MEMBUF_H
00065 #define INC_MI32_MEMBUF_H
00066
00067 #ifndef INC_MI32_STDDEFNS_H
00068 #include <mi32/stddefns.h>
00069 #endif
00070
00071 #if defined(__cplusplus)
00072
00073
00074
00075
00076
00077
00078 inline char SwapBytes (
00079 char& value
00080 ) {
00081 return (value);
00082 }
00083
00084
00085 inline INT8 SwapBytes (
00086 INT8& value
00087 ) {
00088 return (value);
00089 }
00090
00091
00092 inline UINT8 SwapBytes (
00093 UINT8& value
00094 ) {
00095 return (value);
00096 }
00097
00098
00099 inline INT16 SwapBytes (
00100 INT16& value
00101 ) {
00102 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00103 UINT8 tmp = p[0]; p[0] = p[1]; p[1] = tmp;
00104 return (value);
00105 }
00106
00107
00108 inline UINT16 SwapBytes (
00109 UINT16& value
00110 ) {
00111 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00112 UINT8 tmp = p[0]; p[0] = p[1]; p[1] = tmp;
00113 return (value);
00114 }
00115
00116 #if defined(WIN32) && defined(_MSC_VER) && (_MSC_VER >= 1400)
00117
00118 inline UINT16 SwapBytes (
00119 MIUNICODE& value
00120 ) {
00121 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00122 UINT8 tmp = p[0]; p[0] = p[1]; p[1] = tmp;
00123 return (value);
00124 }
00125 #endif
00126
00127
00128 inline INT32 SwapBytes (
00129 INT32& value
00130 ) {
00131 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00132 UINT8 tmp = p[0]; p[0] = p[3]; p[3] = tmp;
00133 tmp = p[1]; p[1] = p[2]; p[2] = tmp;
00134 return (value);
00135 }
00136
00137
00138 inline UINT32 SwapBytes (
00139 UINT32& value
00140 ) {
00141 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00142 UINT8 tmp = p[0]; p[0] = p[3]; p[3] = tmp;
00143 tmp = p[1]; p[1] = p[2]; p[2] = tmp;
00144 return (value);
00145 }
00146
00147
00148 inline float SwapBytes (
00149 float& value
00150 ) {
00151 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00152 UINT8 tmp = p[0]; p[0] = p[3]; p[3] = tmp;
00153 tmp = p[1]; p[1] = p[2]; p[2] = tmp;
00154 return (value);
00155 }
00156
00157
00158 inline INT64 SwapBytes (
00159 INT64& value
00160 ) {
00161 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00162 UINT8 tmp = p[0]; p[0] = p[7]; p[7] = tmp;
00163 tmp = p[1]; p[1] = p[6]; p[6] = tmp;
00164 tmp = p[2]; p[2] = p[5]; p[5] = tmp;
00165 tmp = p[3]; p[3] = p[4]; p[4] = tmp;
00166 return (value);
00167 }
00168
00169
00170 inline UINT64 SwapBytes (
00171 UINT64& value
00172 ) {
00173 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00174 UINT8 tmp = p[0]; p[0] = p[7]; p[7] = tmp;
00175 tmp = p[1]; p[1] = p[6]; p[6] = tmp;
00176 tmp = p[2]; p[2] = p[5]; p[5] = tmp;
00177 tmp = p[3]; p[3] = p[4]; p[4] = tmp;
00178 return (value);
00179 }
00180
00181
00182 inline double SwapBytes (
00183 double& value
00184 ) {
00185 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00186 UINT8 tmp = p[0]; p[0] = p[7]; p[7] = tmp;
00187 tmp = p[1]; p[1] = p[6]; p[6] = tmp;
00188 tmp = p[2]; p[2] = p[5]; p[5] = tmp;
00189 tmp = p[3]; p[3] = p[4]; p[4] = tmp;
00190 return (value);
00191 }
00192
00193
00194 template <class _BUF>
00195 inline void SwapBytes (
00196 _BUF *alist,
00197 INT32 num
00198 ) {
00199 for (INT32 _xy_ = 0; (_xy_ < num); ++_xy_) SwapBytes(alist[_xy_]);
00200 return;
00201 }
00202
00203
00204 inline void SwapBytes2 (
00205 void *data,
00206 int num
00207 ) {
00208 SwapBytes(static_cast<UINT16*>(data), num);
00209 return;
00210 }
00211
00212
00213 inline void SwapBytes4 (
00214 void *data,
00215 int num
00216 ) {
00217 SwapBytes(static_cast<UINT32*>(data), num);
00218 return;
00219 }
00220
00221
00222 inline void SwapBytes8 (
00223 void *data,
00224 int num
00225 ) {
00226 SwapBytes(static_cast<double*>(data), num);
00227 return;
00228 }
00229
00230 #endif
00231
00232 #ifndef GENERATING_DOXYGEN_OUTPUT
00233 extern UINT8 _bitrevtable[];
00234 #endif
00235
00236
00237 #if defined(__cplusplus)
00238 inline UINT8 bitrev (
00239 UINT8 b
00240 ) {
00241 return (_bitrevtable[b]);
00242 }
00243 #else
00244 #define bitrev(b) _bitrevtable[b]
00245 #endif
00246
00247
00248
00249
00250
00251 inline int getbit (
00252 const UINT8 *array,
00253 INT32 index
00254 ) {
00255 return ((array[index>>3] >> (index & 7)) & 1);
00256 }
00257
00258
00259
00260
00261 inline int getbitn (
00262 const UINT8 *array,
00263 INT32 index
00264 ) {
00265 if (array == 0) return (0);
00266 return ((array[index>>3] >> (index & 7)) & 1);
00267 }
00268
00269
00270 inline void memswap (
00271 void *vb1,
00272 void *vb2,
00273 int count
00274 ) {
00275 UINT8* b1 = static_cast<UINT8*>(vb1);
00276 UINT8* b2 = static_cast<UINT8*>(vb2);
00277
00278 for (int i = 0 ; i < count ; ++i, ++b1, ++b2) {
00279 UINT8 t = *b1; *b1 = *b2 ; *b2 = t;
00280 }
00281 }
00282
00283
00284 inline void putbit (
00285 UINT8 *array,
00286 INT32 index,
00287 int value
00288 ) {
00289 if (value)
00290 array[index >> 3] |= 1 << (index & 7);
00291 else
00292 array[index >> 3] &= ~(1 << (index & 7));
00293 }
00294
00295
00296 #if defined(__cplusplus)
00297 extern "C" {
00298 #endif
00299
00300
00301 void bitrevlin (
00302 UINT8 *buf,
00303 int numbytes
00304 );
00305
00306
00307
00308
00309
00310 void packbits (
00311 UINT8 *dest,
00312 UINT8 *source,
00313 int count
00314 );
00315
00316
00317
00318
00319
00320 void packbitsr (
00321 UINT8 *dest,
00322 UINT8 *source,
00323 int count
00324 );
00325
00326
00327 void revbuffer (
00328 void *vbuf,
00329 int cols
00330 );
00331
00332
00333 void SwapDataInBuffer (
00334 void *data,
00335 INT32 NumItems,
00336 int ItemSize
00337 );
00338
00339 #if defined(__cplusplus)
00340 }
00341 #endif
00342
00343
00344
00345 #endif