]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blob - src/keymanager.h
Refactoring para unificar nomenclaturas.
[z.facultad/75.52/treemulator.git] / src / keymanager.h
1
2 #ifndef _KEY_MANAGER_H_
3 #define _KEY_MANAGER_H_
4
5 #include <list>
6 #include "random.h"
7
8 template <class T>
9 class KeyManager {
10         public:
11                 KeyManager ()
12                 {
13                         altas = 0;
14                         bajas = 0;
15                 }
16
17                 void AddValue (T k)
18                 {
19                         keys.push_back (k);
20                         altas ++;
21                 }
22
23                 T GetRandom ()
24                 {
25                         int l = 0;
26                         int n = (int)Random::Double (0, keys.size ());
27
28                         typename std::list< T >::iterator it = keys.begin ();
29                         while (l < n) {
30                                 l++;
31                                 it++;
32                         }
33
34                         T ret = (*it);
35
36                         keys.erase (it);
37
38                         bajas ++;
39                         return ret;
40                 }
41
42                 void PrintInfo ()
43                 {
44                         std::cout << "Cantidad de Altas : " << altas << std::endl;
45                         std::cout << "Cantidad de Bajas : " << bajas << std::endl;
46                 }
47
48                 std::list < T >& GetList () { return keys; }
49
50                 /** Devuelve la cantidad de valores almacenados */
51                 typename std::list < T >::size_type Size() const
52                 {
53                         return keys.size();
54                 }
55         private:
56                 std::list< T > keys;
57                 int altas;
58                 int bajas;
59 };
60
61 #endif
62