From: Ricardo Markiewicz Date: Mon, 12 Sep 2005 04:36:26 +0000 (+0000) Subject: Manejo de headers de nodos del arbol X-Git-Tag: 1_0-pre1~159 X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/commitdiff_plain/fbf727a8d5f7eb87843eb17720eb66e51ba1707a?ds=inline Manejo de headers de nodos del arbol --- 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)); +} + diff --git a/src/btree.h b/src/btree.h index cacd29b..0ed4fbd 100644 --- a/src/btree.h +++ b/src/btree.h @@ -51,7 +51,7 @@ typedef unsigned char uchar; /** Encabezado del archivo BTree */ typedef struct _btree_file_ { - unsigned int block_size; + uint block_size; } BTreeFileHeader; /** Encabezado de un bloque */ @@ -71,7 +71,7 @@ typedef struct _btree_header_ { /** Cantidad de elementos en el nodo */ unsigned int item_count; -} BTreeHeader; +} BTreeNodeHeader; /** Crea un nuevo arbol B * @@ -90,6 +90,8 @@ class BTree { private: void write_tree_header (); void write_block (uchar *block, uint num); + void ReadNodoHeader (uchar *node, BTreeNodeHeader *header); + void WriteNodoHeader (uchar *node, BTreeNodeHeader *header); std::string filename; BTreeFileHeader header;