From: Ricardo Markiewicz Date: Tue, 13 Sep 2005 16:52:48 +0000 (+0000) Subject: Agrego BTreeData. X-Git-Tag: 1_0-pre1~143 X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/commitdiff_plain/78d8bc6c001cb877d8c7daf3868835815a97ce21?ds=sidebyside Agrego BTreeData. Es el mismo concepto que el de las claves, solo que esto es lo que realmente se guarda en los bloques. Hay 2 tipos, uno para las hojas y otro para los nodos internos. Ambos usan una "Clave" de tipo generico y un uint para indicar el hijo derecho. --- diff --git a/src/Makefile b/src/Makefile index b0ac017..0db8bd1 100644 --- a/src/Makefile +++ b/src/Makefile @@ -3,8 +3,8 @@ CXXFLAGS=-Wall -g all: $(TARGET) -$(TARGET): main.o btree.o clave_fija.o - g++ -o $(TARGET) main.o btree.o clave_fija.o +$(TARGET): main.o btree.o clave_fija.o btree_data.o + g++ -o $(TARGET) main.o btree.o clave_fija.o btree_data.o clean: rm -rf *.o $(TARGET) diff --git a/src/btree.h b/src/btree.h index 7d279f5..b001bef 100644 --- a/src/btree.h +++ b/src/btree.h @@ -50,6 +50,7 @@ #include "common.h" #include "clave.h" #include "clave_fija.h" +#include "btree_data.h" /* alias para codear menos :) */ diff --git a/src/btree_data.cpp b/src/btree_data.cpp new file mode 100644 index 0000000..5e351ce --- /dev/null +++ b/src/btree_data.cpp @@ -0,0 +1,47 @@ + +#include "btree_data.h" + +BTreeData::BTreeData (uchar *node) +{ + /* TODO : Aca deberia detectar el tipo de clave (necesito + * info desde el arbol + */ + clave = new ClaveFija (node); + node += clave->Size (); + + memcpy (&hijo_izquierdo, node, sizeof (uint)); +} + +BTreeData::~BTreeData () +{ +} + +uint BTreeData::Size () +{ + uint s = sizeof (uint); + if (clave) s += clave->Size (); + + return s; +} + +uchar* BTreeData::ToArray () +{ + uchar *out = new uchar[Size()]; + memcpy (out, clave->ToArray (), clave->Size ()); + memcpy (out+clave->Size (), &hijo_izquierdo, sizeof (uint)); + return out; +} + +BTreeLeafData::~BTreeLeafData () +{ +} + +uint BTreeLeafData::Size () +{ + return clave->Size (); +} + +uchar* BTreeLeafData::ToArray () +{ + return clave->ToArray (); +} diff --git a/src/btree_data.h b/src/btree_data.h new file mode 100644 index 0000000..5b6a9f6 --- /dev/null +++ b/src/btree_data.h @@ -0,0 +1,33 @@ + +#ifndef _B_TREE_DATA +#define _B_TREE_DATA + +#include +#include +#include "clave.h" +#include "clave_fija.h" + +/** Dato a guardar en los nodos */ +class BTreeData { + public: + BTreeData (uchar *node); + virtual ~BTreeData (); + + virtual uint Size (); + virtual uchar *ToArray (); + protected: + Clave *clave; + uint hijo_izquierdo; +}; + +/** Dato a guardar en las hojas */ +class BTreeLeafData:BTreeData { + public: + virtual ~BTreeLeafData (); + + virtual uint Size (); + virtual uchar *ToArray (); +}; + +#endif +