X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/blobdiff_plain/3b646c1573243463ab55e4e2903f050900322f76..555cf8e7b36faa768e40d09665781c468424a91c:/src/main.cpp?ds=sidebyside diff --git a/src/main.cpp b/src/main.cpp index 553ea8c..e4f0326 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,16 +7,15 @@ int main (int argc, char *argv[]) { - int bloque, altas, bajas; - if (argc != 4) { - printf ("Uso : %s \n", argv[0]); + std::cout << "Uso: " << argv[0] << " \n"; + std::cout << "\tEl tamaƱo de bloque usado es 512*2^.\n"; return 1; } - bloque = atoi (argv[1]); - altas = atoi (argv[2]); - bajas = atoi (argv[3]); + int bloque = 128 << (atoi (argv[1]) + 2); + int altas = atoi (argv[2]); + int bajas = atoi (argv[3]); KeyManager km; BTree tree ("test.idx", bloque); @@ -30,22 +29,31 @@ int main (int argc, char *argv[]) it = lst.begin (); while (it != lst.end ()) { - ClaveFija c(*it); + ClaveFija c(*it, 0); double l = Random::Double (0.0f, 1.0f); std::cout << l << " >= " << paltas << std::endl; - if (l >= paltas) { - tree.AddKey (c); - km.AddValue (*it); + if (!km.Size() // si no tenemos claves agregadas, mejor que hagamos un alta + || l >= paltas) { + try { + tree.AddKey (c); + km.AddValue (*it); + } catch (Exception *e) { + std::cout << e->Message () << std::endl; + } it++; } else { /* Tengo que borrar una clave entre 0 e "i" de la lista * porque son las que ya agregue. */ - ClaveFija c(km.GetRandom ()); + ClaveFija c(km.GetRandom (), 0); - tree.DelKey (c); - std::string sss = c; - std::cout << "Clave Borrada " << sss << std::endl; + try { + tree.DelKey (c); + std::string sss = c; + std::cout << "Clave Borrada " << sss << std::endl; + } catch (Exception *e) { + std::cout << e->Message () << std::endl; + } } } @@ -53,19 +61,29 @@ int main (int argc, char *argv[]) std::list l = km.GetList (); it = l.begin (); + int bien = 0; + int mal = 0; while (it != l.end ()) { - ClaveFija c(*it); + ClaveFija c(*it, 0); BTreeFindResult *r; r = tree.FindKey (c); if (r != NULL) { std::cout << "** Clave " << (*it) << " encontrada.\n"; + bien++; delete r; - } else + } else { std::cout << "** Clave " << (*it) << " NO encontrada.\n"; + mal++; + } it++; } - return 0; + std::cout << "\n\n === Resultados ===\n"; + std::cout << " Hist : " << bien << "\n"; + std::cout << " Miss : " << mal << "\n"; + std::cout << " Total : " << (bien+mal) << "\n"; + + return mal; }