restore to the 8-bit level index variant
authorRalph Ronnquist <ralph.ronnquist@gmail.com>
Mon, 27 Jun 2022 00:24:40 +0000 (10:24 +1000)
committerRalph Ronnquist <ralph.ronnquist@gmail.com>
Mon, 27 Jun 2022 00:24:40 +0000 (10:24 +1000)
vector/Makefile
vector/vector.c
vector/vector.h

index f8b05a7fd908a4292a30613b1aada6ae61b2a847..edd309ff154c3dce8f94f1176e099cd64aed4f1e 100644 (file)
@@ -2,7 +2,7 @@ LIBRARY = libvector.a
 LIBOBJS = vector.o hashvector.o
 
 # This is overridable on command line
-VECTOR_LEVEL_BITS = 4
+VECTOR_LEVEL_BITS = 8
 
 default: $(LIBRARY)
 
index feaed9f1792ae571d92083bd4a7c642d2f9f370a..c4482a7d55bb6f977075ab9e6bab400d5b1e1cd2 100644 (file)
@@ -32,6 +32,19 @@ static int VECTOR_INDEX_PART_INC(vector_index *index,int part) {
     }
     return ++VECTOR_PART_BYTE(index,part).msb;
 }
+#elif VECTOR_LEVEL_BITS == 8
+
+#define VECTOR_LEVEL_MASK ( VECTOR_SLOTS - 1 )
+
+typedef union {
+    vector_index as_whole;
+    unsigned char as_byte[8];
+} vector_indexing;
+
+#define VECTOR_INDEX_PART(i,p) (((vector_indexing*)(i))->as_byte[p])
+
+#define VECTOR_INDEX_PART_INC(i,p) (++VECTOR_INDEX_PART(i,p))
+
 #endif
 
 /**
index d84c08c1f8222603d8490015732b435f7bfa8ffc..ccd57f30643fc5fef8b4c32a555a54ad588d93e3 100644 (file)
@@ -6,11 +6,13 @@
  * of index pages. The indexing is done using "unsigned long" indexes.
  */
 
+#ifndef VECTOR_LEVEL_BITS
 /*!
  * Macro: VECTOR_LEVEL_BITS
  * This defines the number of bits in the indexing bit field.
  */
-#define VECTOR_LEVEL_BITS 4
+#define VECTOR_LEVEL_BITS 8
+#endif
 
 /*!
  * Type: vector_index