]> git.llucax.com Git - z.facultad/75.29/susanita.git/blob - src/susanita.cpp
Hacer que todos_h_comprometidos() sea O(1).
[z.facultad/75.29/susanita.git] / src / susanita.cpp
1 #include "susanita.h"
2 #include <cassert>
3 #include <iostream>
4 #include <algorithm>
5
6 Susanita::
7 Susanita(size_type cap):
8         nombres(cap)
9 {
10         capacidad = cap;
11 }
12
13 // Uso interno
14 namespace
15 {
16         /// Mata a una persona
17         void matar(Persona* p)
18         {
19                 delete p;
20         }
21 }
22
23 Susanita::
24 ~Susanita()
25 {
26         std::for_each(hombres.begin(), hombres.end(), matar);
27         std::for_each(mujeres.begin(), mujeres.end(), matar);
28 }
29
30 void
31 Susanita::
32 add_persona(Persona* pp)
33 {
34         assert(nombres[pp->nombre] == 0); // Muere si hay nombres repetidos
35
36         nombres[pp->nombre] = pp;
37         switch (pp->sexo)
38         {
39                 case Persona::M:
40                         hombres.push_back(pp);
41                         break;
42                 case Persona::F:
43                         mujeres.push_back(pp);
44                         break;
45                 default:
46                         assert("Una persona no es ni mujer ni hombre!");
47         }
48 }
49
50 Persona*
51 Susanita::
52 get_persona(const std::string& nombre)
53 {
54         return (Persona *) nombres[nombre];
55 }
56
57 void
58 Susanita::
59 mostrar_estado(int mostrar_prios) const
60 {
61         personas_type::const_iterator ih;\r
62         std::cout << "Personas\n";
63         for (ih = hombres.begin();
64                         ih != hombres.end(); ++ih)
65                 std::cout << **ih << "\n";
66         std::cout << "\n";
67         for (personas_type::const_iterator im = mujeres.begin();
68                         im != mujeres.end(); ++im)
69                 std::cout << **im << "\n";
70         std::cout << "\n" << std::endl;
71
72         if (mostrar_prios)
73                 return;
74
75         std::cout << "Prioridades\n";
76         for (ih = hombres.begin();
77                         ih != hombres.end(); ++ih) {
78                 Persona& h = **ih;
79                 std::cout << h << "\n";
80                 for (personas_type::iterator im = h.prefs.begin();
81                                 im != h.prefs.end(); ++im) {
82                         Persona &p = **im;
83                         std::cout << "\t" << p << "\n";
84                 }
85         }
86         std::cout << "\n";
87         for (ih = mujeres.begin();
88                         ih != mujeres.end(); ++ih) {
89                 Persona& h = **ih;
90                 std::cout << h << "\n";
91                 for (personas_type::iterator im = h.prefs.begin();
92                                 im != h.prefs.end(); ++im) {
93                         Persona &p = **im;
94                         std::cout << "\t" << p << "\n";
95                 }
96         }
97 }
98