]> git.llucax.com Git - z.facultad/75.29/susanita.git/blob - src/persona.h
Agregar el generador de testcases y dos listas con nombres mexicanos.
[z.facultad/75.29/susanita.git] / src / persona.h
1 #ifndef _PERSONA_H_
2 #define _PERSONA_H_
3
4 #include <deque>
5 #include <string>
6 #include <ostream>
7 #include <istream>
8
9 struct Persona
10 {
11         /// Tipos de listas
12         typedef std::deque< Persona* > prefs_type;
13         typedef std::deque< Persona* > ofertas_type;
14         typedef std::deque< Persona* > rechazos_type;
15
16         /// Estados posibles de una persona
17         enum estado_type { SOLTERO, DECLARADO, COMPROMETIDO };
18
19         /// Sexo
20         enum sexo_type { M, F };
21
22         /// Constructor
23         Persona(const std::string& nombre, sexo_type sexo);
24         
25         /// Nombre de la persona, sólo con fines de representación
26         std::string nombre;
27
28         /// Lista de personas que prefiere, la primera de la lista es la
29         /// que mejor posicionada esta
30         prefs_type prefs;
31
32         /// Estado de la persona
33         estado_type estado;
34
35         /// Sexo
36         sexo_type sexo;
37
38         /// De estar declarado o comprometido, quien es su pareja
39         Persona* pareja;
40
41         /// Lista de la gente que se le declaro
42         ofertas_type ofertas;
43
44         /// Lista de la gente que lo rechazo
45         rechazos_type rechazos;
46
47         /// Función de comparación entre dos personas según nuestras prefs
48         bool cmp(const Persona& p1, const Persona& p2) const;
49
50         /// Ordenamos las ofertas según nuestras preferencias
51         void ordenar_ofertas();
52
53         /// Nos declaramos a la persona p
54         void declarar_a(Persona& p);
55
56         /// Nos comprometemos con la persona p, quien se nos habia declarado
57         /// previamente
58         void comprometer_con(Persona& p);
59
60 };
61
62 /// Para representación
63 std::ostream& operator<< (std::ostream& os, const Persona::estado_type e);
64
65 /// Para representación
66 std::ostream& operator<< (std::ostream& os, const Persona& p);
67
68 #endif // _PERSONA_H_