diff -r c99e0b352e36 -r 1f0f014c0121 src/server/util/pblock.c --- 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; +} +