#include <algorithm>
#include <assert.h>
+#ifdef HAS_ENDIAN_H
+#include <endian.h>
+#endif
#include <limits.h>
#include <stdint.h>
#include <string.h>
template<class Docid>
inline unsigned num_bits(Docid x)
{
+#ifdef __GNUC__
if (x == 0) {
return 0;
} else {
return sizeof(Docid) * CHAR_BIT - __builtin_clz(x);
}
+#else
+ for (int i = sizeof(Docid) * CHAR_BIT; i-- > 0;) {
+ if (x & (Docid{ 1 } << i)) {
+ return i;
+ }
+ }
+ return 0;
+#endif
}
struct BitWriter {