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* 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; }
56 bool Abrev (BTreeData *anterior);
57 bool DesAbrev (BTreeData *anterior);
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);
65 ss << ")" << "[" << hijo << "]";
74 /** Dato a guardar en las hojas */
75 class BTreeLeafData:public BTreeData {
77 BTreeLeafData (Clave *k) { clave = k; }
78 BTreeLeafData (uchar *node, int key_type);
79 virtual ~BTreeLeafData ();
81 virtual uint Size () const;
82 virtual uchar *ToArray () const;
83 virtual operator std::string () const {
91 class BTreeChildData:public BTreeData {
93 BTreeChildData (uint child):BTreeData () { hijo = child; clave = NULL; }
94 BTreeChildData (uchar *node);
95 virtual ~BTreeChildData ();
97 virtual uint Size () const;
98 virtual uchar *ToArray () const;
99 virtual operator std::string () const {
101 std::stringstream ss;
102 ss << "|" << hijo << "|";