diff --git a/btree.cpp b/btree.cpp index dafb9e2..f404337 100644 --- a/btree.cpp +++ b/btree.cpp @@ -1,5 +1,7 @@ #include #include +#include + #include "btree.h" #include "btree_consts.h" @@ -69,14 +71,37 @@ for (unsigned int curNode = 1; curNode <= node->numKeys; curNode++) { size += align(keySize(&dataNode->key)); -//mjikaboom dataNode += align(keySize(&dataNode->key))); +//mjikaboom: possibly this doesn't adjust by bytes. + dataNode += align(keySize(&dataNode->key)); } // for curNode return size; } // bTree::calcSize void -bTree::discardPage(TbNode *) { +bTree::deAllocNode(TbNode * node) { + if (node == NULL) return; + + node->magic = B_NODE_OPEN; + // these should really be setNull() calls, but, as mentioned elsewhere + // GNU is evil and crappy. + + node->left.offset = 0; + node->right.offset = 0; + node->reserved.offset = 0; + if (!memoryTree) node->parent = getFirstDeleted(); + node->size = (int)&node->data - (int)node; + memset(&node->data, 0, info->bNodeSize - node->size); + + if (!memoryTree) setFirstDeleted(getAddress(node)); + savePage(node); + free(node); +} // bTree::deAllocNode + +void +bTree::discardPage(TbNode * node) { + if (!memoryTree) + if (node != NULL) free(node); } // bTree::discardPage bool diff --git a/btree.h b/btree.h index 0cf6ccc..bd13d53 100644 --- a/btree.h +++ b/btree.h @@ -18,6 +18,7 @@ int align(int); uPtr allocEmptyNode(void); int calcSize(TbNode *); + void deAllocNode(TbNode *); void discardPage(TbNode *); bool isNull(uPtr); uPtr getAddress(TbNode *);