diff --git a/btree.cpp b/btree.cpp index bd5ae1f..0ecafbd 100644 --- a/btree.cpp +++ b/btree.cpp @@ -47,6 +47,19 @@ } // bTree::isNull uPtr +bTree::getAddress(TbNode * node) { + uPtr u; + setNull(u); + + if (memoryTree) + u.bPtr = node; + else + u.offset = node->tag; + + return u; +} // bTree::getAddress + +uPtr bTree::getFirstDeleted(void) { if (!memoryTree) { @@ -147,10 +160,11 @@ void bTree::setFirstDeleted(uPtr value) { info->firstDeleted = value; - if (!memoryTree) { - if (!vfs->fSeek((int)&info->firstDeleted - (int)info)) exit(42); - if (!vfs->fWrite(&info->firstDeleted, sizeof(info->firstDeleted))) exit(42); - } // if not memoryTree + + if (memoryTree) return; + + if (!vfs->fSeek((int)&info->firstDeleted - (int)info)) exit(42); + if (!vfs->fWrite(&info->firstDeleted, sizeof(info->firstDeleted))) exit(42); } // bTree::setFirstDeleted @@ -158,10 +172,10 @@ bTree::setNodes(uInt32 value) { info->nodes = value; - if (!memoryTree) { - if (!vfs->fSeek((int)&info->nodes - (int)info)) exit(42); - if (!vfs->fWrite(&info->nodes, sizeof(info->nodes))) exit(42); - } // if not memoryTree + if (memoryTree) return; + + if (!vfs->fSeek((int)&info->nodes - (int)info)) exit(42); + if (!vfs->fWrite(&info->nodes, sizeof(info->nodes))) exit(42); } // bTree::setNodes @@ -169,10 +183,10 @@ bTree::setHeight(uInt32 value) { info->height = value; - if (!memoryTree) { - if (!vfs->fSeek((int)&info->height - (int)info)) exit(42); - if (!vfs->fWrite(&info->height, sizeof(info->height))) exit(42); - } // if not memoryTree + if (memoryTree) return; + + if (!vfs->fSeek((int)&info->height - (int)info)) exit(42); + if (!vfs->fWrite(&info->height, sizeof(info->height))) exit(42); } // bTree::setHeight @@ -180,10 +194,10 @@ bTree::setKeys(uInt32 value) { info->keys = value; - if (!memoryTree) { - if (!vfs->fSeek((int)&info->keys - (int)info)) exit(42); - if (!vfs->fWrite(&info->keys, sizeof(info->keys))) exit(42); - } // if not memoryTree + if (memoryTree) return; + + if (!vfs->fSeek((int)&info->keys - (int)info)) exit(42); + if (!vfs->fWrite(&info->keys, sizeof(info->keys))) exit(42); } // bTree::getKeys @@ -221,11 +235,11 @@ bTree::setRoot(uPtr value) { info->root = value; - if (!memoryTree) { - if (!vfs->fSeek((int)&info->root - (int)info)) exit(42); - if (!vfs->fWrite(&info->root, sizeof(info->root))) exit(42); - } // if not memoryTree - return; + if (memoryTree) return; + + if (!vfs->fSeek((int)&info->root - (int)info)) exit(42); + if (!vfs->fWrite(&info->root, sizeof(info->root))) exit(42); + } // bTree::setRoot void diff --git a/btree.h b/btree.h index 1292c1c..7cb6f6b 100644 --- a/btree.h +++ b/btree.h @@ -19,6 +19,7 @@ int calcSize(TbNode *); void discardPage(TbNode *); bool isNull(uPtr); + uPtr getAddress(TbNode *); uPtr getFirstDeleted(void); uInt32 getNodes(void); uInt32 getHeight(void);