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 #ifndef INC_MI32_MEMBUF_H
00056 #define INC_MI32_MEMBUF_H
00057
00058 #ifndef INC_MI32_STDDEFNS_H
00059 #include <mi32/stddefns.h>
00060 #endif
00061
00062 #if defined(__cplusplus)
00063
00064
00065
00066
00067
00068
00069 inline char SwapBytes (
00070 char& value
00071 ) {
00072 return (value);
00073 }
00074
00075
00076 inline INT8 SwapBytes (
00077 INT8& value
00078 ) {
00079 return (value);
00080 }
00081
00082
00083 inline UINT8 SwapBytes (
00084 UINT8& value
00085 ) {
00086 return (value);
00087 }
00088
00089
00090 inline INT16 SwapBytes (
00091 INT16& value
00092 ) {
00093 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00094 UINT8 tmp = p[0]; p[0] = p[1]; p[1] = tmp;
00095 return (value);
00096 }
00097
00098
00099 inline UINT16 SwapBytes (
00100 UINT16& 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 INT32 SwapBytes (
00109 INT32& value
00110 ) {
00111 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00112 UINT8 tmp = p[0]; p[0] = p[3]; p[3] = tmp;
00113 tmp = p[1]; p[1] = p[2]; p[2] = tmp;
00114 return (value);
00115 }
00116
00117
00118 inline UINT32 SwapBytes (
00119 UINT32& value
00120 ) {
00121 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00122 UINT8 tmp = p[0]; p[0] = p[3]; p[3] = tmp;
00123 tmp = p[1]; p[1] = p[2]; p[2] = tmp;
00124 return (value);
00125 }
00126
00127
00128 inline float SwapBytes (
00129 float& 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 INT64 SwapBytes (
00139 INT64& value
00140 ) {
00141 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00142 UINT8 tmp = p[0]; p[0] = p[7]; p[7] = tmp;
00143 tmp = p[1]; p[1] = p[6]; p[6] = tmp;
00144 tmp = p[2]; p[2] = p[5]; p[5] = tmp;
00145 tmp = p[3]; p[3] = p[4]; p[4] = tmp;
00146 return (value);
00147 }
00148
00149
00150 inline UINT64 SwapBytes (
00151 UINT64& value
00152 ) {
00153 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00154 UINT8 tmp = p[0]; p[0] = p[7]; p[7] = tmp;
00155 tmp = p[1]; p[1] = p[6]; p[6] = tmp;
00156 tmp = p[2]; p[2] = p[5]; p[5] = tmp;
00157 tmp = p[3]; p[3] = p[4]; p[4] = tmp;
00158 return (value);
00159 }
00160
00161
00162 inline double SwapBytes (
00163 double& value
00164 ) {
00165 UINT8 *p = reinterpret_cast<UINT8*>(&value);
00166 UINT8 tmp = p[0]; p[0] = p[7]; p[7] = tmp;
00167 tmp = p[1]; p[1] = p[6]; p[6] = tmp;
00168 tmp = p[2]; p[2] = p[5]; p[5] = tmp;
00169 tmp = p[3]; p[3] = p[4]; p[4] = tmp;
00170 return (value);
00171 }
00172
00173
00174 template <class _BUF>
00175 inline void SwapBytes (
00176 _BUF *alist,
00177 INT32 num
00178 ) {
00179 for (INT32 _xy_ = 0; (_xy_ < num); ++_xy_) SwapBytes(alist[_xy_]);
00180 return;
00181 }
00182
00183
00184 inline void SwapBytes2 (
00185 void *data,
00186 int num
00187 ) {
00188 SwapBytes(static_cast<UINT16*>(data), num);
00189 return;
00190 }
00191
00192
00193 inline void SwapBytes4 (
00194 void *data,
00195 int num
00196 ) {
00197 SwapBytes(static_cast<UINT32*>(data), num);
00198 return;
00199 }
00200
00201
00202 inline void SwapBytes8 (
00203 void *data,
00204 int num
00205 ) {
00206 SwapBytes(static_cast<double*>(data), num);
00207 return;
00208 }
00209
00210 #endif
00211
00212 #if defined(__cplusplus)
00213 extern "C" {
00214 #endif
00215
00216 #ifndef GENERATING_DOXYGEN_OUTPUT
00217 extern UINT8 _bitrevtable[];
00218 #endif
00219
00220
00221 #if defined(__cplusplus)
00222 inline UINT8 bitrev (
00223 UINT8 b
00224 ) {
00225 return (_bitrevtable[b]);
00226 }
00227 #else
00228 #define bitrev(b) _bitrevtable[b]
00229 #endif
00230
00231
00232 void bitrevlin (
00233 UINT8 *buf,
00234 int numbytes
00235 );
00236
00237 #if defined(__cplusplus) && !defined(GPBIT_C)
00238
00239
00240
00241
00242 inline int getbit (
00243 const UINT8 *array,
00244 INT32 index
00245 ) {
00246 return ((array[index>>3] >> (index & 7)) & 1);
00247 }
00248
00249
00250
00251
00252 inline int getbitn (
00253 const UINT8 *array,
00254 INT32 index
00255 ) {
00256 if (array == 0) return (0);
00257 return ((array[index>>3] >> (index & 7)) & 1);
00258 }
00259
00260 #else
00261 #ifndef GENERATING_DOXYGEN_OUTPUT
00262
00263
00264
00265
00266
00267
00268
00269 int getbit (
00270 const UINT8 *array,
00271 INT32 index
00272 );
00273
00274
00275
00276
00277 int getbitn (
00278 const UINT8 *array,
00279 INT32 index
00280 );
00281
00282 #endif
00283 #endif
00284
00285 #if defined(__cplusplus) && !defined(MEMSWAP_C)
00286
00287 inline void memswap (
00288 void *vb1,
00289 void *vb2,
00290 int count
00291 ) {
00292 UINT8* b1 = static_cast<UINT8*>(vb1);
00293 UINT8* b2 = static_cast<UINT8*>(vb2);
00294
00295 for (int i = 0 ; i < count ; ++i, ++b1, ++b2) {
00296 UINT8 t = *b1; *b1 = *b2 ; *b2 = t;
00297 }
00298 }
00299
00300 #else
00301 #ifndef GENERATING_DOXYGEN_OUTPUT
00302
00303
00304
00305 void memswap (
00306 void *vb1,
00307 void *vb2,
00308 int count
00309 );
00310 #endif
00311 #endif
00312
00313
00314
00315
00316
00317 void packbits (
00318 UINT8 *dest,
00319 UINT8 *source,
00320 int count
00321 );
00322
00323
00324
00325
00326
00327 void packbitsr (
00328 UINT8 *dest,
00329 UINT8 *source,
00330 int count
00331 );
00332
00333 #if defined(__cplusplus) && !defined(GPBIT_C)
00334
00335
00336 inline void putbit (
00337 UINT8 *array,
00338 INT32 index,
00339 int value
00340 ) {
00341 if (value)
00342 array[index >> 3] |= 1 << (index & 7);
00343 else
00344 array[index >> 3] &= ~(1 << (index & 7));
00345 }
00346
00347 #else
00348 #ifndef GENERATING_DOXYGEN_OUTPUT
00349
00350
00351
00352
00353 void putbit (
00354 UINT8 *array,
00355 INT32 index,
00356 int value
00357 );
00358
00359 #endif
00360 #endif
00361
00362
00363 void revbuffer (
00364 void *vbuf,
00365 int cols
00366 );
00367
00368
00369 void SwapDataInBuffer (
00370 void *data,
00371 INT32 NumItems,
00372 int ItemSize
00373 );
00374
00375 #if defined(__cplusplus)
00376 }
00377 #endif
00378
00379
00380
00381 #endif