Parcourir la source

structure/SAvl: expose range queries

ambrop7 il y a 13 ans
Parent
commit
fbf246f3eb
4 fichiers modifiés avec 44 ajouts et 0 suppressions
  1. 4 0
      structure/SAvl_decl.h
  2. 8 0
      structure/SAvl_footer.h
  3. 8 0
      structure/SAvl_header.h
  4. 24 0
      structure/SAvl_impl.h

+ 4 - 0
structure/SAvl_decl.h

@@ -53,6 +53,10 @@ static void SAvl_Remove (SAvl *o, SAvlArg arg, SAvlEntry *entry);
 #if !SAVL_PARAM_FEATURE_NOKEYS
 static SAvlEntry * SAvl_Lookup (const SAvl *o, SAvlArg arg, SAvlKey key);
 static SAvlEntry * SAvl_LookupExact (const SAvl *o, SAvlArg arg, SAvlKey key);
+static SAvlEntry * SAvl_GetFirstGreater (const SAvl *o, SAvlArg arg, SAvlKey key);
+static SAvlEntry * SAvl_GetLastLesser (const SAvl *o, SAvlArg arg, SAvlKey key);
+static SAvlEntry * SAvl_GetFirstGreaterEqual (const SAvl *o, SAvlArg arg, SAvlKey key);
+static SAvlEntry * SAvl_GetLastLesserEqual (const SAvl *o, SAvlArg arg, SAvlKey key);
 #endif
 static SAvlEntry * SAvl_GetFirst (const SAvl *o, SAvlArg arg);
 static SAvlEntry * SAvl_GetLast (const SAvl *o, SAvlArg arg);

+ 8 - 0
structure/SAvl_footer.h

@@ -51,6 +51,10 @@
 #undef SAvl_Remove
 #undef SAvl_Lookup
 #undef SAvl_LookupExact
+#undef SAvl_GetFirstGreater
+#undef SAvl_GetLastLesser
+#undef SAvl_GetFirstGreaterEqual
+#undef SAvl_GetLastLesserEqual
 #undef SAvl_GetFirst
 #undef SAvl_GetLast
 #undef SAvl_GetNext
@@ -70,6 +74,10 @@
 #undef SAvl__Tree_Remove
 #undef SAvl__Tree_Lookup
 #undef SAvl__Tree_LookupExact
+#undef SAvl__Tree_GetFirstGreater
+#undef SAvl__Tree_GetLastLesser
+#undef SAvl__Tree_GetFirstGreaterEqual
+#undef SAvl__Tree_GetLastLesserEqual
 #undef SAvl__Tree_GetFirst
 #undef SAvl__Tree_GetLast
 #undef SAvl__Tree_GetNext

+ 8 - 0
structure/SAvl_header.h

@@ -54,6 +54,10 @@
 #define SAvl_Remove MERGE(SAvl, _Remove)
 #define SAvl_Lookup MERGE(SAvl, _Lookup)
 #define SAvl_LookupExact MERGE(SAvl, _LookupExact)
+#define SAvl_GetFirstGreater MERGE(SAvl, _GetFirstGreater)
+#define SAvl_GetLastLesser MERGE(SAvl, _GetLastLesser)
+#define SAvl_GetFirstGreaterEqual MERGE(SAvl, _GetFirstGreaterEqual)
+#define SAvl_GetLastLesserEqual MERGE(SAvl, _GetLastLesserEqual)
 #define SAvl_GetFirst MERGE(SAvl, _GetFirst)
 #define SAvl_GetLast MERGE(SAvl, _GetLast)
 #define SAvl_GetNext MERGE(SAvl, _GetNext)
@@ -74,6 +78,10 @@
 #define SAvl__Tree_Remove MERGE(SAvl, __Tree_Remove)
 #define SAvl__Tree_Lookup MERGE(SAvl, __Tree_Lookup)
 #define SAvl__Tree_LookupExact MERGE(SAvl, __Tree_LookupExact)
+#define SAvl__Tree_GetFirstGreater MERGE(SAvl, __Tree_GetFirstGreater)
+#define SAvl__Tree_GetLastLesser MERGE(SAvl, __Tree_GetLastLesser)
+#define SAvl__Tree_GetFirstGreaterEqual MERGE(SAvl, __Tree_GetFirstGreaterEqual)
+#define SAvl__Tree_GetLastLesserEqual MERGE(SAvl, __Tree_GetLastLesserEqual)
 #define SAvl__Tree_GetFirst MERGE(SAvl, __Tree_GetFirst)
 #define SAvl__Tree_GetLast MERGE(SAvl, __Tree_GetLast)
 #define SAvl__Tree_GetNext MERGE(SAvl, __Tree_GetNext)

+ 24 - 0
structure/SAvl_impl.h

@@ -75,6 +75,30 @@ static SAvlEntry * SAvl_LookupExact (const SAvl *o, SAvlArg arg, SAvlKey key)
     return ref.link;
 }
 
+static SAvlEntry * SAvl_GetFirstGreater (const SAvl *o, SAvlArg arg, SAvlKey key)
+{
+    SAvl__TreeRef ref = SAvl__Tree_GetFirstGreater(&o->tree, arg, key);
+    return ref.link;
+}
+
+static SAvlEntry * SAvl_GetLastLesser (const SAvl *o, SAvlArg arg, SAvlKey key)
+{
+    SAvl__TreeRef ref = SAvl__Tree_GetLastLesser(&o->tree, arg, key);
+    return ref.link;
+}
+
+static SAvlEntry * SAvl_GetFirstGreaterEqual (const SAvl *o, SAvlArg arg, SAvlKey key)
+{
+    SAvl__TreeRef ref = SAvl__Tree_GetFirstGreaterEqual(&o->tree, arg, key);
+    return ref.link;
+}
+
+static SAvlEntry * SAvl_GetLastLesserEqual (const SAvl *o, SAvlArg arg, SAvlKey key)
+{
+    SAvl__TreeRef ref = SAvl__Tree_GetLastLesserEqual(&o->tree, arg, key);
+    return ref.link;
+}
+
 #endif
 
 static SAvlEntry * SAvl_GetFirst (const SAvl *o, SAvlArg arg)