20 #ifndef GAIA_PARSER_PARSERTYPES_H 21 #define GAIA_PARSER_PARSERTYPES_H 29 template <
typename SearchPo
intType,
typename DataSetType>
43 virtual bool value()
const = 0;
44 inline bool isTrue()
const {
return value(); }
45 virtual QString toString()
const = 0;
53 virtual Real value()
const = 0;
54 virtual QString toString()
const = 0;
56 virtual Value* copy()
const = 0;
62 virtual QString value()
const = 0;
63 virtual QString toString()
const = 0;
65 virtual Label* copy()
const = 0;
83 : _lhs(lhs), _rhs(rhs), _type(type) {}
86 :
Predicate(), _lhs(other._lhs->copy()), _rhs(other._rhs->copy()), _type(other._type) {}
97 virtual bool value()
const {
99 case EQ:
return _lhs->value() == _rhs->value();
100 case NEQ:
return _lhs->value() != _rhs->value();
101 case LT:
return _lhs->value() < _rhs->value();
102 case GT:
return _lhs->value() > _rhs->value();
103 case LTE:
return _lhs->value() <= _rhs->value();
104 case GTE:
return _lhs->value() >= _rhs->value();
113 virtual QString toString()
const {
116 case EQ: result =
"%1 == %2";
break;
117 case NEQ: result =
"%1 != %2";
break;
118 case LT: result =
"%1 < %2";
break;
119 case GT: result =
"%1 > %2";
break;
120 case LTE: result =
"%1 <= %2";
break;
121 case GTE: result =
"%1 >= %2";
break;
124 return result.arg(_lhs->toString()).arg(_rhs->toString());
138 : _var(var), _min(minv), _max(maxv) {
146 :
Predicate(), _var(other._var->copy()), _min(other._min), _max(other._max) {}
154 virtual bool value()
const {
155 Real v = _var->value();
156 return (v >= _min) && (v <= _max);
159 virtual QString toString()
const {
160 return QString(
"%1 BETWEEN %2 AND %3").arg(_var->toString()).arg(_min).arg(_max);
174 : _lhs(lhs), _rhs(rhs), _type(type) {}
177 :
Predicate(), _lhs(other._lhs->copy()), _rhs(other._rhs->copy()), _type(other._type) {}
188 virtual bool value()
const {
190 case EQ:
return _lhs->value() == _rhs->value();
191 case NEQ:
return _lhs->value() != _rhs->value();
199 virtual QString toString()
const {
202 case EQ: result =
"%1 == %2";
break;
203 case NEQ: result =
"%1 != %2";
break;
206 return result.arg(_lhs->toString()).arg(_rhs->toString());
214 template <
typename SearchPo
intType,
typename DataSetType>
220 : _lhs(lhs), _rhs(rhs), _op(op) {}
223 :
Predicate(), _lhs(other._lhs->copy()), _rhs(other._rhs->copy()), _op(other._op) {}
234 virtual bool value()
const {
236 case AND:
return _lhs->value() && _rhs->value();
237 case OR:
return _lhs->value() || _rhs->value();
245 virtual QString toString()
const {
248 case AND: result =
"(%1) AND (%2)";
break;
249 case OR: result =
"(%1) OR (%2)";
break;
252 return result.arg(_lhs->toString()).arg(_rhs->toString());
259 template <
typename SearchPo
intType,
typename DataSetType>
272 virtual bool value()
const {
273 return !_pred->value();
276 virtual QString toString()
const {
277 return QString(
"NOT (%1)").arg(_pred->toString());
289 inline virtual bool value()
const {
return _value; }
291 virtual QString toString()
const {
292 return _value ?
"True" :
"False";
304 : _var(var), _vlist(vlist) {}
307 :
Predicate(), _var(other._var->copy()), _vlist(other._vlist) {}
317 virtual bool value()
const {
318 return _vlist.contains(_var->value());
321 virtual QString toString()
const {
322 QString result = QString(
"%1 IN (").arg(_var->toString());
323 if (!_vlist.empty()) result += QString::number(_vlist[0]);
324 for (
int i=1; i<_vlist.size(); i++) result += QString(
", %1").arg(_vlist[i]);
333 template <
typename SearchPo
intType,
typename DataSetType>
339 : _var(var), _slist(slist) {}
342 :
Predicate(), _var(other._var->copy()), _slist(other._slist) {}
352 virtual bool value()
const {
353 return _slist.contains(_var->value());
356 virtual QString toString()
const {
357 QString result = QString(
"%1 IN (").arg(_var->toString());
358 if (!_slist.empty()) result += QString(
"\"%1\"").arg(_slist[0]);
359 for (
int i=1; i<_slist.size(); i++) result += QString(
", \"%1\"").arg(_slist[i]);
375 inline virtual QString value()
const {
return _value; }
376 virtual QString toString()
const {
return QString(
"%1").arg(_value); }
389 LabelVariable(
const QString& name) : _point(0), _ltype(FixedLength),
390 _idx(-1), _varname(name) {}
392 QString name()
const {
return _varname; }
396 virtual QString value()
const {
397 if (_idx == -1)
throw GaiaException(
"variable ", _varname,
" is not bound...");
403 case FixedLength:
return (*_point)->fstringData()[_idx];
404 case VariableLength:
return (*_point)->vstringData()[_idx].toSingleValue();
406 throw GaiaException(
"Internal error at LabelVariable::value()");
409 case FixedLength:
return (*_point)->layout().enumToString(_fullname, (*_point)->fenumData()[_idx]);
410 case VariableLength:
return (*_point)->layout().enumToString(_fullname, (*_point)->venumData()[_idx].toSingleValue());
416 throw GaiaException(
"Internal error at LabelVariable::value()");
420 _point = pointLocation;
424 _type = location.
type();
426 _idx = location.
index();
429 virtual QString toString()
const {
return _varname; }
434 const Point** _point;
441 virtual QString value()
const {
443 return (*_point)->name();
446 void bind(
const Point** pointLocation) {
447 _point = pointLocation;
450 virtual QString toString()
const {
return "point.id"; }
464 virtual Real value()
const {
return _value; }
465 virtual QString toString()
const {
return QString::number(_value); }
474 int _dimension_number;
480 _ltype = FixedLength;
482 _dimension_number = -1;
487 if (name.lastIndexOf(
"[") != -1 && name.lastIndexOf(
"]") != -1){
488 _varname = name.left(name.lastIndexOf(
"["));
490 QString dimension_number_str = name.section(
'[', 1);
491 dimension_number_str.chop(1);
493 int dimension_number = dimension_number_str.toInt(&ok, 10);
496 _dimension_number = dimension_number;
498 throw GaiaException(
"dimension number malformated for descriptor ", _varname,
"...");
505 QString name()
const {
511 virtual Real value()
const {
512 if (_idx == -1)
throw GaiaException(
"variable ", _varname,
" is not bound...");
516 case FixedLength:
return (*_point)->frealData()[_idx];
517 case VariableLength:
return (*_point)->vrealData()[_idx].toSingleValue();
519 throw GaiaException(
"Internal error at ValueVariable::value()");
523 _point = pointLocation;
528 if (listIndices.size() == 1){
533 if (_dimension_number < 0){
534 throw GaiaException(
"dimension number was not indicated for multidimensional descriptor ", _varname,
"...");
536 if (_dimension_number < listIndices.size()){
537 _idx = listIndices[_dimension_number];
539 throw GaiaException(
"dimension number out of range for multidimensional descriptor ", _varname,
"...");
545 virtual QString toString()
const {
return _varname; }
553 #define OPEN_GAIA_PARSER_NS namespace gaia2 { namespace parser { 554 #define CLOSE_GAIA_PARSER_NS } } // namespace parser / namespace gaia2 556 #endif // GAIA_PARSER_PARSERTYPES_H Definition: parsertypes.h:59
Definition: parsertypes.h:128
Definition: parsertypes.h:210
int index() const
Returns the index corresponding to the descriptor contained in this region if and only if this region...
Definition: region.cpp:117
A region is a physical location in the point layout which consists in a list of segments.
Definition: region.h:125
QStringList descriptorNames() const
Returns all descriptor names from this layout.
Definition: pointlayout.cpp:77
Definition: parsertypes.h:40
The QueryOptimizer class tries to optimize a query by reducing the SearchSpace on which it is suppose...
Definition: parsertypes.h:30
Definition: parsertypes.h:468
Definition: parsertypes.h:432
This class describes the layout of a point.
Definition: pointlayout.h:60
Definition: parsertypes.h:296
The Filter class allows to check whether a predicate is true for a given Point.
Definition: filter.h:73
DescriptorLengthType
Either fixed-length or variable-length.
Definition: region.h:46
Definition: parsertypes.h:379
Definition: parsertypes.h:256
Main Gaia namespace, which contains all the library functions.
Definition: addfield.cpp:22
Definition: parsertypes.h:164
Definition: parsertypes.h:368
Definition: parsertypes.h:73
DescriptorLengthType lengthType() const
Returns the descriptor length type if all segments within this region are of the same type...
Definition: region.cpp:90
Definition: parsertypes.h:457
Definition: parsertypes.h:50
Definition: parsertypes.h:281
Definition: parsertypes.h:329
DescriptorType
The possible types of descriptors accepted.
Definition: region.h:36
Exception class that can take up to 3 arguments of any type, which will be serialized into a QString ...
Definition: gaiaexception.h:46
DescriptorType type() const
Returns the descriptor type if all segments within this region are of the same type.
Definition: region.cpp:74
Region descriptorLocation(const QString &name) const
Returns the region corresponding to the location of the specified descriptor or group of descriptors...
Definition: pointlayout.cpp:60