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