]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blobdiff - src/btree.h
Agrego test de borrado de una hoja.
[z.facultad/75.52/treemulator.git] / src / btree.h
index 14ef6047a4ac5676b9631ffe65a503619f820087..df427edf26bfd354757f681a3c1c7b82575c2d2f 100644 (file)
 #include "common.h"
 #include "clave.h"
 #include "clave_fija.h"
 #include "common.h"
 #include "clave.h"
 #include "clave_fija.h"
+#include "clave_variable.h"
 #include "btree_data.h"
 
 /* alias para codear menos :) */
 
 #include "btree_data.h"
 
 /* alias para codear menos :) */
 
-/** Encabezado del archivo BTree */
+/** Encabezado del archivo BTree 
+ *
+ *  Esta estructura es para comodidad de manejo, aunque en disco
+ *  ocupe block_size de tamaño.
+ */
 struct BTreeFileHeader {
        uint block_size;
 };
 struct BTreeFileHeader {
        uint block_size;
 };
@@ -78,22 +83,39 @@ struct BTreeNodeHeader {
        unsigned int item_count;
 };
 
        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 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:
  *  \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 ();
 
                ~BTree ();
 
+               /** Tipos de clave a usar */
+               enum {
+                       KEY_FIXED,
+                       KEY_VARIABLE
+               };
+
+               /** Agrega una nueva clave al árbol. */
                void AddKey (const Clave &k);
                void AddKey (const Clave &k);
+               /** Elimina una clave del árbol. */
                void DelKey (const Clave &k);
                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:
+       protected:
                Clave* AddKeyR (const Clave *k, uint node_num, uint &left_child, uint &right_child);
                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 WriteFileHeader ();
 
@@ -104,11 +126,14 @@ class BTree {
                void ReadNodoHeader (uchar *node, BTreeNodeHeader *header);
                void WriteNodoHeader (uchar *node, BTreeNodeHeader *header);
 
                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;
 
                std::string filename;
                BTreeFileHeader header;
+               int key_type;
 
                /** Apunta al archivo de datos, asi se abre solo 1 vez
                 *
 
                /** Apunta al archivo de datos, asi se abre solo 1 vez
                 *
@@ -118,6 +143,7 @@ class BTree {
 
 
                /* DEBUG */
 
 
                /* DEBUG */
+       public:
                void PrintNode (uint num);
 };
 
                void PrintNode (uint num);
 };