BTreeNodeHeader node_header;
ReadNodoHeader (node, &node_header);
- node_keys = ReadKeys (node, node_header);
-
- if (node_header.free_space >= k->Size ()) {
+ BTreeLeafData data (k->Clone ());
+
+ if (node_header.free_space > data.Size ()) {
/* TODO : Insertar ordenado */
- /* Siempre se agrega en una hoja */
- node_keys.push_back (BTreeLeafData (k->Clone ()));
+ node_keys = ReadKeys (node, node_header);
+ node_keys.push_back (data);
WriteKeys (node, node_header, node_keys);
WriteNodoHeader (node, &node_header);
WriteBlock (node, node_num);
- delete [] node;
} else {
/* Split */
/* Lo que debe pasar :
* 3) kout = clave del medio y mandarla al padre
*/
std::cout << "SPLIT" << std::endl;
+ delete [] node;
}
return kout;
* arbol
*/
/* TODO : Detectar si estoy en una hoja */
- BTreeData data(node);
+ BTreeData data;
+ if (node_header.level == 0)
+ data = BTreeLeafData (node);
+ else
+ data = BTreeData (node);
node += data.Size ();
keys.push_back (data);
}
class BTreeLeafData:public BTreeData {
public:
BTreeLeafData (Clave *k):BTreeData () { clave = k; }
+ BTreeLeafData (uchar *node) { clave = new ClaveFija (node); }
virtual ~BTreeLeafData ();
virtual uint Size ();