]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blob - src/btree_data.cpp
bf92909969aedf7630105ac8c91fc9db61b52661
[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 }
30
31 uint BTreeData::Size () const
32 {
33         uint s = sizeof (uint);
34         if (clave) s += clave->Size ();
35         else std::cout << "No tengo clave\n";
36         return s;
37 }
38
39 uchar* BTreeData::ToArray () const
40 {
41         uchar *out = new uchar[Size()];
42         if (clave) {
43                 uchar *n = clave->ToArray ();
44                 memcpy (out, n, clave->Size ());
45                 memcpy (out+clave->Size (), &hijo, sizeof (uint));
46                 delete [] n;
47         } else
48                 memcpy (out, &hijo, sizeof (uint));
49         return out;
50 }
51
52 bool BTreeData::operator < (const BTreeData &data) const
53 {
54         if (!data.clave) return false;
55
56         return (*clave) < (*(data.clave));
57 }
58
59 bool BTreeData::operator == (const BTreeData &data) const
60 {
61         if (!data.clave) return false;
62
63         return (*clave) == (*(data.clave));
64 }
65
66 bool BTreeData::Abrev (BTreeData *anterior)
67 {
68         if (anterior == NULL) return false;
69
70         ClaveVariable *c = (ClaveVariable *)clave;
71         return c->Abrev (dynamic_cast<ClaveVariable *>(anterior->getClave ()));
72 }
73
74 bool BTreeData::DesAbrev (BTreeData *anterior)
75 {
76         if (anterior == NULL) return false;
77
78         ClaveVariable *c = (ClaveVariable *)clave;
79         return c->DesAbrev (dynamic_cast<ClaveVariable *>(anterior->getClave ()));
80 }
81
82 BTreeLeafData::BTreeLeafData (uchar *node, int key_type)
83 {
84         if (key_type == BTree::KEY_FIXED)
85                 clave = new ClaveFija (node);
86         else
87                 clave = new ClaveVariable (node);
88 }
89
90 BTreeLeafData::~BTreeLeafData ()
91 {
92 }
93
94 uint BTreeLeafData::Size () const
95 {
96         if (!clave) {
97                 std::cout << "BTreeLeafData::Size : No tengo clave!" << std::endl;
98                 return 0;
99         }
100         return clave->Size ();
101 }
102
103 uchar* BTreeLeafData::ToArray () const
104 {
105         return clave->ToArray ();
106 }
107
108 BTreeChildData::BTreeChildData (uchar *node)
109 {
110         memcpy (&hijo, node, sizeof (uint));
111 }
112
113 BTreeChildData::~BTreeChildData ()
114 {
115 }
116
117 uint BTreeChildData::Size () const
118 {
119         return sizeof (uint);
120 }
121
122 uchar* BTreeChildData::ToArray () const
123 {
124         uchar *out = new uchar[Size()];
125         memcpy (out, &hijo, sizeof (uint));
126         return out;
127 }
128