8 #include "clave_fija.h"
9 #include "clave_variable.h"
11 /** Dato a guardar en los nodos de un árbol B
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.
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.
20 * También es quién abstrae el uso de distintos tipo de claves al árbol.
25 /** Crea una instancia a partir de un bloque RAW
27 * \param node Bloque RAW desde donde leer.
28 * \param tree_type Tipo de clave utilizada por el árbol.
30 BTreeData (uchar *node, int tree_type);
31 /** Crea una instancia.
33 * \param k Clave a contener.
34 * \param hijo Hijo derecho.
36 BTreeData (Clave *k, uint child);
38 virtual ~BTreeData ();
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
44 * El array retornado debe ser liberado por el programador.
46 virtual uchar *ToArray () const;
48 /** Retorna la clave manejada */
49 Clave* getClave () { return clave; }
50 /** Retorna el hijo apuntado */
51 uint getChild () { return hijo; }
52 /** Setea el hijo apuntado */
53 void setChild (uint c) { hijo = c; }
55 bool operator < (const BTreeData &data) const;
56 bool operator == (const BTreeData &data) const;
57 virtual operator std::string () const {
58 std::string out = (*clave);
61 ss << ")" << "[" << hijo << "]";
70 /** Dato a guardar en las hojas */
71 class BTreeLeafData:public BTreeData {
73 BTreeLeafData (Clave *k) { clave = k; }
74 BTreeLeafData (uchar *node, int key_type);
75 virtual ~BTreeLeafData ();
77 virtual uint Size () const;
78 virtual uchar *ToArray () const;
79 virtual operator std::string () const {
87 class BTreeChildData:public BTreeData {
89 BTreeChildData (uint child):BTreeData () { hijo = child; clave = NULL; }
90 BTreeChildData (uchar *node);
91 virtual ~BTreeChildData ();
93 virtual uint Size () const;
94 virtual uchar *ToArray () const;
95 virtual operator std::string () const {
98 ss << "|" << hijo << "|";