*
* Para saber si hay que romper en dos un nodo, se debe ver si la clave
* a agregar entra en el espacio libre del nodo encontrado como "lugar
- * de inserción". Ahora, un problema a resolver es cuando se debe
- * juntar nodos, ya que el árbol B este es particular <b>(Preguntar a
- * Cerveto?)</b>.
+ * de inserción".
*
* \section page_model_op Operaciones Básicas
*
* al algoritmo de borrado en una hoja. De acá en más todo sigue como fue descripto
* en el borrado en una hoja.
*
+ * \subsubsection page_model_problema El problema de la Clave Mayor.
+ *
+ * Este es un problema que hemos encontrado en la actual implementación de árbol
+ * B con claves variables.
+ *
+ * Este puede ocurrir únicamente cuando sucede una junta de nodos. Lo que ocurre
+ * se ejemplifica a continuación. Supongamos por un momento que tenemos dos
+ * nodos a unir cuya suma de tamaños ocupados es N. Ahora supongamos que la clave
+ * del padre, que debe ser unida con los nodos es de tamaño M.
+ *
+ * Si por algun caso particular de las claves N+M es mayor al tamaño del bloque,
+ * la junta no podrá ser realizada.
+ *
+ * Hemos detectado este problema seguido en árboles con bloques de 128 o 256, y muy
+ * rara vez en nodos de 512 o superiores, por lo que no hemos tomado medida alguna
+ * más que documentar su existencia.
+ *
* \subsection page_model_find Búsqueda de una Clave.
*
* Esta operación se realiza haciendo una búsqueda en profundidad en el árbol.
NewTreeDialog::NewTreeDialog(): Gtk::Dialog ("Nuevo Arbol", true, true),
- fixed_key ("Clave Fija"), variable_key ("Clave Variable")
+ fixed_key ("Clave Fija"), variable_key ("Clave Variable"),
+ tree_ident ("Arbol de Indentificación"), tree_class ("Arbol de Clasificacion")
{
- table.attach (fixed_key, 0, 1, 0, 1);
- table.attach (variable_key, 1, 2, 0, 1);
+ table.attach (tree_ident, 0, 1, 0, 1);
+ table.attach (tree_class, 1, 2, 0, 1);
+
+ table.attach (fixed_key, 0, 1, 1, 2);
+ table.attach (variable_key, 1, 2, 1, 2);
label_block.set_label ("Tamaño de Bloque : ");
- table.attach (label_block, 0, 1, 1, 2, Gtk::FILL|Gtk::SHRINK, Gtk::SHRINK, 8, 8);
- table.attach (entry_block, 1, 2, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK, 8, 8);
+ table.attach (label_block, 0, 1, 2, 3, Gtk::FILL|Gtk::SHRINK, Gtk::SHRINK, 8, 8);
+ table.attach (entry_block, 1, 2, 2, 3, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK, 8, 8);
label_count.set_label ("Cantidad a insertar : ");
- table.attach (label_count, 0, 1, 2, 3, Gtk::FILL|Gtk::SHRINK, Gtk::SHRINK, 8, 8);
- table.attach (entry_count, 1, 2, 2, 3, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK, 8, 8);
+ table.attach (label_count, 0, 1, 3, 4, Gtk::FILL|Gtk::SHRINK, Gtk::SHRINK, 8, 8);
+ table.attach (entry_count, 1, 2, 3, 4, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK, 8, 8);
label_dels.set_label ("Cantidad a eliminar : ");
- table.attach (label_dels, 0, 1, 3, 4, Gtk::FILL|Gtk::SHRINK, Gtk::SHRINK, 8, 8);
- table.attach (entry_dels, 1, 2, 3, 4, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK, 8, 8);
+ table.attach (label_dels, 0, 1, 4, 5, Gtk::FILL|Gtk::SHRINK, Gtk::SHRINK, 8, 8);
+ table.attach (entry_dels, 1, 2, 4, 5, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK, 8, 8);
get_vbox ()->add (table);
Gtk::RadioButton::Group group = fixed_key.get_group();
fixed_key.set_group (group);
variable_key.set_group (group);
+
+ Gtk::RadioButton::Group group1 = tree_ident.get_group();
+ tree_ident.set_group (group);
+ tree_class.set_group (group);
show_all ();
}
return BTree::KEY_VARIABLE;
}
+int NewTreeDialog::getTreeType ()
+{
+ if (tree_ident.get_active ())
+ return BTree::TYPE_IDENTIFICACION;
+
+ return BTree::TYPE_CLASIFICACION;
+}
+