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