struct BTreeNode *create_BTreeNode(struct MyDB *myDB){//malloc and assign node's offset in file (in free position) struct BTreeNode *node = node_malloc(myDB); if (assign_BTreeNode(myDB,node)<0){ fprintf(stderr,"ERROR: cannot assign node\n"); node_free(myDB, node); return NULL; } return node; }
// // node allocation // node *newnode(enum ltype type) { node *n; n = (node *) node_malloc(); n->type = type; n->marked = 0; next(n) = allocated; allocated = n; return n; }
//问题原因终于找到了,我把链表整的太复杂了。。 //不过,其实可以加一个list类的,这样会省去很多的麻烦事情,长度,不过关于头节点,尾部节点 //不的不说,创建一个哨兵节点比创建一个头节点,尾节点,要省去很多事情,不用加那么多的条件限制 void insert_node(list_node *local_guard_node,int new_node_value){ //new_node初始化并且赋值 list_node *new_node=node_malloc(); new_node->node_value=new_node_value; //这里进行节点的对应操作 new_node->previous_node=local_guard_node->previous_node; local_guard_node->previous_node->next_node=new_node; new_node->next_node=local_guard_node; local_guard_node->previous_node=new_node; }
struct BTreeNode *node_copy(struct MyDB *myDB, struct BTreeNode *node){ struct BTreeNode *node2 = node_malloc(myDB); size_t t = myDB->t; node2->n = node->n; node2->leaf = node->leaf; node2->offset = node->offset; long j; for(j=0;j<2*t-1;j++){ memcpy(node2->keys[j].data, node->keys[j].data, MAX_KEY_LENGTH); node2->keys[j].size = node->keys[j].size; memcpy(node2->values[j].data, node->values[j].data, MAX_VALUE_LENGTH); node2->values[j].size = node->values[j].size; } memcpy(node2->childs, node->childs, 2*t*sizeof(size_t)); return node2; }