]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blob - src/main_var.cpp
Recuperacion de nodos eliminados.
[z.facultad/75.52/treemulator.git] / src / main_var.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         if (argc != 4) {
11                 std::cout << "Uso: " << argv[0] << " <block size> <cantidad de altas> <cantidad de bajas>\n";
12                 std::cout << "\tEl tamaño de bloque usado es 512*2^<block size>.\n";
13                 return 1;
14         }
15
16         int bloque = 128 << (atoi (argv[1]) + 2);
17         int altas = atoi (argv[2]);
18         int bajas = atoi (argv[3]);
19
20         KeyManager<std::string> km;
21         BTree tree ("test.idx", bloque, BTree::TYPE_IDENTIFICACION, BTree::KEY_VARIABLE);
22         
23         std::list<std::string> lst;
24         std::list<std::string>::iterator it;
25         Random::Init ();
26         Random::Strings (lst, altas);
27
28         double paltas = bajas / (double)(altas + bajas);
29
30         it = lst.begin ();
31         while (it != lst.end ()) {
32                 ClaveVariable c(*it, 0);
33
34                 double l = Random::Double (0.0f, 1.0f);
35                 std::cout << l << " >= " << paltas << std::endl;
36                 if (!km.Size() // si no tenemos claves agregadas, mejor que hagamos un alta
37                                 || l >= paltas) {
38                         std::string sss = c;
39                         std::cout << "Clave Agregada " << sss << std::endl;
40                         try {
41                                 tree.AddKey (c);
42                                 km.AddValue (*it);
43                         } catch (Exception *e) {
44                                 std::cout << e->Message () << std::endl;
45                         }
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                         ClaveVariable c(km.GetRandom (), 0);
51
52                         try {
53                                 tree.DelKey (c);
54                                 std::string sss = c;
55                                 std::cout << "Clave Borrada " << sss << std::endl;
56                         } catch (Exception *e) {
57                                 std::cout << e->Message () << std::endl;
58                         }
59                 }
60         }
61
62         km.PrintInfo ();
63
64         std::list <std::string> l = km.GetList ();
65         it = l.begin ();
66         int bien = 0;
67         int mal = 0;
68         while (it != l.end ()) {
69                 ClaveVariable c(*it, 0);
70                 BTreeFindResult *r;
71
72                 r = tree.FindKey (c);
73                 if (r != NULL) {
74                         std::cout << "** Clave " << (*it) << " encontrada.\n";
75                         bien++;
76                         delete r;
77                 } else {
78                         std::cout << "** Clave " << (*it) << " NO encontrada.\n";
79                         mal++;
80                 }
81                 it++;
82         }
83
84         std::cout << "\n\n === Resultados ===\n";
85         std::cout << "    Hist  : " << bien << "\n";
86         std::cout << "    Miss  : " << mal << "\n";
87         std::cout << "    Total : " << (bien+mal) << "\n";
88
89         return mal;
90 }
91