X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/blobdiff_plain/31a4e5589b182e234856fc9ec9deb32e23ae3bdd..eabe0084451a515b80a7fd462c71b4bb2f8dd7bd:/viewer/main.cpp diff --git a/viewer/main.cpp b/viewer/main.cpp index 0c5d01a..fc8782b 100644 --- a/viewer/main.cpp +++ b/viewer/main.cpp @@ -4,6 +4,7 @@ #include #include +#include "random.h" #include "view_btree.h" #include "view_properties.h" #include "new_tree_dialog.h" @@ -33,9 +34,10 @@ void zoom_out (); void zoom_in (); void zoom_normal (); -ViewBTree *tree; +Glib::RefPtr tree; ViewDebug *vdebug; Gnome::Canvas::Canvas *real_canvas; +ViewProperties *real_frame; int main(int argc, char *argv[]) { @@ -47,18 +49,16 @@ int main(int argc, char *argv[]) Gtk::HBox hbox; Gtk::VBox vbox; - ViewProperties frame; Gtk::ScrolledWindow area; Gnome::Canvas::Canvas canvas; + ViewProperties frame; + ViewDebug debug; - ViewBTree canvas_grp (canvas.root (), "test.idx"); - ViewDebug debug (&canvas_grp); - - tree = &canvas_grp; real_canvas = &canvas; + real_frame = &frame; vdebug = &debug; - canvas.set_scroll_region (0, 0, 5000, 5000); + canvas.set_scroll_region (0, 0, 100, 100); area.add (canvas); hbox.pack_start (frame, false, false, 10); @@ -91,7 +91,6 @@ int main(int argc, char *argv[]) window.show_all (); /* Conecto el Canvas con el Frame */ - canvas_grp.signal_selected ().connect ( sigc::mem_fun (frame, &ViewProperties::ShowItem) ); Gtk::Main::run(window); return 0; @@ -99,16 +98,73 @@ int main(int argc, char *argv[]) void nuevo_arbol () { + real_canvas->set_scroll_region (0, 0, 5000, 5000); + NewTreeDialog d; if (d.run () == Gtk::RESPONSE_OK) { - uint tot = d.getAmount (); - for (uint i=0; i <= tot; i++) { - ClaveFija c(i); - - tree->AddKey (c); - vdebug->AddKey (c); + uint altas = d.getAdds (); + uint bajas = d.getDels (); + + double paltas = bajas / (double)altas; + + int type = d.getKeyType (); + tree = Glib::RefPtr(new ViewBTree (real_canvas->root(), "test.idx", d.getBlockSize (), type)); + tree->signal_selected ().connect ( sigc::mem_fun (*real_frame, &ViewProperties::ShowItem) ); + vdebug->SetTree (tree); + if (type == BTree::KEY_FIXED) { + std::list lst; + std::list::iterator it; + Random::Init (); + Random::Ints (lst, altas); + + it = lst.begin (); + uint i = 0; + while (it != lst.end ()) { + ClaveFija c(*it); + + double l = Random::Double (0.0f, 1.0f); + std::cout << l << " >= " << paltas << std::endl; + if (l >= paltas) { + tree->AddKey (c); + i++; + vdebug->AddKey (c); + } else { + /* Tengo que borrar una clave entre 0 e "i" de la lista + * porque son las que ya agregue. */ + int aborrar = (int)Random::Double (0, i); + std::list::iterator otro = lst.begin (); + int j = 0; + while (j < aborrar) { + otro++; + j++; + } + ClaveFija c(*otro); + + tree->DelKey (c); + std::string sss = c; + std::cout << "Clave Borrada " << sss << std::endl; + } + + it++; + } + } else { + std::list lst; + std::list::iterator it; + Random::Init (); + Random::Strings (lst, altas); + + it = lst.begin (); + while (it != lst.end ()) { + ClaveVariable c(*it); + + tree->AddKey (c); + vdebug->AddKey (c); + it++; + } } tree->AddNode (0); + double x1, x2, y1, y2; + tree->get_bounds (x1, y1, x2, y2); } }