4 #ifndef FIRE_GROUP_HPP_INCLUDED
5 #define FIRE_GROUP_HPP_INCLUDED
7 #include <boost/iterator/filter_iterator.hpp>
15 #include "fire/Object.hpp"
16 #include "fire/Filter.hpp"
17 #include "fire/Predicate.hpp"
18 #include "fire/exception/Exception.hpp"
39 typedef typename std::set< T >::iterator
iterator;
40 typedef typename std::set< T >::const_iterator const_iterator;
46 typedef typename std::set< T >::const_reverse_iterator const_reverse_iterator;
53 bool objectsIteratorInitialized;
73 boost::filter_iterator< fire::Predicate< T >,
iterator >* firstFilteredObject;
78 boost::filter_iterator< fire::Predicate< T >,
iterator >* lastFilteredObject;
83 boost::filter_iterator< fire::Predicate< T >,
iterator >* filteredObjectsIterator;
99 this->objectsIteratorInitialized =
false;
100 this->predicate = NULL;
101 this->firstFilteredObject = NULL;
102 this->lastFilteredObject = NULL;
103 this->filteredObjectsIterator = NULL;
104 }
catch (
const std::exception& exception) {
114 if (this->predicate != NULL) {
115 delete this->predicate;
117 if (this->firstFilteredObject != NULL) {
118 delete this->firstFilteredObject;
120 if (this->lastFilteredObject != NULL) {
121 delete this->lastFilteredObject;
123 if (this->filteredObjectsIterator != NULL) {
124 delete this->filteredObjectsIterator;
126 }
catch (
const std::exception& exception) {
140 }
catch (
const std::exception& exception) {
153 for (
typename std::set< T >::iterator objectsIterator = objects.begin() ; objectsIterator != objects.end() ; ++objectsIterator) {
154 this->
include(*objectsIterator);
156 }
catch (
const std::exception& exception) {
170 }
catch (
const std::exception& exception) {
184 }
catch (
const std::exception& exception) {
197 for (
typename std::set< T >::iterator objectsIterator = objects.begin() ; objectsIterator != objects.end() ; ++objectsIterator) {
198 this->
exclude(*objectsIterator);
200 }
catch (
const std::exception& exception) {
214 }
catch (
const std::exception& exception) {
225 }
catch (
const std::exception& exception) {
240 }
catch (
const std::exception& exception) {
253 std::size_t value = 0;
256 }
catch (
const std::exception& exception) {
274 if (this->
objects.count(
object) == 0) {
277 }
catch (
const std::exception& exception) {
295 for (
typename std::set< T >::iterator objectsIterator = objects.begin() ; objectsIterator != objects.end() ; ++objectsIterator) {
296 if (!this->
contains(*objectsIterator)) {
300 }
catch (
const std::exception& exception) {
321 }
catch (
const std::exception& exception) {
339 std::auto_ptr< fire::Predicate< T > > predicate(
new Predicate< T >(filter));
340 boost::filter_iterator< fire::Predicate< T >,
typename std::set< T >::iterator > firstObject(*predicate, this->
objects.begin(), this->
objects.end());
341 boost::filter_iterator< fire::Predicate< T >,
typename std::set< T >::iterator > lastObject(*predicate, this->
objects.end(), this->
objects.end());
343 std::copy(firstObject, lastObject, std::inserter(objects, objects.begin()));
345 }
catch (
const std::exception& exception) {
365 }
catch (
const std::exception& exception) {
383 this->objects.
clear();
385 }
catch (
const std::exception& exception) {
403 if (
this != &group) {
407 }
catch (
const std::exception& exception) {
426 }
catch (
const std::exception& exception) {
445 }
catch (
const std::exception& exception) {
464 }
catch (
const std::exception& exception) {
483 }
catch (
const std::exception& exception) {
502 }
catch (
const std::exception& exception) {
521 }
catch (
const std::exception& exception) {
541 }
catch (
const std::exception& exception) {
561 }
catch (
const std::exception& exception) {
581 }
catch (
const std::exception& exception) {
601 }
catch (
const std::exception& exception) {
621 }
catch (
const std::exception& exception) {
641 }
catch (
const std::exception& exception) {
659 value = this->
filter(filter);
660 }
catch (
const std::exception& exception) {
673 std::vector< T > value;
675 for (
typename std::set< T >::iterator objectsIterator = this->
objects.begin() ; objectsIterator != this->
objects.end() ; ++objectsIterator) {
676 value.push_back(*objectsIterator);
678 }
catch (
const std::exception& exception) {
694 }
catch (
const std::exception& exception) {
699 const_iterator
begin()
const {
703 }
catch (
const std::exception& exception) {
719 }
catch (
const std::exception& exception) {
724 const_iterator
end()
const {
728 }
catch (
const std::exception& exception) {
743 value = this->
objects.rbegin();
744 }
catch (
const std::exception& exception) {
749 const_reverse_iterator
rbegin()
const {
752 value = this->
objects.rbegin();
753 }
catch (
const std::exception& exception) {
769 }
catch (
const std::exception& exception) {
774 const_reverse_iterator
rend()
const {
778 }
catch (
const std::exception& exception) {
793 this->firstFilteredObject =
new boost::filter_iterator< fire::Predicate< T >,
iterator >(*this->predicate, this->
objects.begin(), this->
objects.end());
794 this->lastFilteredObject =
new boost::filter_iterator< fire::Predicate< T >,
iterator >(*this->predicate, this->
objects.end(), this->
objects.end());
795 this->objectsIteratorInitialized =
false;
796 }
catch (
const std::exception& exception) {
806 if (this->predicate != NULL) {
807 delete this->predicate;
808 this->predicate = NULL;
810 if (this->firstFilteredObject != NULL) {
811 delete this->firstFilteredObject;
812 this->firstFilteredObject = NULL;
814 if (this->lastFilteredObject != NULL) {
815 delete this->lastFilteredObject;
816 this->lastFilteredObject = NULL;
818 if (this->filteredObjectsIterator != NULL) {
819 delete this->filteredObjectsIterator;
820 this->filteredObjectsIterator = NULL;
822 this->objectsIteratorInitialized =
false;
823 }
catch (
const std::exception& exception) {
833 if ((this->firstFilteredObject != NULL) && (this->lastFilteredObject != NULL)) {
834 this->filteredObjectsIterator =
new boost::filter_iterator< fire::Predicate< T >,
iterator >(*this->predicate, this->
objects.begin(), this->
objects.end());
836 this->objectsIterator = this->
objects.begin();
838 this->objectsIteratorInitialized =
true;
840 }
catch (
const std::exception& exception) {
855 if (this->objectsIteratorInitialized ==
false) {
858 if (this->filteredObjectsIterator != NULL) {
859 if (this->index == -1) {
860 if (*this->filteredObjectsIterator != *this->lastFilteredObject) {
861 value = **this->filteredObjectsIterator;
867 if (*this->filteredObjectsIterator != --*this->lastFilteredObject) {
868 delete this->lastFilteredObject;
869 this->lastFilteredObject =
new boost::filter_iterator< fire::Predicate< T >,
iterator >(*this->predicate, this->
objects.end(), this->
objects.end());
870 ++*this->filteredObjectsIterator;
871 value = **this->filteredObjectsIterator;
877 if (this->index == -1) {
878 if (this->objectsIterator != this->
objects.end()) {
879 value = *this->objectsIterator;
885 if (this->objectsIterator != --this->
objects.end()) {
886 ++this->objectsIterator;
887 value = *this->objectsIterator;
894 }
catch (
const std::exception& exception) {
909 if (this->objectsIteratorInitialized ==
false) {
912 if (this->filteredObjectsIterator != NULL) {
913 if (this->index == -1) {
914 if (*this->filteredObjectsIterator != *this->lastFilteredObject) {
918 if (*this->filteredObjectsIterator != --*this->lastFilteredObject) {
919 delete this->lastFilteredObject;
920 this->lastFilteredObject =
new boost::filter_iterator< fire::Predicate< T >,
iterator >(*this->predicate, this->
objects.end(), this->
objects.end());
925 if (this->index == -1) {
926 if (this->objectsIterator != this->
objects.end()) {
930 if (this->objectsIterator != --this->
objects.end()) {
935 }
catch (
const std::exception& exception) {
946 if ((this->firstFilteredObject != NULL) && (this->lastFilteredObject != NULL)) {
947 this->filteredObjectsIterator =
new boost::filter_iterator< fire::Predicate< T >,
iterator >(*this->predicate, this->
objects.end(), this->
objects.end());
949 this->objectsIterator = this->
objects.end();
951 this->objectsIteratorInitialized =
true;
952 }
catch (
const std::exception& exception) {
967 if (this->objectsIteratorInitialized ==
false) {
970 if (this->filteredObjectsIterator != NULL) {
971 if (*this->filteredObjectsIterator != *this->firstFilteredObject) {
972 --*this->filteredObjectsIterator;
973 value = **this->filteredObjectsIterator;
978 if (this->objectsIterator != this->
objects.begin()) {
979 --this->objectsIterator;
980 value = *this->objectsIterator;
985 }
catch (
const std::exception& exception) {
1000 if (this->objectsIteratorInitialized ==
false) {
1003 if (this->filteredObjectsIterator != NULL) {
1004 if (*this->filteredObjectsIterator != *this->firstFilteredObject) {
1008 if (this->objectsIterator != this->
objects.begin()) {
1012 }
catch (
const std::exception& exception) {
fire::Group< T > & operator-=(const fire::Group< T > &group)
Operatore di sottrazione e assegnamento con un gruppo di oggetti generici.
Definition: Group.hpp:517
std::vector< T > toVector() const
Restituisce un vettore degli oggetti generici del gruppo.
Definition: Group.hpp:672
void exclude(const fire::Group< T > &group)
Esclude un gruppo di oggetti generici dal gruppo.
Definition: Group.hpp:211
virtual void exclude(T object)
Esclude un oggetto generico dal gruppo.
Definition: Group.hpp:181
fire::Group< T > & operator+=(const T &object)
Operatore di somma e assegnamento con un oggetto generico.
Definition: Group.hpp:422
void exclude(const std::set< T > &objects)
Esclude un insieme di oggetti generici dal gruppo.
Definition: Group.hpp:195
Group()
Costruttore.
Definition: Group.hpp:97
void include(const std::set< T > &objects)
Include un insieme di oggetti generici nel gruppo.
Definition: Group.hpp:151
fire::Group< T > & operator-=(const T &object)
Operatore di sottrazione e assegnamento con un oggetto generico.
Definition: Group.hpp:479
bool contains(const fire::Group< T > &group) const
Restituisce l'indicazione se il gruppo contiene un gruppo di oggetti generici.
Definition: Group.hpp:315
fire::Group< T > operator%(const fire::Filter< T > &filter) const
Operatore di filtro.
Definition: Group.hpp:656
T previous()
Restituisce l'oggetto generico precedente del gruppo iterator is out of bounds.
Definition: Group.hpp:964
virtual bool contains(T object) const
Restituisce l'indicazione se il gruppo contiene un oggetto generico.
Definition: Group.hpp:271
fire::Group< T > & operator=(const fire::Group< T > &group)
Operatore di assegnamento con un gruppo di oggetti generici.
Definition: Group.hpp:400
fire::Group< T > & operator+=(const fire::Group< T > &group)
Operatore di somma e assgnamento con un gruppo di oggetti generici.
Definition: Group.hpp:460
virtual void clear()
Svuota il gruppo.
Definition: Group.hpp:222
Classe per la gestione di un oggetto.
Definition: Object.hpp:29
void forward()
Sposta l'iteratore alla fine.
Definition: Group.hpp:944
Classe per la gestione di un gruppo di oggetti generici.
Definition: Group.hpp:33
std::set< T > objects
Insieme degli oggetti generici.
Definition: Group.hpp:90
Classe per la gestione di un'eccezione generica.
Definition: Exception.hpp:26
bool contains(const std::set< T > &objects) const
Restituisce l'indicazione se il gruppo contiene un insieme di oggetti generici.
Definition: Group.hpp:292
virtual fire::Group< T > filter(const fire::Filter< T > &filter) const
Restituisce un gruppo filtrato.
Definition: Group.hpp:336
fire::Group< T > operator-(const T &object) const
Operatore di sottrazione con un oggetto generico.
Definition: Group.hpp:596
virtual void include(T object)
Include un oggetto generico nel gruppo.
Definition: Group.hpp:137
reverse_iterator rbegin()
Restituisce l'inizio dell'iteratore inverso sugli oggetti generici del gruppo.
Definition: Group.hpp:740
bool hasNext()
Restituisce l'indicazione se il gruppo ha un oggetto generico successivo.
Definition: Group.hpp:906
fire::Group< T > & operator=(const std::set< T > &objects)
Operatore di assegnamento con un insieme di oggetti generici.
Definition: Group.hpp:380
std::size_t size() const
Restituisce la dimensione del gruppo.
Definition: Group.hpp:252
fire::Group< T > & operator-=(const std::set< T > &objects)
Operatore di sottrazione e assegnamento con un insieme di oggetti generici.
Definition: Group.hpp:498
virtual ~Group()
Distruttore.
Definition: Group.hpp:112
Classe per la gestione di un filtro.
Definition: Filter.hpp:25
void setIteratorFilter(const fire::Filter< T > &filter)
Imposta un filtro per l'iteratore sugli oggetti generici.
Definition: Group.hpp:790
Classe per la gestione di un predicato.
Definition: Predicate.hpp:35
bool hasPrevious()
Restituisce l'indicazione se il gruppo ha un oggetto generico precedente.
Definition: Group.hpp:997
fire::Group< T > operator+(const T &object) const
Operatore di somma con un oggetto generico.
Definition: Group.hpp:536
void include(const fire::Group< T > &group)
Include un gruppo di oggetti generici nel gruppo.
Definition: Group.hpp:167
fire::Group< T > operator-(const std::set< T > &objects) const
Operatore di sottrazione con un insieme di oggetti generici.
Definition: Group.hpp:616
void unsetIteratorFilter()
Disimposta il filtro per l'iteratore sugli oggetti generici.
Definition: Group.hpp:804
std::set< T >::reverse_iterator reverse_iterator
Definizione dell'iteratore inverso sugli oggetti generici.
Definition: Group.hpp:45
fire::Group< T > & operator+=(const std::set< T > &objects)
Operatore di somma e assegnamento con un insieme di oggetti generici.
Definition: Group.hpp:441
T next()
Restituisce il successivo oggetto generico del gruppo iterator is out of bounds.
Definition: Group.hpp:852
fire::Group< T > operator+(const fire::Group< T > &group) const
Operatore di somma con un gruppo di oggetti generici.
Definition: Group.hpp:576
void rewind()
Sposta l'iteratore all'inizio.
Definition: Group.hpp:831
bool empty() const
Restituisce l'indicazione se il gruppo รจ vuoto.
Definition: Group.hpp:236
fire::Group< T > operator+(const std::set< T > &objects) const
Operatore di somma con un insieme di oggetti generici.
Definition: Group.hpp:556
fire::Group< T > operator-(const fire::Group< T > &group) const
Operatore di sottrazione con un gruppo di oggetti generici.
Definition: Group.hpp:636
fire::Group< T > & operator=(T object)
Operatore di assegnamento con un oggetto generico.
Definition: Group.hpp:360
iterator end()
Restituisce la fine dell'iteratore sugli oggetti generici del gruppo.
Definition: Group.hpp:715
std::set< T >::iterator iterator
Definizione dell'iteratore sugli oggetti generici.
Definition: Group.hpp:39
reverse_iterator rend()
Restituisce la fine dell'iteratore inverso sugli oggetti generici del gruppo.
Definition: Group.hpp:765
iterator begin()
Restituisce l'inizio dell'iteratore sugli oggetti generici del gruppo.
Definition: Group.hpp:690