]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blobdiff - src/btree_data.cpp
Corrige y agrega pruebas con clave variable.
[z.facultad/75.52/treemulator.git] / src / btree_data.cpp
index b95b86a2fd030f6fc1a5b1e27e327de0763fd510..bf92909969aedf7630105ac8c91fc9db61b52661 100644 (file)
@@ -1,12 +1,16 @@
 
 #include "btree_data.h"
 
 #include "btree_data.h"
+#include "btree.h"
 
 
-BTreeData::BTreeData (uchar *node)
+BTreeData::BTreeData (uchar *node, int tree_type)
 {
        /* TODO : Aca deberia detectar el tipo de clave (necesito
         * info desde el arbol
         */
 {
        /* TODO : Aca deberia detectar el tipo de clave (necesito
         * info desde el arbol
         */
-       clave = new ClaveFija (node);
+       if (tree_type == BTree::KEY_FIXED)
+               clave = new ClaveFija (node);
+       else
+               clave = new ClaveVariable (node);
        node += clave->Size ();
 
        memcpy (&hijo, node, sizeof (uint));
        node += clave->Size ();
 
        memcpy (&hijo, node, sizeof (uint));
@@ -20,13 +24,15 @@ BTreeData::BTreeData (Clave *k, uint child)
 
 BTreeData::~BTreeData ()
 {
 
 BTreeData::~BTreeData ()
 {
+       if (clave)
+               delete clave;
 }
 
 uint BTreeData::Size () const
 {
        uint s = sizeof (uint);
        if (clave) s += clave->Size ();
 }
 
 uint BTreeData::Size () const
 {
        uint s = sizeof (uint);
        if (clave) s += clave->Size ();
-
+       else std::cout << "No tengo clave\n";
        return s;
 }
 
        return s;
 }
 
@@ -34,8 +40,10 @@ uchar* BTreeData::ToArray () const
 {
        uchar *out = new uchar[Size()];
        if (clave) {
 {
        uchar *out = new uchar[Size()];
        if (clave) {
-               memcpy (out, clave->ToArray (), clave->Size ());
+               uchar *n = clave->ToArray ();
+               memcpy (out, n, clave->Size ());
                memcpy (out+clave->Size (), &hijo, sizeof (uint));
                memcpy (out+clave->Size (), &hijo, sizeof (uint));
+               delete [] n;
        } else
                memcpy (out, &hijo, sizeof (uint));
        return out;
        } else
                memcpy (out, &hijo, sizeof (uint));
        return out;
@@ -43,9 +51,41 @@ uchar* BTreeData::ToArray () const
 
 bool BTreeData::operator < (const BTreeData &data) const
 {
 
 bool BTreeData::operator < (const BTreeData &data) const
 {
+       if (!data.clave) return false;
+
        return (*clave) < (*(data.clave));
 }
 
        return (*clave) < (*(data.clave));
 }
 
+bool BTreeData::operator == (const BTreeData &data) const
+{
+       if (!data.clave) return false;
+
+       return (*clave) == (*(data.clave));
+}
+
+bool BTreeData::Abrev (BTreeData *anterior)
+{
+       if (anterior == NULL) return false;
+
+       ClaveVariable *c = (ClaveVariable *)clave;
+       return c->Abrev (dynamic_cast<ClaveVariable *>(anterior->getClave ()));
+}
+
+bool BTreeData::DesAbrev (BTreeData *anterior)
+{
+       if (anterior == NULL) return false;
+
+       ClaveVariable *c = (ClaveVariable *)clave;
+       return c->DesAbrev (dynamic_cast<ClaveVariable *>(anterior->getClave ()));
+}
+
+BTreeLeafData::BTreeLeafData (uchar *node, int key_type)
+{
+       if (key_type == BTree::KEY_FIXED)
+               clave = new ClaveFija (node);
+       else
+               clave = new ClaveVariable (node);
+}
 
 BTreeLeafData::~BTreeLeafData ()
 {
 
 BTreeLeafData::~BTreeLeafData ()
 {
@@ -53,7 +93,6 @@ BTreeLeafData::~BTreeLeafData ()
 
 uint BTreeLeafData::Size () const
 {
 
 uint BTreeLeafData::Size () const
 {
-       std::cout << "BTreeLeafData::Size()" << std::endl;
        if (!clave) {
                std::cout << "BTreeLeafData::Size : No tengo clave!" << std::endl;
                return 0;
        if (!clave) {
                std::cout << "BTreeLeafData::Size : No tengo clave!" << std::endl;
                return 0;
@@ -77,7 +116,6 @@ BTreeChildData::~BTreeChildData ()
 
 uint BTreeChildData::Size () const
 {
 
 uint BTreeChildData::Size () const
 {
-       std::cout << "BTreeChildData::Size()" << std::endl;
        return sizeof (uint);
 }
 
        return sizeof (uint);
 }