]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blob - src/btree_data.cpp
UNDO: Cambio constructor por metodo estatico.
[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         hijo = 0;       
87         if (key_type == BTree::KEY_FIXED)
88                 clave = new ClaveFija (node);
89         else
90                 clave = new ClaveVariable (node);
91 }
92
93 BTreeLeafData::~BTreeLeafData ()
94 {
95         if (clave) {
96                 delete clave; 
97                 clave = NULL;
98         }
99 }
100
101 uint BTreeLeafData::Size () const
102 {
103         if (!clave) {
104                 std::cout << "BTreeLeafData::Size : No tengo clave!" << std::endl;
105                 return 0;
106         }
107         return clave->Size ();
108 }
109
110 uchar* BTreeLeafData::ToArray () const
111 {
112         return clave->ToArray ();
113 }
114
115 BTreeChildData::BTreeChildData (uchar *node)
116 {
117         memcpy (&hijo, node, sizeof (uint));
118         clave = NULL;
119 }
120
121 BTreeChildData::~BTreeChildData ()
122 {
123 }
124
125 uint BTreeChildData::Size () const
126 {
127         return sizeof (uint);
128 }
129
130 uchar* BTreeChildData::ToArray () const
131 {
132         uchar *out = new uchar[Size()];
133         memcpy (out, &hijo, sizeof (uint));
134         return out;
135 }
136
137 bool BTreeChildData::operator < (const BTreeData &data) const
138 {
139         return false;
140 }