Fire Core  8.0.0.alpha
GIS framework per tutti gli usi
 Tutto Classi Namespace Funzioni Variabili Ridefinizioni di tipo (typedef) Tipi enumerati (enum) Valori del tipo enumerato Friend
Filter.hpp
1 // Copyright 2015 GEOSYSTEMS SRL
2 // All Rights Reserved.
3 
4 #ifndef FIRE_FILTER_HPP_INCLUDED
5 #define FIRE_FILTER_HPP_INCLUDED
6 
7 #include <exception>
8 
9 #include "fire/Object.hpp"
10 #include "fire/LogicOperator.hpp"
11 
16 namespace fire {
24 template < class T >
25 class Filter : public fire::Object {
26  private:
36  fire::Filter< T >* leftFilter;
41  fire::Filter< T >* rightFilter;
42 
43  public:
48  Filter() {
49  try {
50  this->logicOperator = fire::LogicOperator::None;
51  this->leftFilter = NULL;
52  this->rightFilter = NULL;
53  } catch (const std::exception& exception) {
54  throw;
55  }
56  }
61  virtual ~Filter() {
62  try {
63  } catch (const std::exception& exception) {
64  throw;
65  }
66  }
77  virtual bool condition(T object) {
78  bool value = false;
79  try {
80  value = true;
81  } catch (const std::exception& exception) {
82  throw;
83  }
84  return value;
85  }
96  bool expression(T object) {
97  bool value = false;
98  try {
99  value = this->condition(object);
100  switch (this->logicOperator) {
101  case fire::LogicOperator::None: {
102  break;
103  }
104  case fire::LogicOperator::Not: {
105  value = !this->leftFilter->expression(object);
106  break;
107  }
108  case fire::LogicOperator::And: {
109  value = this->leftFilter->expression(object) && this->rightFilter->expression(object);
110  break;
111  }
112  case fire::LogicOperator::Or: {
113  value = this->leftFilter->expression(object) || this->rightFilter->expression(object);
114  break;
115  }
116  }
117  } catch (const std::exception& exception) {
118  throw;
119  }
120  return value;
121  }
130  fire::Filter< T > value;
131  try {
132  value.logicOperator = fire::LogicOperator::Not;
133  value.leftFilter = this;
134  } catch (const std::exception& exception) {
135  throw;
136  }
137  return value;
138  }
150  fire::Filter< T > value;
151  try {
152  value.logicOperator = fire::LogicOperator::And;
153  value.leftFilter = this;
154  value.rightFilter = &filter;
155  } catch (const std::exception& exception) {
156  throw;
157  }
158  return value;
159  }
171  fire::Filter< T > value;
172  try {
173  value.logicOperator = fire::LogicOperator::Or;
174  value.leftFilter = this;
175  value.rightFilter = &filter;
176  } catch (const std::exception& exception) {
177  throw;
178  }
179  return value;
180  }
189  fire::Filter< T > value;
190  try {
191  value = this->NOT();
192  } catch (const std::exception& exception) {
193  throw;
194  }
195  return value;
196  }
208  fire::Filter< T > value;
209  try {
210  value = this->AND(filter);
211  } catch (const std::exception& exception) {
212  throw;
213  }
214  return value;
215  }
227  fire::Filter< T > value;
228  try {
229  value = this->OR(filter);
230  } catch (const std::exception& exception) {
231  throw;
232  }
233  return value;
234  }
235 };
236 } // namespace fire
237 
238 #endif
bool expression(T object)
Restituisce l'indicazione se un oggetto generico soddisfa l'espressione del filtro.
Definition: Filter.hpp:96
Classe per la gestione di un oggetto.
Definition: Object.hpp:29
fire::Filter< T > AND(fire::Filter< T > &filter)
Restituisce un filtro dato dall'applicazione sul filtro dell'operatore logico AND con un altro filtro...
Definition: Filter.hpp:149
virtual bool condition(T object)
Restituisce l'indicazione se un oggetto generico soddisfa la condizione del filtro.
Definition: Filter.hpp:77
virtual ~Filter()
Distruttore.
Definition: Filter.hpp:61
fire::Filter< T > operator&&(fire::Filter< T > &filter)
Operatore logico AND.
Definition: Filter.hpp:207
fire::Filter< T > OR(fire::Filter< T > &filter)
Restituisce un filtro dato dall'applicazione sul filtro dell'operatore logico OR con un altro filtro...
Definition: Filter.hpp:170
Classe per la gestione di un filtro.
Definition: Filter.hpp:25
fire::Filter< T > NOT()
Restituisce un filtro dato dall'applicazione sul filtro dell'operatore logico NOT.
Definition: Filter.hpp:129
Filter()
Costruttore.
Definition: Filter.hpp:48
fire::Filter< T > operator!()
Operatore logico NOT.
Definition: Filter.hpp:188
LogicOperator
Enumerativo per la gestione di un operatore logico.
Definition: LogicOperator.hpp:21
fire::Filter< T > operator||(fire::Filter< T > &filter)
Operatore logico OR.
Definition: Filter.hpp:226