Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 121 lines (100 sloc) 2.445 kb
7da02956 » Martin Sebastian Fixman
2012-04-25 Initial Commit.
1 #ifndef ANILLO_H_
2 #define ANILLO_H_
3
4 #include <iostream>
5 #include <cassert>
6 using namespace std;
7
8 //se puede asumir que el tipo T tiene constructor por copia
9 //y operator==
10 //no se puede asumir que el tipo T tenga operator=
11 template<typename T>
12 class Anillo {
13 public:
14 /*
e4e4edff » Martin Sebastian Fixman
2012-04-25 Styling.
15 * constructor por defecto, crea un anillo
16 */
7da02956 » Martin Sebastian Fixman
2012-04-25 Initial Commit.
17 Anillo();
18
19 /*
20 * constructor por copia, una vez copiado, ambos anillos deben ser
21 * independientes, es decir, cuando se borre uno no debe morir el otro.
22 */
23 Anillo(const Anillo<T>&);
24
25 /*
26 * Destructor. Acordarse de liberar toda la memoria!
27 */
28 ~Anillo();
29
30 /*
31 * Devuelve true si los anillos son iguales
32 */
33 bool operator==(const Anillo<T>&) const;
34
35 /*
36 * Dice si el anillo es vac’o.
37 */
38 bool esVacio() const;
39
40 /*
41 * Dice el tamanio del anillo
42 */
43 int tamanio() const;
44
45 /*
46 * Devuelve el pr—ximo elemento segœn el orden del anillo.
47 * El anillo debe rotar. Con lo cual sucesivas llamadas a esta funci—n
48 * retornan distintos valores.
49 *
50 * El valor retornado pasa a ser el anterior.
51 *
52 * PRE: no es vac’o el anillo.
53 */
54 const T& siguiente();
55
56 /*
57 * Agrega el elemento al anillo. Recordar que el œltimo agregado es el
58 * pr—ximo en el orden
59 */
60 void agregar(const T&);
61
62 /*
63 * Elimina el elemento indicado del anillo.
64 */
65 void eliminar(const T&);
66
67 /*
68 * Indica si hubo anterior elemento elegido
69 * y si Žste pertenece todav’a al anillo.
70 */
71 bool huboAnterior() const;
72
73 /*
74 * Indica cu‡l es el elemento elegido la œltima vez.
75 */
76 const T& anterior() const;
77
78 /*
79 * Vuelve hacia atr‡s un elemento.
80 * El anterior, en caso de existir, no debe alterarse.
81 */
82 void retroceder();
83
84 /*
85 * debe mostrar el anillo en el stream (y retornar el mismo).
86 * Anillo vacio: []
87 * Anillo con 2 elemento (e1 es el pr—ximo a aparecer en siguiente): [e1, e2]
88 * Anillo con 2 elemento (e2 es el pr—ximo a aparecer en siguiente y e1 es el anterior): [e2, e1*]
89 *
90 */
91 ostream& mostrarAnillo(ostream&) const;
92
93 private:
e4e4edff » Martin Sebastian Fixman
2012-04-25 Styling.
94 struct Nodo {
95 T elemento; //de tipo T
96 Nodo* proximo;
97 Nodo* anterior;
32ca4098 »
2012-04-26 Copy constructor - temporary commit.
98
b6a0e6f0 »
2012-04-28 Finished copy-constructor.
99 Nodo(const T& elemento_) : elemento(elemento_) {
32ca4098 »
2012-04-26 Copy constructor - temporary commit.
100 }
7da02956 » Martin Sebastian Fixman
2012-04-25 Initial Commit.
101 };
102
e4e4edff » Martin Sebastian Fixman
2012-04-25 Styling.
103 Nodo* primero;
3f147b49 »
2012-04-28 More cleanups
104 Nodo* nodoAnterior;
7da02956 » Martin Sebastian Fixman
2012-04-25 Initial Commit.
105
106 int longitud;
e4e4edff » Martin Sebastian Fixman
2012-04-25 Styling.
107 Nodo* buscar(const T&);
7da02956 » Martin Sebastian Fixman
2012-04-25 Initial Commit.
108
109 //No se puede modificar esta funcion.
110 Anillo<T>& operator=(const Anillo<T>& otro) {
e4e4edff » Martin Sebastian Fixman
2012-04-25 Styling.
111 assert(false);
112 return *this;
7da02956 » Martin Sebastian Fixman
2012-04-25 Initial Commit.
113 }
114 };
115
116 template<class T>
117 ostream& operator<<(ostream& out, const Anillo<T>& a) {
e4e4edff » Martin Sebastian Fixman
2012-04-25 Styling.
118 return a.mostrarAnillo(out);
7da02956 » Martin Sebastian Fixman
2012-04-25 Initial Commit.
119 }
120
121 #endif //ANILLO_H_
3f147b49 »
2012-04-28 More cleanups
122
Something went wrong with that request. Please try again.