#include "common.h"
#include "clave.h"
#include "clave_fija.h"
+#include "clave_variable.h"
#include "btree_data.h"
/* alias para codear menos :) */
unsigned int item_count;
};
-/** Crea un nuevo arbol B
+/** Modelo del árbol B
*
* \param filename Nombre del archivo a crear
* \param block_size Tamaño de bloque a utilizar
+ * \param k_t Tipo de clave a utilizar
* \return Un nuevo arbol B creado o NULL en caso de error
*/
class BTree {
public:
- BTree (const std::string &filename, unsigned int block_size, bool create_new_file = false);
+ BTree (const std::string &filename, unsigned int block_size, int k_t = KEY_FIXED, bool create_new_file = false);
~BTree ();
+ /** Tipos de clave a usar */
+ enum {
+ KEY_FIXED,
+ KEY_VARIABLE
+ };
+
+ /** Agrega una nueva clave al árbol. */
void AddKey (const Clave &k);
+ /** Elimina una clave del árbol. */
void DelKey (const Clave &k);
+ /** Busca si existe una clave en el árbol
+ *
+ * \TODO : Deberia retornar algun tipo de dato
+ */
+ bool FindKey (const Clave &k);
- private:
- Clave* AddKeyR (const Clave *k, uint node_num);
+ protected:
+ Clave* AddKeyR (const Clave *k, uint node_num, uint &left_child, uint &right_child);
+ Clave* AddKeyOtherR (const Clave *k, uint node_num, uint &left_child, uint &right_child);
+ Clave* AddKeyLeafR (const Clave *k, uint node_num, uint &left_child, uint &right_child);
+ bool FindKeyR (const Clave *k, uint node);
void WriteFileHeader ();
void WriteBlock (uchar *block, uint num);
uchar *ReadBlock (uint num);
+ uchar *NewBlock (uint &num);
void ReadNodoHeader (uchar *node, BTreeNodeHeader *header);
void WriteNodoHeader (uchar *node, BTreeNodeHeader *header);
- std::list<BTreeData> ReadKeys (uchar *node, BTreeNodeHeader &node_header);
- void WriteKeys (uchar *node, BTreeNodeHeader &node_header, std::list<BTreeData> &keys);
+ std::list<BTreeData *> ReadKeys (uchar *node, BTreeNodeHeader &node_header);
+ void WriteKeys (uchar *node, BTreeNodeHeader &node_header, std::list<BTreeData *> &keys);
+
+ void DeleteKeys (std::list<BTreeData *> &keys);
std::string filename;
BTreeFileHeader header;
+ int key_type;
/** Apunta al archivo de datos, asi se abre solo 1 vez
*