]> git.llucax.com Git - z.facultad/75.52/treemulator.git/commitdiff
Agrego ChildData
authorRicardo Markiewicz <rmarkie@fi.uba.ar>
Thu, 15 Sep 2005 03:40:52 +0000 (03:40 +0000)
committerRicardo Markiewicz <rmarkie@fi.uba.ar>
Thu, 15 Sep 2005 03:40:52 +0000 (03:40 +0000)
src/btree_data.cpp
src/btree_data.h

index dd6f709b770d9d57d15b86bbaf220a0c2aa22bd7..b95b86a2fd030f6fc1a5b1e27e327de0763fd510 100644 (file)
@@ -12,11 +12,17 @@ BTreeData::BTreeData (uchar *node)
        memcpy (&hijo, node, sizeof (uint));
 }
 
+BTreeData::BTreeData (Clave *k, uint child)
+{
+       clave = k;
+       hijo = child;
+}
+
 BTreeData::~BTreeData ()
 {
 }
 
-uint BTreeData::Size ()
+uint BTreeData::Size () const
 {
        uint s = sizeof (uint);
        if (clave) s += clave->Size ();
@@ -24,11 +30,14 @@ uint BTreeData::Size ()
        return s;
 }
 
-uchar* BTreeData::ToArray ()
+uchar* BTreeData::ToArray () const
 {
        uchar *out = new uchar[Size()];
-       memcpy (out, clave->ToArray (), clave->Size ());
-       memcpy (out+clave->Size (), &hijo, sizeof (uint));
+       if (clave) {
+               memcpy (out, clave->ToArray (), clave->Size ());
+               memcpy (out+clave->Size (), &hijo, sizeof (uint));
+       } else
+               memcpy (out, &hijo, sizeof (uint));
        return out;
 }
 
@@ -42,13 +51,40 @@ BTreeLeafData::~BTreeLeafData ()
 {
 }
 
-uint BTreeLeafData::Size ()
+uint BTreeLeafData::Size () const
 {
+       std::cout << "BTreeLeafData::Size()" << std::endl;
+       if (!clave) {
+               std::cout << "BTreeLeafData::Size : No tengo clave!" << std::endl;
+               return 0;
+       }
        return clave->Size ();
 }
 
-uchar* BTreeLeafData::ToArray ()
+uchar* BTreeLeafData::ToArray () const
 {
        return clave->ToArray ();
 }
 
+BTreeChildData::BTreeChildData (uchar *node)
+{
+       memcpy (&hijo, node, sizeof (uint));
+}
+
+BTreeChildData::~BTreeChildData ()
+{
+}
+
+uint BTreeChildData::Size () const
+{
+       std::cout << "BTreeChildData::Size()" << std::endl;
+       return sizeof (uint);
+}
+
+uchar* BTreeChildData::ToArray () const
+{
+       uchar *out = new uchar[Size()];
+       memcpy (out, &hijo, sizeof (uint));
+       return out;
+}
+
index 44a3a775884ca79770308185843d5cb5f3e5275f..cfe6ef8735524cc638f5425e5d2c95e9c367e33b 100644 (file)
 /** Dato a guardar en los nodos */
 class BTreeData {
        public:
-               BTreeData () { clave = NULL; }
+               BTreeData () {}
                BTreeData (uchar *node);
+               BTreeData (Clave *k, uint child);
                virtual ~BTreeData ();
 
-               virtual uint Size ();
-               virtual uchar *ToArray ();
+               virtual uint Size () const;
+               virtual uchar *ToArray () const;
 
                Clave* getClave () { return clave; }
 
                bool operator < (const BTreeData &data) const;
                virtual operator std::string () const {
-                       if (clave) {
-                               return (*clave);
-                       }
-                       return "NoKey";
+                       std::string out = (*clave);
+                       std::stringstream ss;
+                       ss << out << " ";
+                       ss << hijo;
+                       ss >> out;
+                       return out;
                }
        protected:
                Clave *clave;
@@ -34,12 +37,35 @@ class BTreeData {
 /** Dato a guardar en las hojas */
 class BTreeLeafData:public BTreeData {
        public:
-               BTreeLeafData (Clave *k):BTreeData () { clave = k; }
+               BTreeLeafData (Clave *k) { clave = k; }
                BTreeLeafData (uchar *node) { clave = new ClaveFija (node); }
                virtual ~BTreeLeafData ();
 
-               virtual uint Size ();
-               virtual uchar *ToArray ();
+               virtual uint Size () const;
+               virtual uchar *ToArray () const;
+               virtual operator std::string () const {
+                       if (clave) {
+                               return (*clave);
+                       }
+                       return "NoKey";
+               }
+};
+
+class BTreeChildData:public BTreeData {
+       public:
+               BTreeChildData (uint child):BTreeData () { hijo = child; }
+               BTreeChildData (uchar *node);
+               virtual ~BTreeChildData ();
+
+               virtual uint Size () const;
+               virtual uchar *ToArray () const;
+               virtual operator std::string () const {
+                       std::string out;
+                       std::stringstream ss;
+                       ss << hijo;
+                       ss >> out;
+                       return out;
+               }
 };
 
 #endif