memcpy (&hijo, node, sizeof (uint));
}
+BTreeData::BTreeData (Clave *k, uint child)
+{
+ clave = k;
+ hijo = child;
+}
+
BTreeData::~BTreeData ()
{
}
-uint BTreeData::Size ()
+uint BTreeData::Size () const
{
uint s = sizeof (uint);
if (clave) s += clave->Size ();
return s;
}
-uchar* BTreeData::ToArray ()
+uchar* BTreeData::ToArray () const
{
uchar *out = new uchar[Size()];
- memcpy (out, clave->ToArray (), clave->Size ());
- memcpy (out+clave->Size (), &hijo, sizeof (uint));
+ if (clave) {
+ memcpy (out, clave->ToArray (), clave->Size ());
+ memcpy (out+clave->Size (), &hijo, sizeof (uint));
+ } else
+ memcpy (out, &hijo, sizeof (uint));
return out;
}
{
}
-uint BTreeLeafData::Size ()
+uint BTreeLeafData::Size () const
{
+ std::cout << "BTreeLeafData::Size()" << std::endl;
+ if (!clave) {
+ std::cout << "BTreeLeafData::Size : No tengo clave!" << std::endl;
+ return 0;
+ }
return clave->Size ();
}
-uchar* BTreeLeafData::ToArray ()
+uchar* BTreeLeafData::ToArray () const
{
return clave->ToArray ();
}
+BTreeChildData::BTreeChildData (uchar *node)
+{
+ memcpy (&hijo, node, sizeof (uint));
+}
+
+BTreeChildData::~BTreeChildData ()
+{
+}
+
+uint BTreeChildData::Size () const
+{
+ std::cout << "BTreeChildData::Size()" << std::endl;
+ return sizeof (uint);
+}
+
+uchar* BTreeChildData::ToArray () const
+{
+ uchar *out = new uchar[Size()];
+ memcpy (out, &hijo, sizeof (uint));
+ return out;
+}
+
/** Dato a guardar en los nodos */
class BTreeData {
public:
- BTreeData () { clave = NULL; }
+ BTreeData () {}
BTreeData (uchar *node);
+ BTreeData (Clave *k, uint child);
virtual ~BTreeData ();
- virtual uint Size ();
- virtual uchar *ToArray ();
+ virtual uint Size () const;
+ virtual uchar *ToArray () const;
Clave* getClave () { return clave; }
bool operator < (const BTreeData &data) const;
virtual operator std::string () const {
- if (clave) {
- return (*clave);
- }
- return "NoKey";
+ std::string out = (*clave);
+ std::stringstream ss;
+ ss << out << " ";
+ ss << hijo;
+ ss >> out;
+ return out;
}
protected:
Clave *clave;
/** Dato a guardar en las hojas */
class BTreeLeafData:public BTreeData {
public:
- BTreeLeafData (Clave *k):BTreeData () { clave = k; }
+ BTreeLeafData (Clave *k) { clave = k; }
BTreeLeafData (uchar *node) { clave = new ClaveFija (node); }
virtual ~BTreeLeafData ();
- virtual uint Size ();
- virtual uchar *ToArray ();
+ virtual uint Size () const;
+ virtual uchar *ToArray () const;
+ virtual operator std::string () const {
+ if (clave) {
+ return (*clave);
+ }
+ return "NoKey";
+ }
+};
+
+class BTreeChildData:public BTreeData {
+ public:
+ BTreeChildData (uint child):BTreeData () { hijo = child; }
+ BTreeChildData (uchar *node);
+ virtual ~BTreeChildData ();
+
+ virtual uint Size () const;
+ virtual uchar *ToArray () const;
+ virtual operator std::string () const {
+ std::string out;
+ std::stringstream ss;
+ ss << hijo;
+ ss >> out;
+ return out;
+ }
};
#endif