src/server/util/pblock.c

changeset 667
1f0f014c0121
parent 556
b036ccad4b49
--- a/src/server/util/pblock.c	Fri Feb 06 19:37:41 2026 +0100
+++ b/src/server/util/pblock.c	Thu Feb 12 11:20:43 2026 +0100
@@ -1423,3 +1423,50 @@
         pblock_kvinsert(key, value, valuelen, pb);
     }
 }
+
+
+/* ------------------------ UCX Iterator for pblock ------------------------ */
+
+static bool pblock_iterator_valid(const void *it) {
+    const CxIterator *i = it;
+    return i->elem_handle != NULL;
+}
+
+
+static void* pblock_iterator_current(const void *it) {
+    const CxIterator *i = it;
+    return i->elem_handle;
+}
+
+static void pblock_iterator_next(void *it) {
+    CxIterator *i = it;
+    pblock *p = i->src_handle;
+    while(i->index < p->hsize) {
+        pb_entry *entry = i->elem_handle;
+        if(entry) {
+            entry = entry->next;
+        } else {
+            entry = p->ht[i->index];
+        }
+        
+        if(entry) {
+            i->elem_handle = entry;
+            return;
+        }
+        i->elem_handle = NULL;
+        i->index++;
+    }
+}
+
+
+NSAPI_PUBLIC CxIterator pblock_iterator(pblock *pb) {
+    CxIterator i;
+    memset(&i, 0, sizeof(CxIterator));
+    i.base.valid = pblock_iterator_valid;
+    i.base.current = pblock_iterator_current;
+    i.base.next = pblock_iterator_next;
+    i.src_handle = pb;
+    pblock_iterator_next(&i);
+    return i;
+}
+

mercurial