]> git.llucax.com Git - z.facultad/75.52/treemulator.git/commitdiff
Hago que el header ocupe todo el primer bloque.
authorRicardo Markiewicz <rmarkie@fi.uba.ar>
Sun, 2 Oct 2005 19:08:00 +0000 (19:08 +0000)
committerRicardo Markiewicz <rmarkie@fi.uba.ar>
Sun, 2 Oct 2005 19:08:00 +0000 (19:08 +0000)
src/btree.cpp
src/btree.h

index ae98139ae0de2bc285a634db577e6cd7db2fb12e..a063befcafc4d49cfb9b2c5f8fc59e8711a122d5 100644 (file)
@@ -45,7 +45,8 @@ void BTree::WriteFileHeader ()
 
 void BTree::WriteBlock (uchar *block, uint num)
 {
-       fseek (fp, num*header.block_size + sizeof (BTreeFileHeader), SEEK_SET);
+       num++;
+       fseek (fp, num*header.block_size, SEEK_SET);
        fwrite (block, 1, header.block_size, fp);
 }
 
@@ -402,9 +403,14 @@ void BTree::WriteNodoHeader (uchar *node, BTreeNodeHeader *header)
 
 uchar *BTree::ReadBlock (uint num)
 {
+       /* Como el bloque 0 se usa para el header, el Nodo "num"
+        * está en el bloque "num+1"
+        */
+       num++;
+
        uchar *out = new uchar[header.block_size];
 
-       fseek (fp, num*header.block_size + sizeof (BTreeFileHeader), SEEK_SET); 
+       fseek (fp, num*header.block_size, SEEK_SET);    
        fread (out, 1, header.block_size, fp);
 
        return out;
@@ -501,7 +507,7 @@ uchar *BTree::NewBlock (uint &num)
        fseek (fp, 0, SEEK_END);
        filelen = ftell (fp);
 
-       num = (filelen - sizeof (BTreeFileHeader))/header.block_size;
+       num = filelen/header.block_size - 1;
 
        node = new uchar[header.block_size];
        ReadNodoHeader (node, &nh);
index afcec63f0198033268c263583dcf2be7a0bafe11..e67c7cf537fd99a4782415d11695557ab988e7db 100644 (file)
 
 /* alias para codear menos :) */
 
-/** Encabezado del archivo BTree */
+/** Encabezado del archivo BTree 
+ *
+ *  Esta estructura es para comodidad de manejo, aunque en disco
+ *  ocupe block_size de tamaño.
+ */
 struct BTreeFileHeader {
        uint block_size;
 };