]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blob - src/btree_data.h
Recuperacion de nodos eliminados.
[z.facultad/75.52/treemulator.git] / src / btree_data.h
1
2 #ifndef _B_TREE_DATA
3 #define _B_TREE_DATA
4
5 #include <iostream>
6 #include <stdlib.h>
7 #include "clave.h"
8 #include "clave_fija.h"
9 #include "clave_variable.h"
10
11 /** Dato a guardar en los nodos de un árbol B
12  *
13  *  Esta clase es la "magia" de todo. Es la encargada de transformar
14  *  datos RAW sacados de un bloque del archivo que representa un árbol B
15  *  y convertirlos en datos cómodos de manejar desde el programa.
16  *
17  *  Esta clase en la más genérica de todos y utilizada en los nodos internos
18  *  del árbol, que contiene claves y punteros a hijos.
19  *
20  *  También es quién abstrae el uso de distintos tipo de claves al árbol.
21  */
22 class BTreeData {
23         public:
24                 BTreeData () {}
25                 /** Crea una instancia a partir de un bloque RAW
26                  *
27                  *  \param node Bloque RAW desde donde leer.
28                  *  \param tree_type Tipo de clave utilizada por el árbol.
29                  */
30                 BTreeData (uchar *node, int tree_type);
31                 /** Crea una instancia.
32                  *
33                  *  \param k Clave a contener.
34                  *  \param hijo Hijo derecho.
35                  */
36                 BTreeData (Clave *k, uint child);
37                 /** Destructor */
38                 virtual ~BTreeData ();
39
40                 /** Retorna el tamaño en bytes que ocupa en RAW */
41                 virtual uint Size () const;
42                 /** Retorna un array RAW de bytes con el contenido
43                  *
44                  *  El array retornado debe ser liberado por el programador.
45                  */
46                 virtual uchar *ToArray () const;
47
48                 /** Retorna la clave manejada */
49                 Clave* GetKey () { return clave; }
50                 void SetKey (Clave *k) { clave = k; }
51                 /** Retorna el hijo apuntado */
52                 uint GetChild () { return hijo; }
53                 /** Setea el hijo apuntado */
54                 void SetChild (uint c) { hijo = c; }
55
56                 bool Abrev (BTreeData *anterior);
57                 bool DesAbrev (BTreeData *anterior);
58
59                 bool operator < (const BTreeData &data) const;
60                 bool operator == (const BTreeData &data) const;
61                 virtual operator std::string () const {
62                         std::string out = (*clave);
63                         std::stringstream ss;
64                         ss << "(";
65                         ss << out;
66                         ss << ")" << "[" << hijo << "]";
67                         return ss.str ();
68                 }
69         protected:
70                 Clave *clave;
71                 uint hijo;
72 };
73
74 /** Dato a guardar en las hojas */
75 class BTreeLeafData:public BTreeData {
76         public:
77                 BTreeLeafData (Clave *k) { clave = k; hijo = 0; }
78                 BTreeLeafData (uchar *node, int key_type);
79                 virtual ~BTreeLeafData ();
80
81                 virtual uint Size () const;
82                 virtual uchar *ToArray () const;
83                 virtual operator std::string () const {
84                         if (clave) {
85                                 return (*clave);
86                         }
87                         return "NoKey";
88                 }
89 };
90
91 class BTreeChildData:public BTreeData {
92         public:
93                 BTreeChildData (uint child):BTreeData () { hijo = child; clave = NULL; }
94                 BTreeChildData (uchar *node);
95                 virtual ~BTreeChildData ();
96
97                 virtual uint Size () const;
98                 virtual uchar *ToArray () const;
99                 bool operator < (const BTreeData &data) const;
100                 virtual operator std::string () const {
101                         std::string out;
102                         std::stringstream ss;
103                         ss << "|" << hijo << "|";
104                         ss >> out;
105                         return out;
106                 }
107 };
108
109 #endif
110