]> git.sesse.net Git - plocate/blobdiff - turbopfor-encode.h
Add missing <endian.h> include.
[plocate] / turbopfor-encode.h
index 9341efc0b7f4c23552f29dbd115bac508eb6cc1d..186d7fba89574bdc1a94f9af62e0f9ebe907f950 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <algorithm>
 #include <assert.h>
+#include <endian.h>
 #include <limits.h>
 #include <stdint.h>
 #include <string.h>
@@ -94,11 +95,20 @@ unsigned char *write_vb(Docid val, unsigned char *out)
 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 {