]> git.llucax.com Git - z.facultad/75.52/treemulator.git/commitdiff
Protecciones contra cuelgues.
authorRicardo Markiewicz <rmarkie@fi.uba.ar>
Fri, 23 Sep 2005 20:13:52 +0000 (20:13 +0000)
committerRicardo Markiewicz <rmarkie@fi.uba.ar>
Fri, 23 Sep 2005 20:13:52 +0000 (20:13 +0000)
viewer/view_btree.cpp
viewer/view_btree.h

index f62e931a0f3d098f8fe880e1ce84ac6ccdd2d6b6..5c54a874f174304d7f39c755881b7d54b6be8ff8 100644 (file)
@@ -23,6 +23,12 @@ ViewBTree::ViewBTree (Canvas::Group *parent, std::string filename):Canvas::Group
 
 void ViewBTree::AddNode (uint num)
 {
 
 void ViewBTree::AddNode (uint num)
 {
+       if (node_placed[num]) {
+               std::cout << "WARNING : Tratando de agregar de nuevo el nodo " << num << std::endl;
+               return;
+       }
+
+       node_placed[num] = true;
        /* Muestro la raiz */
        double y = 0;
        uchar *node = ReadBlock (num);
        /* Muestro la raiz */
        double y = 0;
        uchar *node = ReadBlock (num);
@@ -46,6 +52,11 @@ void ViewBTree::AddNode (uint num)
        std::list<uint> childs = vnode->getChilds ();
        std::list<uint>::iterator hit = childs.begin ();
        while (hit != childs.end ()) {
        std::list<uint> childs = vnode->getChilds ();
        std::list<uint>::iterator hit = childs.begin ();
        while (hit != childs.end ()) {
+               if ((*hit) == 0) {
+                       std::cout << "WARNING : Referencia a 0 encontrada!!" << std::endl;
+                       hit = childs.end ();
+                       continue;
+               }
                AddNode (*hit);
                hit++;
        }
                AddNode (*hit);
                hit++;
        }
index bd4f22cdcb53505aa2afc8d32608c900b13ed3b8..e3a5c688268e52dab36b12e4cb7059415c9b3ac9 100644 (file)
@@ -21,6 +21,9 @@ class ViewBTree : public Canvas::Group, public BTree {
                int max_level; /* Lo saco de la raiz */
                /* Posicion X por nivel */
                std::map<uint,double> pos_x;
                int max_level; /* Lo saco de la raiz */
                /* Posicion X por nivel */
                std::map<uint,double> pos_x;
+               /* Control para no poner 2 veces un nodo */
+               /* Un nodo que quiera ser puesto 2 veces es un bug :) */
+               std::map<uint,bool> node_placed;
 
                void AddNode (uint num);
 
 
                void AddNode (uint num);