X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/blobdiff_plain/6fcd86dce909f05de818fdd78d76e70aabc3ad22..1b6152a8b901df0e8b57c35b9846a6e609b8b7df:/src/btree.cpp diff --git a/src/btree.cpp b/src/btree.cpp index 1ad006d..50a7801 100644 --- a/src/btree.cpp +++ b/src/btree.cpp @@ -4,7 +4,7 @@ BTree::BTree (const char *name, unsigned int block_size, bool create_new_file) { uchar *node; - + BTreeNodeHeader nh; fp = fopen (name, "wb"); if (!fp) { @@ -21,7 +21,13 @@ BTree::BTree (const char *name, unsigned int block_size, bool create_new_file) /* Creo el primer bloque vacio */ node = new uchar[block_size]; + ReadNodoHeader (node, &nh); + nh.level = 0; + nh.free_space = block_size - sizeof (BTreeNodeHeader); + nh.item_count = 0; + WriteNodoHeader (node, &nh); write_block (node, 0); + delete [] node; } @@ -33,15 +39,25 @@ BTree::~BTree () void BTree::write_tree_header () { fseek (fp, 0L, SEEK_SET); - fwrite (&header, 1, sizeof (BTreeHeader), fp); + fwrite (&header, 1, sizeof (BTreeFileHeader), fp); } void BTree::write_block (uchar *block, uint num) { - fseek (fp, num*header.block_size + sizeof (BTreeHeader), SEEK_SET); + fseek (fp, num*header.block_size + sizeof (BTreeFileHeader), SEEK_SET); fwrite (block, 1, header.block_size, fp); } void BTree::AddKey () {} void BTree::DelKey () {} +void BTree::ReadNodoHeader (uchar *node, BTreeNodeHeader *header) +{ + memcpy (header, node, sizeof (BTreeNodeHeader)); +} + +void BTree::WriteNodoHeader (uchar *node, BTreeNodeHeader *header) +{ + memcpy (node, header, sizeof (BTreeNodeHeader)); +} +