static inline rec_s *find_rec (leaf_s *leaf, u64 key) { rec_s *rec; FN; rec = binary_search_leaf_or_next(key, leaf->l_rec, leaf->l_num); return found(leaf, rec, key) ? rec : 0; }
static inline rec_s *find_rec (leaf_s *leaf, u32 key) { rec_s *rec; FN; rec = binary_search_leaf_or_next(key, leaf->l_rec, leaf->l_num); if (found(leaf, rec, key)) { return rec; } else { return NULL; } }
static int find_or_next_leaf ( leaf_s *leaf, u64 key, u64 *found_or_next_key, char *name) { rec_s *rec; rec = binary_search_leaf_or_next(key, leaf->l_rec, leaf->l_num); if (rec == &leaf->l_rec[leaf->l_num]) { return qERR_TRY_NEXT; } assert(key <= rec->r_key); *found_or_next_key = rec->r_key; if (name) { memcpy(name, (char *)leaf + rec->r_start, rec->r_size); } return 0; }
static int search_leaf ( tree_s *tree, leaf_s *leaf, u64 key, search_f sf, void *data) { rec_s *rec; int rc; rec = binary_search_leaf_or_next(key, leaf->l_rec, leaf->l_num); assert(rec); for (;;) { if (rec == &leaf->l_rec[leaf->l_num]) { return qERR_TRY_NEXT; } rc = sf(data, rec->r_key, (char *)leaf + rec->r_start, rec->r_size); if (rc != qERR_TRY_NEXT) { return rc; } ++rec; } }
static inline rec_s *leaf_search (void *blk, u32 key) { leaf_s *leaf = blk; FN; return binary_search_leaf_or_next(key, leaf->l_rec, leaf->l_num); }