ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/gclib/gclib/GBase.h
(Generate patch)
# Line 25 | Line 25
25    #define CHPATHSEP '\\'
26    #undef off_t
27    #define off_t int64_t
28 +  #ifndef popen
29 +   #define popen _popen
30 +  #endif
31    #ifdef _fseeki64
32      #define fseeko(stream, offset, origin) _fseeki64(stream, offset, origin)
33    #else
# Line 61 | Line 64
64  
65   typedef int32_t int32;
66   typedef uint32_t uint32;
67 + typedef int16_t int16;
68 + typedef uint16_t uint16;
69  
70   typedef unsigned char uchar;
71   typedef unsigned char byte;
# Line 167 | Line 172
172    return a-b;
173   }
174  
175 < int Gstrcmp(char* a, char* b);
175 > int Gstrcmp(const char* a, const char* b, int n=-1);
176   //same as strcmp but doesn't crash on NULL pointers
177  
178 < int Gstricmp(const char* a, const char* b);
178 > int Gstricmp(const char* a, const char* b, int n=-1);
179  
180   //basic swap template function
181   template<class T> void Gswap(T& lhs, T& rhs) {
# Line 180 | Line 185
185   rhs=tmp;
186   }
187  
183 /// bitCount_32 - this function counts the number of set bits in a value.
184 /// Ex. CountPopulation(0xF000F000) = 8
185 /// Returns 0 if the word is zero.
186 inline uint bitCount_32(uint32_t Value) {
187 #if __GNUC__ >= 4
188    return __builtin_popcount(Value);
189 #else
190    uint32_t v = Value - ((Value >> 1) & 0x55555555);
191    v = (v & 0x33333333) + ((v >> 2) & 0x33333333);
192    return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24;
193 #endif
194  }
195
196 /// bitCount_64 - this function counts the number of set bits in a value,
197 /// (64 bit edition.)
198 inline uint bitCount_64(uint64_t Value) {
199 #if __GNUC__ >= 4
200    return __builtin_popcountll(Value);
201 #else
202    uint64_t v = Value - ((Value >> 1) & 0x5555555555555555ULL);
203    v = (v & 0x3333333333333333ULL) + ((v >> 2) & 0x3333333333333333ULL);
204    v = (v + (v >> 4)) & 0x0F0F0F0F0F0F0F0FULL;
205    return uint((uint64_t)(v * 0x0101010101010101ULL) >> 56);
206 #endif
207  }
208
209 /// CountTrailingZeros_32 - this function performs the platform optimal form of
210 /// counting the number of zeros from the least significant bit to the first one
211 /// bit.  Ex. CountTrailingZeros_32(0xFF00FF00) == 8.
212 /// Returns 32 if the word is zero.
213 inline unsigned bitCountTrailingZeros_32(uint32_t Value) {
214 #if __GNUC__ >= 4
215  return Value ? __builtin_ctz(Value) : 32;
216 #else
217  static const unsigned Mod37BitPosition[] = {
218    32, 0, 1, 26, 2, 23, 27, 0, 3, 16, 24, 30, 28, 11, 0, 13,
219    4, 7, 17, 0, 25, 22, 31, 15, 29, 10, 12, 6, 0, 21, 14, 9,
220    5, 20, 8, 19, 18
221  };
222  return Mod37BitPosition[(-Value & Value) % 37];
223 #endif
224 }
225
226 // CountTrailingZeros_64 - This function performs the platform optimal form
227 /// of counting the number of zeros from the least significant bit to the first
228 /// one bit (64 bit edition.)
229 /// Returns 64 if the word is zero.
230 inline unsigned bitCountTrailingZeros_64(uint64_t Value) {
231 #if __GNUC__ >= 4
232  return Value ? __builtin_ctzll(Value) : 64;
233 #else
234  static const unsigned Mod67Position[] = {
235    64, 0, 1, 39, 2, 15, 40, 23, 3, 12, 16, 59, 41, 19, 24, 54,
236    4, 64, 13, 10, 17, 62, 60, 28, 42, 30, 20, 51, 25, 44, 55,
237    47, 5, 32, 65, 38, 14, 22, 11, 58, 18, 53, 63, 9, 61, 27,
238    29, 50, 43, 46, 31, 37, 21, 57, 52, 8, 26, 49, 45, 36, 56,
239    7, 48, 35, 6, 34, 33, 0
240  };
241  return Mod67Position[(-Value & Value) % 67];
242 #endif
243 }
188  
189   /**************** Memory management ***************************/
190  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines