return false;
Persona::sexo_type sexo = Persona::M;
Persona::sexo_type opuesto = Persona::F;
+
+ Susanita::size_type cap = get_n(filename);
+
std::string l;
while (std::getline(f, l))
{
Persona* pp = susanita.get_persona(nombre);
if (!pp)
{
- pp = new Persona(nombre, sexo);
+ pp = new Persona(nombre, sexo, cap);
susanita.add_persona(pp);
}
- Persona::prefs_type prefs;
+ int count = 0;
while (ss)
{
std::string nombre = get_hasta(ss, ',');
+ nombre = strip(nombre);
+ if (nombre.empty()) {
+ continue;
+ }
Persona* ppp = susanita.get_persona(nombre);
if (!ppp)
{
- ppp = new Persona(nombre, opuesto);
+ ppp = new Persona(nombre, opuesto, cap);
susanita.add_persona(ppp);
}
pp->prefs.push_back(ppp);
+ pp->prefs_hash[ppp->nombre] = count;
+ count++;
}
}
return true;
}
}
+/// Hack medio feo para obtener el N del problema
+Susanita::size_type
+Parser::
+get_n(const std::string& filename)
+{
+ std::ifstream f(filename.c_str());
+ if (!f)
+ return 0;
+ std::string l;
+ if (!std::getline(f, l))
+ return 0;
+ std::istringstream ss(strip(l));
+ // descartamos el nombre
+ get_hasta(ss, ':');
+ // contamos personas en la lista
+ Susanita::size_type count = 0;
+ while (ss)
+ {
+ if (!strip(get_hasta(ss, ',')).empty())
+ ++count;
+ }
+ return count;
+}
+