/** * btree_init * @access private * @param btree struct, caller allocates and owns * @return void * * Empties out the current contents of a btree and sets up a new root node */ static void btree_init(btree_tree *t) { btree_node *tmp_node; t->header->version = 1; t->header->next_node_idx = 0; t->header->node_count = NODE_COUNT(t->header->max_items, t->header->order); t->freelist.size = t->header->max_items; t->freelist.setinfo = t->mmap + BTREE_HEADER_SIZE; dr_set_init(&(t->freelist)); t->nodes = t->mmap + BTREE_HEADER_SIZE + BTREE_FREELIST_SIZE(t->header->max_items); t->data = t->mmap + BTREE_HEADER_SIZE + BTREE_FREELIST_SIZE(t->header->max_items) + (t->header->node_count * 4096); tmp_node = btree_allocate_node(t); tmp_node->leaf = 1; tmp_node->nr_of_keys = 0; t->root = tmp_node; }
dr_set *dr_set_create(unsigned int size) { dr_set *tmp; if (size < 1) { return NULL; } tmp = calloc(1, sizeof(dr_set)); tmp->size = size; tmp->setinfo = calloc(1, DR_SET_SIZE(size)); dr_set_init(tmp); return tmp; }