Change the magic number used to introduce a trie file, so that instead
[sgt/agedu] / index.c
diff --git a/index.c b/index.c
index 28119c8..f4b9801 100644 (file)
--- a/index.c
+++ b/index.c
@@ -9,9 +9,6 @@
 
 #define alignof(typ) ( offsetof(struct { char c; typ t; }, t) )
 
-#define min(x,y) ((x)<(y) ? (x):(y))
-#define max(x,y) ((x)>(y) ? (x):(y))
-
 #define PADDING(x, mod) ( ((mod) - ((x) % (mod))) % (mod) )
 
 struct avlnode {
@@ -72,11 +69,11 @@ struct indexbuild {
 };
 
 #define ELEMENT(t,offset) \
-    ((offset) ? (struct trie_file *)((char *)(t) + (offset)) : NULL)
+    ((struct trie_file *) ((offset) ? ((char *)(t) + (offset)) : NULL))
 #define NODE(t,offset) \
-    ((offset) ? (struct avlnode *)((char *)(t) + (offset)) : NULL)
+    ((struct avlnode *) ((offset) ? ((char *)(t) + (offset)) : NULL))
 #define OFFSET(t,node) \
-    ((node) ? (off_t)((const char *)node - (const char *)t) : 0)
+    ((node) ? (off_t)((const char *)node - (const char *)t) : (off_t)0)
 #define MAXDEPTH(node) ((node) ? (node)->maxdepth : 0)
 
 indexbuild *indexbuild_new(void *t, off_t startoff, int nodecount,
@@ -286,6 +283,19 @@ void indexbuild_free(indexbuild *ib)
     sfree(ib);
 }
 
+int index_has_root(const void *t, int n)
+{
+    const off_t *roots;
+
+    roots = (const off_t *)((const char *)t + trie_get_index_offset(t));
+
+    if (n == 0)
+       return 1;
+    if (n < 0 || n >= trie_count(t) || !roots[n-1])
+       return 0;
+    return 1;
+}
+
 unsigned long long index_query(const void *t, int n, unsigned long long at)
 {
     const off_t *roots;