]> git.llucax.com Git - z.facultad/75.52/treemulator.git/commitdiff
Join de nodos no hijos de la raiz.
authorRicardo Markiewicz <rmarkie@fi.uba.ar>
Mon, 17 Oct 2005 03:52:30 +0000 (03:52 +0000)
committerRicardo Markiewicz <rmarkie@fi.uba.ar>
Mon, 17 Oct 2005 03:52:30 +0000 (03:52 +0000)
Codigo sin probar.

src/btree.cpp

index e747fb670621f5a868e70e5dcaf87ebe2439b095..9f69414f8860d995e941e210bbb5713daa836968 100644 (file)
@@ -545,12 +545,14 @@ void BTree::JoinNodes (uint node1, uint node2, uint padre)
 
        /* Busco la clave a juntar con los nodos */
        std::list<BTreeData *>::iterator it = nkpadre.begin ();
+       std::list<BTreeData *>::iterator sig;
        
        Clave *cpadre;
        BTreeData *lchild = (*it++);
 
        if (lchild->getChild () == node1) {
                cpadre = (*it)->getClave ();
+               nkpadre.erase (it);
        } else {
                while (it != nkpadre.end ()) {
                        if ((*it)->getChild () == node1)
@@ -558,7 +560,9 @@ void BTree::JoinNodes (uint node1, uint node2, uint padre)
                        it++;
                }
                cpadre = (*it)->getClave ();
+               nkpadre.erase (it);
        }
+       sig = it++;
 
        std::list<BTreeData *> newkeys;
        std::list<BTreeData *>::iterator i;
@@ -581,8 +585,19 @@ void BTree::JoinNodes (uint node1, uint node2, uint padre)
                WriteKeys (npadre, nhp, newkeys);
                WriteNodoHeader (npadre, &nhp);
                WriteBlock (npadre, padre);
+
+               /* TODO: Recuperar nodo1 y nodo2 */
        } else {
-               std::cout << "TODO : Fundir en NO PADRE" << std::endl;
+               WriteKeys (n1, nh1, newkeys);
+               WriteNodoHeader (n1, &nh1);
+               WriteBlock (n1, node1);
+
+               /* TODO : Recuperar node2 */
+               /* Actualizo punero al padre */
+               (*sig)->setChild (node1);
+               WriteKeys (npadre, nhp, nkpadre);
+               WriteNodoHeader (npadre, &nhp);
+               WriteBlock (npadre, padre);
        }
 
        DeleteKeys (nk1);