1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
9 #ifndef anna_core_mt_SafeSortedVector_hpp
10 #define anna_core_mt_SafeSortedVector_hpp
14 #include <anna/core/mt/Mutex.hpp>
15 #include <anna/core/mt/Guard.hpp>
16 #include <anna/core/util/SortedVector.hpp>
21 Patron para ordenar instancias de objetos en base de una clave. El acceso a la lista de
22 datos se realiza desde secciones criticas.
24 \param T Clase del patron.
25 \param SortBy Clase que ofrece el valor por el que ordenar. Debe implementar un metodo constante con la
26 signatura: TKey value (const T*)
27 \param TKey Tipo de clave usado para calcular la ordenacion. Debe implementar los operadores '=', '<' y '==' y el
30 template < typename T, typename SortBy, typename TKey = int >
31 class SafeSortedVector : public SortedVector <T, SortBy, TKey>, public Mutex {
36 SafeSortedVector() : SortedVector <T, SortBy, TKey> () {;}
40 \param other Instancia de la que copiar.
42 explicit SafeSortedVector(const SafeSortedVector& other) : SortedVector <T, SortBy, TKey> (other) {}
45 Devolvera \em true si la instancia recibida como parametro esta contenido en el
46 vector o \em en otro caso. Si la instancia recibida es NULL siempre devolvera \em false.
47 \param t Instancia a comprobar.
48 \return \em true si la instancia recibida como parametro esta contenido en el
49 vector o \em en otro caso.
51 bool contains(const T* t) const
56 Guard guard(this, "SafeSortedVector <T, SortBy, TKey>::contains");
57 return SortedVector <T, SortBy, TKey>::contains(t);
61 Incorpora la instancia recibida como parametro en la lista ordenada de objetos.
62 \param t Instancia a guardar en el vector. Si es NULL la operacion no tendra ningun efecto.
63 \return \em true si ha registrado la nueva instancia o \em false en otro caso.
66 throw(RuntimeException) {
70 Guard guard(this, "SafeSortedVector <T, SortBy, TKey>::add");
71 return SortedVector <T, SortBy, TKey>::add(t);
75 Elimina la instancia recibida como parametro de la lista ordenada de objetos.
76 \param t Instancia a guardar en el vector. Si es NULL la operacion no tendra ningun efecto.
77 \return \em true si ha eliminado la instancia o \em false en otro caso.
80 throw(RuntimeException) {
84 Guard guard(this, "SafeSortedVector <T, SortBy, TKey>::erase");
85 return SortedVector <T, SortBy, TKey>::erase(t);
89 Devuelve la instancia asociada a la clave recibida como parametro o NULL si no existe.
90 \param key Clave a buscar en el vector.
91 \return la instancia asociada a la clave recibida como parametro o NULL si no existe.
93 T* find(const TKey key)
95 Guard guard(this, "SafeSortedVector <T, SortBy, TKey>::find");
96 return SortedVector <T, SortBy, TKey>::find(key);
100 Devuelve la instancia asociada a la clave recibida como parametro o NULL si no existe.
101 \param key Clave a buscar en el vector.
102 \return la instancia asociada a la clave recibida como parametro o NULL si no existe.
104 const T* find(const TKey key) const throw() {
105 return const_cast <SafeSortedVector <T, SortBy, TKey>*>(this)->find(key);