]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blobdiff - src/btree_data.h
tagged 1.1
[z.facultad/75.52/treemulator.git] / src / btree_data.h
index cfe6ef8735524cc638f5425e5d2c95e9c367e33b..b7f457ac2a903731c1bc1665c9f8675e6a164acd 100644 (file)
@@ -6,28 +6,65 @@
 #include <stdlib.h>
 #include "clave.h"
 #include "clave_fija.h"
 #include <stdlib.h>
 #include "clave.h"
 #include "clave_fija.h"
+#include "clave_variable.h"
 
 
-/** Dato a guardar en los nodos */
+/** Dato a guardar en los nodos de un árbol B
+ *
+ *  Esta clase es la "magia" de todo. Es la encargada de transformar
+ *  datos RAW sacados de un bloque del archivo que representa un árbol B
+ *  y convertirlos en datos cómodos de manejar desde el programa.
+ *
+ *  Esta clase en la más genérica de todos y utilizada en los nodos internos
+ *  del árbol, que contiene claves y punteros a hijos.
+ *
+ *  También es quién abstrae el uso de distintos tipo de claves al árbol.
+ */
 class BTreeData {
        public:
                BTreeData () {}
 class BTreeData {
        public:
                BTreeData () {}
-               BTreeData (uchar *node);
+               /** Crea una instancia a partir de un bloque RAW
+                *
+                *  \param node Bloque RAW desde donde leer.
+                *  \param tree_type Tipo de clave utilizada por el árbol.
+                */
+               BTreeData (uchar *node, int tree_type);
+               /** Crea una instancia.
+                *
+                *  \param k Clave a contener.
+                *  \param hijo Hijo derecho.
+                */
                BTreeData (Clave *k, uint child);
                BTreeData (Clave *k, uint child);
+               /** Destructor */
                virtual ~BTreeData ();
 
                virtual ~BTreeData ();
 
+               /** Retorna el tamaño en bytes que ocupa en RAW */
                virtual uint Size () const;
                virtual uint Size () const;
+               /** Retorna un array RAW de bytes con el contenido
+                *
+                *  El array retornado debe ser liberado por el programador.
+                */
                virtual uchar *ToArray () const;
 
                virtual uchar *ToArray () const;
 
-               Clave* getClave () { return clave; }
+               /** Retorna la clave manejada */
+               Clave* GetKey () { return clave; }
+               void SetKey (Clave *k) { clave = k; }
+               /** Retorna el hijo apuntado */
+               uint GetChild () { return hijo; }
+               /** Setea el hijo apuntado */
+               void SetChild (uint c) { hijo = c; }
+
+               bool Abrev (BTreeData *anterior);
+               bool DesAbrev (BTreeData *anterior);
 
                bool operator < (const BTreeData &data) const;
 
                bool operator < (const BTreeData &data) const;
+               bool operator == (const BTreeData &data) const;
                virtual operator std::string () const {
                        std::string out = (*clave);
                        std::stringstream ss;
                virtual operator std::string () const {
                        std::string out = (*clave);
                        std::stringstream ss;
-                       ss << out << " ";
-                       ss << hijo;
-                       ss >> out;
-                       return out;
+                       ss << "(";
+                       ss << out;
+                       ss << ")" << "[" << hijo << "]";
+                       return ss.str ();
                }
        protected:
                Clave *clave;
                }
        protected:
                Clave *clave;
@@ -37,8 +74,8 @@ class BTreeData {
 /** Dato a guardar en las hojas */
 class BTreeLeafData:public BTreeData {
        public:
 /** Dato a guardar en las hojas */
 class BTreeLeafData:public BTreeData {
        public:
-               BTreeLeafData (Clave *k) { clave = k; }
-               BTreeLeafData (uchar *node) { clave = new ClaveFija (node); }
+               BTreeLeafData (Clave *k) { clave = k; hijo = 0; }
+               BTreeLeafData (uchar *node, int key_type);
                virtual ~BTreeLeafData ();
 
                virtual uint Size () const;
                virtual ~BTreeLeafData ();
 
                virtual uint Size () const;
@@ -53,16 +90,17 @@ class BTreeLeafData:public BTreeData {
 
 class BTreeChildData:public BTreeData {
        public:
 
 class BTreeChildData:public BTreeData {
        public:
-               BTreeChildData (uint child):BTreeData () { hijo = child; }
+               BTreeChildData (uint child):BTreeData () { hijo = child; clave = NULL; }
                BTreeChildData (uchar *node);
                virtual ~BTreeChildData ();
 
                virtual uint Size () const;
                virtual uchar *ToArray () const;
                BTreeChildData (uchar *node);
                virtual ~BTreeChildData ();
 
                virtual uint Size () const;
                virtual uchar *ToArray () const;
+               bool operator < (const BTreeData &data) const;
                virtual operator std::string () const {
                        std::string out;
                        std::stringstream ss;
                virtual operator std::string () const {
                        std::string out;
                        std::stringstream ss;
-                       ss << hijo;
+                       ss << "|" << hijo << "|";
                        ss >> out;
                        return out;
                }
                        ss >> out;
                        return out;
                }