#include "clave_fija.h"
#include "clave_variable.h"
#include "btree_data.h"
+#include "exception.h"
/* alias para codear menos :) */
*/
class BTree {
public:
- BTree (const std::string &filename, unsigned int block_size, int k_t = KEY_FIXED, bool create_new_file = false);
+ BTree (const std::string &filename, unsigned int block_size, int t_t = TYPE_UNIQUE, int k_t = KEY_FIXED, bool create_new_file = false);
~BTree ();
/** Tipos de clave a usar */
KEY_VARIABLE /**< Utilización de clave de longitud variable */
};
+ enum {
+ TYPE_UNIQUE,
+ TYPE_SELECTIVE
+ };
+
/** Agrega una nueva clave al árbol. */
void AddKey (const Clave &k);
/** Elimina una clave del árbol. */
*/
BTreeFindResult *FindKey (const Clave &k);
- protected:
+ //protected:
/* Funciones de Alta */
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);
/* Funciones de Baja */
void DelKeyR (BTreeData *k, uint node, uint padre);
void DelKeyFromLeaf (Clave *k, uint node_num, uint padre);
- void DelKeyFromOther (const Clave &k, BTreeFindResult *r);
- void FindB (uint node_num, uint padre, uint &left, uint &right);
+ void DelKeyFromNode (Clave *k, uint node_num, uint padre, uint left, uint right);
+ void FindBrothers (uint node_num, uint padre, uint &left, uint &right);
+ Clave *ReplaceKeyInFather (uint node_num, uint padre, Clave *k);
Clave *GetKey (uint node_num, char maxmin);
+ void JoinNodes (uint node1, uint node2, uint padre, int);
/* Funciones de Búsqueda */
BTreeFindResult *FindKeyR (const Clave *k, uint node);
void WriteKeys (uchar *node, BTreeNodeHeader &node_header, std::list<BTreeData *> &keys);
void DeleteKeys (std::list<BTreeData *> &keys);
+ /* Abreviacion de Claves */
+ void AbrevKey (std::list<BTreeData *> &lst);
+ void DeAbrevKey (std::list<BTreeData *> &lst);
+
std::string filename;
BTreeFileHeader header;
int key_type;
+ int tree_type;
/** Apunta al archivo de datos, asi se abre solo 1 vez
*