From 78d8bc6c001cb877d8c7daf3868835815a97ce21 Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Tue, 13 Sep 2005 16:52:48 +0000 Subject: [PATCH] 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. --- src/Makefile | 4 ++-- src/btree.h | 1 + src/btree_data.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++++++ src/btree_data.h | 33 ++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 src/btree_data.cpp create mode 100644 src/btree_data.h 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 + -- 2.43.0