]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blob - src/main.cpp
Exceptions
[z.facultad/75.52/treemulator.git] / src / main.cpp
1
2
3 #include "btree.h"
4 #include "clave_fija.h"
5 #include "random.h"
6 #include "keymanager.h"
7
8 int main  (int argc, char *argv[])
9 {
10         int bloque, altas, bajas;
11
12         if (argc != 4) {
13                 printf ("Uso : %s <block size> <cantidad de altas> <cantidad de bajas>\n", argv[0]);
14                 return 1;
15         }
16
17         bloque = atoi (argv[1]);
18         altas = atoi (argv[2]);
19         bajas = atoi (argv[3]);
20
21         KeyManager<int> km;
22         BTree tree ("test.idx", bloque);
23         
24         std::list<int> lst;
25         std::list<int>::iterator it;
26         Random::Init ();
27         Random::Ints (lst, altas);
28
29         double paltas = bajas / (double)(altas + bajas);
30
31         it = lst.begin ();
32         while (it != lst.end ()) {
33                 ClaveFija c(*it);
34
35                 double l = Random::Double (0.0f, 1.0f);
36                 std::cout << l << " >= " << paltas << std::endl;
37                 if (!km.Size() // si no tenemos claves agregadas, mejor que hagamos un alta
38                                 || l >= paltas) {
39                         tree.AddKey (c);
40                         try {
41                                 tree.AddKey (c);
42                         } catch (Exception *e) {
43                                 std::cout << e->Message () << std::endl;
44                         }
45                         km.AddValue (*it);
46                         it++;
47                 } else {
48                         /* Tengo que borrar una clave entre 0 e "i" de la lista
49                          * porque son las que ya agregue. */
50                         ClaveFija c(km.GetRandom ());
51
52                         tree.DelKey (c);
53                         std::string sss = c;
54                         std::cout << "Clave Borrada " << sss << std::endl;
55                 }
56         }
57
58         km.PrintInfo ();
59
60         std::list <int> l = km.GetList ();
61         it = l.begin ();
62         int bien = 0;
63         int mal = 0;
64         while (it != l.end ()) {
65                 ClaveFija c(*it);
66                 BTreeFindResult *r;
67
68                 r = tree.FindKey (c);
69                 if (r != NULL) {
70                         std::cout << "** Clave " << (*it) << " encontrada.\n";
71                         bien++;
72                         delete r;
73                 } else {
74                         std::cout << "** Clave " << (*it) << " NO encontrada.\n";
75                         mal++;
76                 }
77                 it++;
78         }
79
80         std::cout << "\n\n === Resultados ===\n";
81         std::cout << "    Hist  : " << bien << "\n";
82         std::cout << "    Miss  : " << mal << "\n";
83         std::cout << "    Total : " << (bien+mal) << "\n";
84
85         return 0;
86 }
87