]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blobdiff - viewer/main.cpp
Agrega ABB (Altas, Bajas y Búsqueda ;) de claves al viewer.
[z.facultad/75.52/treemulator.git] / viewer / main.cpp
index 7a10f1136021c55306fe9c4fffd487e2b23fd94a..fc8782b898d989e2f287e1a1b94e3f4aa9a48d88 100644 (file)
@@ -102,7 +102,11 @@ void nuevo_arbol ()
 
        NewTreeDialog d;
        if (d.run () == Gtk::RESPONSE_OK) {
-               uint tot = d.getAmount ();
+               uint altas = d.getAdds ();
+               uint bajas = d.getDels ();
+
+               double paltas = bajas / (double)altas;
+
                int type = d.getKeyType ();
                tree = Glib::RefPtr<ViewBTree>(new ViewBTree (real_canvas->root(), "test.idx", d.getBlockSize (), type));
                tree->signal_selected ().connect ( sigc::mem_fun (*real_frame, &ViewProperties::ShowItem) );
@@ -111,21 +115,43 @@ void nuevo_arbol ()
                        std::list<int> lst;
                        std::list<int>::iterator it;
                        Random::Init ();
-                       Random::Ints (lst, tot);
+                       Random::Ints (lst, altas);
 
                        it = lst.begin ();
+                       uint i = 0;
                        while (it != lst.end ()) {
                                ClaveFija c(*it);
 
-                               tree->AddKey (c);
-                               vdebug->AddKey (c);
+                               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<int>::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<std::string> lst;
                        std::list<std::string>::iterator it;
                        Random::Init ();
-                       Random::Strings (lst, tot);
+                       Random::Strings (lst, altas);
 
                        it = lst.begin ();
                        while (it != lst.end ()) {