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 #ifndef ZenUtilsH
00029 #define ZenUtilsH
00030
00031
00032
00033 #include "ZenLib/Conf.h"
00034
00035
00036 namespace ZenLib
00037 {
00038
00039
00040
00041
00042
00043
00044
00045 int8s LittleEndian2int8s (const char* List);
00046 int8u LittleEndian2int8u (const char* List);
00047 int16s LittleEndian2int16s (const char* List);
00048 int16u LittleEndian2int16u (const char* List);
00049 int32s LittleEndian2int24s (const char* List);
00050 int32u LittleEndian2int24u (const char* List);
00051 int32s LittleEndian2int32s (const char* List);
00052 int32u LittleEndian2int32u (const char* List);
00053 #if (MAXTYPE_INT >= 64)
00054 int64s LittleEndian2int40s (const char* List);
00055 int64u LittleEndian2int40u (const char* List);
00056 int64s LittleEndian2int48s (const char* List);
00057 int64u LittleEndian2int48u (const char* List);
00058 int64s LittleEndian2int56s (const char* List);
00059 int64u LittleEndian2int56u (const char* List);
00060 int64s LittleEndian2int64s (const char* List);
00061 int64u LittleEndian2int64u (const char* List);
00062 #endif
00063 #ifndef __BORLANDC__
00064 inline int8s LittleEndian2int8s (const int8u* List) {return LittleEndian2int8s ((const char*)List);}
00065 inline int8u LittleEndian2int8u (const int8u* List) {return LittleEndian2int8u ((const char*)List);}
00066 inline int16s LittleEndian2int16s (const int8u* List) {return LittleEndian2int16s ((const char*)List);}
00067 inline int16u LittleEndian2int16u (const int8u* List) {return LittleEndian2int16u ((const char*)List);}
00068 inline int32s LittleEndian2int24s (const int8u* List) {return LittleEndian2int24s ((const char*)List);}
00069 inline int32u LittleEndian2int24u (const int8u* List) {return LittleEndian2int24u ((const char*)List);}
00070 inline int32s LittleEndian2int32s (const int8u* List) {return LittleEndian2int32s ((const char*)List);}
00071 inline int32u LittleEndian2int32u (const int8u* List) {return LittleEndian2int32u ((const char*)List);}
00072 #if (MAXTYPE_INT >= 64)
00073 inline int64s LittleEndian2int40s (const int8u* List) {return LittleEndian2int40s ((const char*)List);}
00074 inline int64u LittleEndian2int40u (const int8u* List) {return LittleEndian2int40u ((const char*)List);}
00075 inline int64s LittleEndian2int48s (const int8u* List) {return LittleEndian2int48s ((const char*)List);}
00076 inline int64u LittleEndian2int48u (const int8u* List) {return LittleEndian2int48u ((const char*)List);}
00077 inline int64s LittleEndian2int56s (const int8u* List) {return LittleEndian2int56s ((const char*)List);}
00078 inline int64u LittleEndian2int56u (const int8u* List) {return LittleEndian2int56u ((const char*)List);}
00079 inline int64s LittleEndian2int64s (const int8u* List) {return LittleEndian2int64s ((const char*)List);}
00080 inline int64u LittleEndian2int64u (const int8u* List) {return LittleEndian2int64u ((const char*)List);}
00081 #endif
00082 #endif //__BORLANDC__
00083
00084
00085 int8s BigEndian2int8s (const char* List);
00086 int8u BigEndian2int8u (const char* List);
00087 int16s BigEndian2int16s (const char* List);
00088 int16u BigEndian2int16u (const char* List);
00089 int32s BigEndian2int24s (const char* List);
00090 int32u BigEndian2int24u (const char* List);
00091 int32s BigEndian2int32s (const char* List);
00092 int32u BigEndian2int32u (const char* List);
00093 #if (MAXTYPE_INT >= 64)
00094 int64s BigEndian2int40s (const char* List);
00095 int64u BigEndian2int40u (const char* List);
00096 int64s BigEndian2int48s (const char* List);
00097 int64u BigEndian2int48u (const char* List);
00098 int64s BigEndian2int56s (const char* List);
00099 int64u BigEndian2int56u (const char* List);
00100 int64s BigEndian2int64s (const char* List);
00101 int64u BigEndian2int64u (const char* List);
00102 #endif
00103 #ifndef __BORLANDC__
00104 inline int8s BigEndian2int8s (const int8u* List) {return BigEndian2int8s ((const char*)List);}
00105 inline int8u BigEndian2int8u (const int8u* List) {return BigEndian2int8u ((const char*)List);}
00106 inline int16s BigEndian2int16s (const int8u* List) {return BigEndian2int16s ((const char*)List);}
00107 inline int16u BigEndian2int16u (const int8u* List) {return BigEndian2int16u ((const char*)List);}
00108 inline int32s BigEndian2int32s (const int8u* List) {return BigEndian2int32s ((const char*)List);}
00109 inline int32u BigEndian2int24u (const int8u* List) {return BigEndian2int24u ((const char*)List);}
00110 inline int32s BigEndian2int24s (const int8u* List) {return BigEndian2int24s ((const char*)List);}
00111 inline int32u BigEndian2int32u (const int8u* List) {return BigEndian2int32u ((const char*)List);}
00112 #if (MAXTYPE_INT >= 64)
00113 inline int64s BigEndian2int40s (const int8u* List) {return BigEndian2int40s ((const char*)List);}
00114 inline int64u BigEndian2int40u (const int8u* List) {return BigEndian2int40u ((const char*)List);}
00115 inline int64s BigEndian2int48s (const int8u* List) {return BigEndian2int48s ((const char*)List);}
00116 inline int64u BigEndian2int48u (const int8u* List) {return BigEndian2int48u ((const char*)List);}
00117 inline int64s BigEndian2int56s (const int8u* List) {return BigEndian2int56s ((const char*)List);}
00118 inline int64u BigEndian2int56u (const int8u* List) {return BigEndian2int56u ((const char*)List);}
00119 inline int64s BigEndian2int64s (const int8u* List) {return BigEndian2int64s ((const char*)List);}
00120 inline int64u BigEndian2int64u (const int8u* List) {return BigEndian2int64u ((const char*)List);}
00121 #endif
00122 #endif //__BORLANDC__
00123
00124
00125
00126 int64s int32s_int64s ( int32s High, int32u Low);
00127 int64u int32u_int64u ( int32u High, int32u Low);
00128 void int32s_int64s (int64s &BigInt, int32s High, int32u Low);
00129 void int32u_int64u (int64s &BigInt, int32u High, int32u Low);
00130 void int64s_int32s (int64s BigInt, int32s &High, int32u &Low);
00131 void int64u_int32u (int64u BigInt, int32u &High, int32u &Low);
00132
00133
00134
00135 int32s float32_int32s (float32 F, bool Rounded=true);
00136 int64s float32_int64s (float32 F, bool Rounded=true);
00137 int32s float64_int32s (float64 F, bool Rounded=true);
00138 int64s float64_int64s (float64 F, bool Rounded=true);
00139
00140
00141 #if defined(_MSC_VER) && _MSC_VER<=1200
00142 inline float32 int64u_float32 (int64u v) {return static_cast<float32>(static_cast<int64s>(v>>1))*2.0f + static_cast<float32>(static_cast<int64s>(v & 1));}
00143 inline float64 int64u_float64 (int64u v) {return static_cast<float64>(static_cast<int64s>(v>>1))*2.0f + static_cast<float32>(static_cast<int64s>(v & 1));}
00144 #else
00145 #if defined(_MSC_VER)
00146 #pragma warning( disable : 4244 )
00147 #endif
00148 inline float32 int64u_float32 (int64u v) {return v;}
00149 inline float64 int64u_float64 (int64u v) {return v;}
00150 #if defined(_MSC_VER)
00151 #pragma warning( default : 4244 )
00152 #endif
00153 #endif // defined(_MSC_VER) && _MSC_VER<=1200
00154
00155
00156
00157 inline int64u CC8(const char* C) {return BigEndian2int64u(C);}
00158 inline int64u CC7(const char* C) {return BigEndian2int56u(C);}
00159 inline int64u CC6(const char* C) {return BigEndian2int48u(C);}
00160 inline int64u CC5(const char* C) {return BigEndian2int40u(C);}
00161 inline int32u CC4(const char* C) {return BigEndian2int32u(C);}
00162 inline int32u CC3(const char* C) {return BigEndian2int24u(C);}
00163 inline int16u CC2(const char* C) {return BigEndian2int16u(C);}
00164 inline int8u CC1(const char* C) {return BigEndian2int8u (C);}
00165 #ifndef __BORLANDC__
00166 inline int64u CC8(const int8u* C) {return BigEndian2int64u(C);}
00167 inline int64u CC7(const int8u* C) {return BigEndian2int56u(C);}
00168 inline int64u CC6(const int8u* C) {return BigEndian2int48u(C);}
00169 inline int64u CC5(const int8u* C) {return BigEndian2int40u(C);}
00170 inline int32u CC4(const int8u* C) {return BigEndian2int32u(C);}
00171 inline int32u CC3(const int8u* C) {return BigEndian2int24u(C);}
00172 inline int16u CC2(const int8u* C) {return BigEndian2int16u(C);}
00173 inline int8u CC1(const int8u* C) {return BigEndian2int8u (C);}
00174 #endif // __BORLANDC__
00175
00176
00177
00178
00179
00180 #define HEX__(n) 0x##n##LU
00181
00182
00183 #define B8__(x) ((x&0x0000000FLU)?0x01:0) \
00184 +((x&0x000000F0LU)?0x02:0) \
00185 +((x&0x00000F00LU)?0x04:0) \
00186 +((x&0x0000F000LU)?0x08:0) \
00187 +((x&0x000F0000LU)?0x10:0) \
00188 +((x&0x00F00000LU)?0x20:0) \
00189 +((x&0x0F000000LU)?0x40:0) \
00190 +((x&0xF0000000LU)?0x80:0)
00191
00192
00193 #define B8(d) ((int8u)B8__(HEX__(d)))
00194
00195
00196 #define B16(dmsb, dlsb) (((int16u)B8(dmsb)<<8) \
00197 + ((int16u)B8(dlsb)<<0))
00198
00199
00200 #define B32(dmsb, db2, db3, dlsb) (((int32u)B8(dmsb)<<24) \
00201 + ((int32u)B8( db2)<<16) \
00202 + ((int32u)B8( db3)<< 8) \
00203 + ((int32u)B8(dlsb)<< 0))
00204
00205 }
00206 #endif