#ifndef OIDTREE_H #define OIDTREE_H #include "cbtree.h" #include "hash.h" #include "mem-pool.h" /* * OID trees are an efficient storage for object IDs that use a critbit tree * internally. Common prefixes are duplicated and object IDs are stored in a * way that allow easy iteration over the objects in lexicographic order. As a * consequence, operations that want to enumerate all object IDs that match a * given prefix can be answered efficiently. * * Note that it is not (yet) possible to store data other than the object IDs * themselves in this tree. */ struct oidtree { struct cb_tree tree; struct mem_pool mem_pool; }; /* Initialize the oidtree so that it is ready for use. */ void oidtree_init(struct oidtree *ot); /* * Release all memory associated with the oidtree and reinitialize it for * subsequent use. */ void oidtree_clear(struct oidtree *ot); /* Insert the object ID into the tree. */ void oidtree_insert(struct oidtree *ot, const struct object_id *oid); /* Check whether the tree contains the given object ID. */ bool oidtree_contains(struct oidtree *ot, const struct object_id *oid); /* * Callback function used for `oidtree_each()`. Returning a non-zero exit code * will cause iteration to stop. The exit code will be propagated to the caller * of `oidtree_each()`. */ typedef int (*oidtree_each_cb)(const struct object_id *oid, void *cb_data); /* * Iterate through all object IDs in the tree whose prefix matches the given * object ID prefix and invoke the callback function on each of them. * * Returns any non-zero exit code from the provided callback function. */ int oidtree_each(struct oidtree *ot, const struct object_id *prefix, size_t prefix_hex_len, oidtree_each_cb cb, void *cb_data); #endif /* OIDTREE_H */