From: Ricardo Markiewicz Date: Tue, 13 Sep 2005 18:03:41 +0000 (+0000) Subject: Cerrando el ciclo de llenar una hoja X-Git-Tag: 1_0-pre1~135 X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/commitdiff_plain/226df952388af8a4955b26b1ef0b5e1784103bf5?ds=inline Cerrando el ciclo de llenar una hoja --- diff --git a/src/btree.cpp b/src/btree.cpp index 8f18c66..dd0551d 100644 --- a/src/btree.cpp +++ b/src/btree.cpp @@ -63,17 +63,16 @@ Clave* BTree::AddKeyR (const Clave *k, uint node_num) BTreeNodeHeader node_header; ReadNodoHeader (node, &node_header); - node_keys = ReadKeys (node, node_header); - - if (node_header.free_space >= k->Size ()) { + BTreeLeafData data (k->Clone ()); + + if (node_header.free_space > data.Size ()) { /* TODO : Insertar ordenado */ - /* Siempre se agrega en una hoja */ - node_keys.push_back (BTreeLeafData (k->Clone ())); + node_keys = ReadKeys (node, node_header); + node_keys.push_back (data); WriteKeys (node, node_header, node_keys); WriteNodoHeader (node, &node_header); WriteBlock (node, node_num); - delete [] node; } else { /* Split */ /* Lo que debe pasar : @@ -82,6 +81,7 @@ Clave* BTree::AddKeyR (const Clave *k, uint node_num) * 3) kout = clave del medio y mandarla al padre */ std::cout << "SPLIT" << std::endl; + delete [] node; } return kout; @@ -120,7 +120,11 @@ std::list BTree::ReadKeys (uchar *node, BTreeNodeHeader &node_header) * arbol */ /* TODO : Detectar si estoy en una hoja */ - BTreeData data(node); + BTreeData data; + if (node_header.level == 0) + data = BTreeLeafData (node); + else + data = BTreeData (node); node += data.Size (); keys.push_back (data); } diff --git a/src/btree_data.h b/src/btree_data.h index d920c9f..b590040 100644 --- a/src/btree_data.h +++ b/src/btree_data.h @@ -25,6 +25,7 @@ class BTreeData { class BTreeLeafData:public BTreeData { public: BTreeLeafData (Clave *k):BTreeData () { clave = k; } + BTreeLeafData (uchar *node) { clave = new ClaveFija (node); } virtual ~BTreeLeafData (); virtual uint Size ();