]> git.llucax.com Git - z.facultad/75.29/susanita.git/blobdiff - src/susanita.cpp
Bugfix.
[z.facultad/75.29/susanita.git] / src / susanita.cpp
index a97a15eb89f86fc76cfcc7cad8544b865311a657..fff9fef25f7db0c5fd6b2d1964627750d1b45a8c 100644 (file)
@@ -1,9 +1,29 @@
 #include "susanita.h"
 #include <cassert>
 #include <iostream>
+#include <algorithm>
 
-Susanita::~Susanita()
+Susanita::
+Susanita(size_type capacidad):
+       nombres(capacidad)
+{
+}
+
+// Uso interno
+namespace
 {
+       /// Mata a una persona
+       void matar(Persona* p)
+       {
+               delete p;
+       }
+}
+
+Susanita::
+~Susanita()
+{
+       std::for_each(hombres.begin(), hombres.end(), matar);
+       std::for_each(mujeres.begin(), mujeres.end(), matar);
 }
 
 void
@@ -12,7 +32,7 @@ add_persona(Persona* pp)
 {
        // XXX cual sería el problema que agregue una persona repetida?
        // Reemplazaría a la anterior nomás
-       assert(nombres.find(pp->nombre) == nombres.end());
+       assert(nombres[pp->nombre] == 0); // Muere si hay nombres repetidos
 
        nombres[pp->nombre] = pp;
        switch (pp->sexo)
@@ -30,19 +50,18 @@ add_persona(Persona* pp)
 
 Persona*
 Susanita::
-get_persona(const std::string& nombre) const
+get_persona(const std::string& nombre)
 {
-       nombres_type::const_iterator ip = nombres.find(nombre);
-       if (ip == nombres.end()) // No está
-               return 0;
-       return ip->second;
+       return nombres[nombre];
 }
 
 void
 Susanita::
-mostrar_estado() const
+mostrar_estado(int mostrar_prios) const
 {
-       for (personas_type::const_iterator ih = hombres.begin();
+       personas_type::const_iterator ih;\r
+       std::cout << "Personas\n";
+       for (ih = hombres.begin();
                        ih != hombres.end(); ++ih)
                std::cout << **ih << "\n";
        std::cout << "\n";
@@ -50,5 +69,31 @@ mostrar_estado() const
                        im != mujeres.end(); ++im)
                std::cout << **im << "\n";
        std::cout << "\n" << std::endl;
+
+       if (mostrar_prios)
+               return;
+
+       std::cout << "Prioridades\n";
+       for (ih = hombres.begin();
+                       ih != hombres.end(); ++ih) {
+               Persona& h = **ih;
+               std::cout << h << "\n";
+               for (personas_type::iterator im = h.prefs.begin();
+                               im != h.prefs.end(); ++im) {
+                       Persona &p = **im;
+                       std::cout << "\t" << p << "\n";
+               }
+       }
+       std::cout << "\n";
+       for (ih = mujeres.begin();
+                       ih != mujeres.end(); ++ih) {
+               Persona& h = **ih;
+               std::cout << h << "\n";
+               for (personas_type::iterator im = h.prefs.begin();
+                               im != h.prefs.end(); ++im) {
+                       Persona &p = **im;
+                       std::cout << "\t" << p << "\n";
+               }
+       }
 }