]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blob - src/btree_data.cpp
Agrego emision de excepsiones en caso de error.
[z.facultad/75.52/treemulator.git] / src / btree_data.cpp
1
2 #include "btree_data.h"
3 #include "btree.h"
4
5 BTreeData::BTreeData (uchar *node, int tree_type)
6 {
7         /* TODO : Aca deberia detectar el tipo de clave (necesito
8          * info desde el arbol
9          */
10         if (tree_type == BTree::KEY_FIXED)
11                 clave = new ClaveFija (node);
12         else
13                 clave = new ClaveVariable (node);
14         node += clave->Size ();
15
16         memcpy (&hijo, node, sizeof (uint));
17 }
18
19 BTreeData::BTreeData (Clave *k, uint child)
20 {
21         clave = k;
22         hijo = child;
23 }
24
25 BTreeData::~BTreeData ()
26 {
27         if (clave) {
28                 delete clave;
29                 clave = NULL;
30         }
31 }
32
33 uint BTreeData::Size () const
34 {
35         uint s = sizeof (uint);
36         if (clave) s += clave->Size ();
37         else std::cout << "No tengo clave\n";
38         return s;
39 }
40
41 uchar* BTreeData::ToArray () const
42 {
43         uchar *out = new uchar[Size()];
44         if (clave) {
45                 uchar *n = clave->ToArray ();
46                 memcpy (out, n, clave->Size ());
47                 memcpy (out+clave->Size (), &hijo, sizeof (uint));
48                 delete [] n;
49         } else
50                 memcpy (out, &hijo, sizeof (uint));
51         return out;
52 }
53
54 bool BTreeData::operator < (const BTreeData &data) const
55 {
56         if (!data.clave) return false;
57
58         return (*clave) < (*(data.clave));
59 }
60
61 bool BTreeData::operator == (const BTreeData &data) const
62 {
63         if (!data.clave) return false;
64
65         return (*clave) == (*(data.clave));
66 }
67
68 bool BTreeData::Abrev (BTreeData *anterior)
69 {
70         if (anterior == NULL) return false;
71
72         ClaveVariable *c = (ClaveVariable *)clave;
73         return c->Abrev (dynamic_cast<ClaveVariable *>(anterior->GetKey ()));
74 }
75
76 bool BTreeData::DesAbrev (BTreeData *anterior)
77 {
78         if (anterior == NULL) return false;
79
80         ClaveVariable *c = (ClaveVariable *)clave;
81         return c->DesAbrev (dynamic_cast<ClaveVariable *>(anterior->GetKey ()));
82 }
83
84 BTreeLeafData::BTreeLeafData (uchar *node, int key_type)
85 {
86         if (key_type == BTree::KEY_FIXED)
87                 clave = new ClaveFija (node);
88         else
89                 clave = new ClaveVariable (node);
90 }
91
92 BTreeLeafData::~BTreeLeafData ()
93 {
94         if (clave) {
95                 delete clave; 
96                 clave = NULL;
97         }
98 }
99
100 uint BTreeLeafData::Size () const
101 {
102         if (!clave) {
103                 std::cout << "BTreeLeafData::Size : No tengo clave!" << std::endl;
104                 return 0;
105         }
106         return clave->Size ();
107 }
108
109 uchar* BTreeLeafData::ToArray () const
110 {
111         return clave->ToArray ();
112 }
113
114 BTreeChildData::BTreeChildData (uchar *node)
115 {
116         memcpy (&hijo, node, sizeof (uint));
117 }
118
119 BTreeChildData::~BTreeChildData ()
120 {
121 }
122
123 uint BTreeChildData::Size () const
124 {
125         return sizeof (uint);
126 }
127
128 uchar* BTreeChildData::ToArray () const
129 {
130         uchar *out = new uchar[Size()];
131         memcpy (out, &hijo, sizeof (uint));
132         return out;
133 }
134