BTree::BTree (const char *name, unsigned int block_size, bool create_new_file)
{
uchar *node;
-
+ BTreeNodeHeader nh;
fp = fopen (name, "wb");
if (!fp) {
/* 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;
}
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));
+}
+
/** Encabezado del archivo BTree */
typedef struct _btree_file_ {
- unsigned int block_size;
+ uint block_size;
} BTreeFileHeader;
/** Encabezado de un bloque */
/** Cantidad de elementos en el nodo */
unsigned int item_count;
-} BTreeHeader;
+} BTreeNodeHeader;
/** Crea un nuevo arbol B
*
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;