--- rxvt-unicode/src/rxvtutil.C 2004/08/15 00:37:04 1.1 +++ rxvt-unicode/src/rxvtutil.C 2006/01/30 16:12:58 1.5 @@ -6,6 +6,8 @@ class byteorder byteorder; +unsigned int byteorder::e; + byteorder::byteorder () { union { @@ -21,5 +23,62 @@ e = w.u; } +#if !HAVE_GCC_BUILTINS +int ctz (unsigned int x) CONST +{ + int r = 0; + + x &= -x; // this isolates the lowest bit + + if (x & 0xaaaaaaaa) r += 1; + if (x & 0xcccccccc) r += 2; + if (x & 0xf0f0f0f0) r += 4; + if (x & 0xff00ff00) r += 8; + if (x & 0xffff0000) r += 16; + + return r; +} + +int popcount (unsigned int x) CONST +{ + x -= (x >> 1) & 0x55555555; + x = ((x >> 2) & 0x33333333) + (x & 0x33333333); + x = ((x >> 4) + x) & 0x0f0f0f0f; + x *= 0x01010101; + + return x >> 24; +} +#endif + +void * +zero_initialized::operator new (size_t s) +{ + void *p = malloc (s); + + memset (p, 0, s); + return p; +} + +void +zero_initialized::operator delete (void *p, size_t s) +{ + free (p); +} + +static void *temp_buf; +static uint32_t temp_len; + +void * +rxvt_temp_buf (int len) +{ + if (len > temp_len) + { + free (temp_buf); + temp_buf = malloc (len); + temp_len = len; + } + + return temp_buf; +}