]> git.llucax.com Git - z.facultad/75.52/treemulator.git/commitdiff
Agrego BTreeData.
authorRicardo Markiewicz <rmarkie@fi.uba.ar>
Tue, 13 Sep 2005 16:52:48 +0000 (16:52 +0000)
committerRicardo Markiewicz <rmarkie@fi.uba.ar>
Tue, 13 Sep 2005 16:52:48 +0000 (16:52 +0000)
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
src/btree.h
src/btree_data.cpp [new file with mode: 0644]
src/btree_data.h [new file with mode: 0644]

index b0ac01734a90480c7557c92e3bf79fa704374af1..0db8bd1f8c5d90a604832877627cc90b228a626f 100644 (file)
@@ -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)
index 7d279f5b589e3d4fedaa99a325a996a4bb41327d..b001befdda321972619f2c0ce9bb54e213300faa 100644 (file)
@@ -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 (file)
index 0000000..5e351ce
--- /dev/null
@@ -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 (file)
index 0000000..5b6a9f6
--- /dev/null
@@ -0,0 +1,33 @@
+
+#ifndef _B_TREE_DATA
+#define _B_TREE_DATA
+
+#include <iostream>
+#include <stdlib.h>
+#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
+