~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to mysys/my_bit.h

  • Committer: Jay Pipes
  • Date: 2008-08-06 20:57:54 UTC
  • mto: (264.1.17 codestyle)
  • mto: This revision was merged to the branch mainline in revision 266.
  • Revision ID: jay@mysql.com-20080806205754-shtn6qslum09n9x9
* Added Doxyfile configuration for doxygen builds
* Update Makefile with a make doxygen command
* Note that doxygen as run with the Doxyfile requires Graphviz to be installed

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
  Some useful bit functions
3
3
*/
4
4
 
5
 
#ifdef __cplusplus
6
 
extern "C" {
7
 
#endif
 
5
C_MODE_START
8
6
 
9
7
extern const char _my_bits_nbits[256];
10
 
extern const unsigned char _my_bits_reverse_table[256];
 
8
extern const uchar _my_bits_reverse_table[256];
11
9
 
12
10
/*
13
11
  Find smallest X in 2^X >= value
14
12
  This can be used to divide a number with value by doing a shift instead
15
13
*/
16
14
 
17
 
static inline uint32_t my_bit_log2(uint32_t value)
 
15
static inline uint my_bit_log2(ulong value)
18
16
{
19
 
  uint32_t bit;
 
17
  uint bit;
20
18
  for (bit=0 ; value > 1 ; value>>=1, bit++) ;
21
19
  return bit;
22
20
}
23
21
 
24
 
static inline uint32_t my_count_bits(uint64_t v)
 
22
static inline uint my_count_bits(uint64_t v)
25
23
{
 
24
#if SIZEOF_LONG_LONG > 4
26
25
  /* The following code is a bit faster on 16 bit machines than if we would
27
26
     only shift v */
28
 
  uint32_t v2=(uint32_t) (v >> 32);
29
 
  return (uint) (unsigned char) (_my_bits_nbits[(unsigned char)  v] +
30
 
                         _my_bits_nbits[(unsigned char) (v >> 8)] +
31
 
                         _my_bits_nbits[(unsigned char) (v >> 16)] +
32
 
                         _my_bits_nbits[(unsigned char) (v >> 24)] +
33
 
                         _my_bits_nbits[(unsigned char) (v2)] +
34
 
                         _my_bits_nbits[(unsigned char) (v2 >> 8)] +
35
 
                         _my_bits_nbits[(unsigned char) (v2 >> 16)] +
36
 
                         _my_bits_nbits[(unsigned char) (v2 >> 24)]);
 
27
  ulong v2=(ulong) (v >> 32);
 
28
  return (uint) (uchar) (_my_bits_nbits[(uchar)  v] +
 
29
                         _my_bits_nbits[(uchar) (v >> 8)] +
 
30
                         _my_bits_nbits[(uchar) (v >> 16)] +
 
31
                         _my_bits_nbits[(uchar) (v >> 24)] +
 
32
                         _my_bits_nbits[(uchar) (v2)] +
 
33
                         _my_bits_nbits[(uchar) (v2 >> 8)] +
 
34
                         _my_bits_nbits[(uchar) (v2 >> 16)] +
 
35
                         _my_bits_nbits[(uchar) (v2 >> 24)]);
 
36
#else
 
37
  return (uint) (uchar) (_my_bits_nbits[(uchar)  v] +
 
38
                         _my_bits_nbits[(uchar) (v >> 8)] +
 
39
                         _my_bits_nbits[(uchar) (v >> 16)] +
 
40
                         _my_bits_nbits[(uchar) (v >> 24)]);
 
41
#endif
37
42
}
38
43
 
39
 
static inline uint32_t my_count_bits_uint16(uint16_t v)
 
44
static inline uint my_count_bits_ushort(ushort v)
40
45
{
41
46
  return _my_bits_nbits[v];
42
47
}
92
97
     _my_bits_reverse_table[(key>>24)      ];
93
98
}
94
99
 
95
 
#ifdef __cplusplus
96
 
}
97
 
#endif
98
 
 
 
100
C_MODE_END