#include <FilterEvaluator.h>
Definition at line 90 of file FilterEvaluator.h.
◆ FilterEvaluator() [1/3]
| OpenDDS::DCPS::FilterEvaluator::FilterEvaluator |
( |
const char * |
filter, |
|
|
bool |
allowOrderBy |
|
) |
| |
Definition at line 42 of file FilterEvaluator.cpp.
References filter_root_, OpenDDS::DCPS::reportErrors(), OpenDDS::DCPS::toString(), and walkAst().
47 const char* out = filter + std::strlen(filter);
48 yard::SimpleTextParser parser(filter, out);
54 bool found_order_by =
false;
55 for (
AstNode* iter = parser.GetAstRoot()->GetFirstChild(); iter;
56 iter = iter->GetSibling()) {
57 if (iter->TypeMatches<
ORDERBY>()) {
58 found_order_by =
true;
59 }
else if (found_order_by && iter->TypeMatches<
FieldName>()) {
60 order_bys_.push_back(
toString(iter));
OPENDDS_STRING toString(yard::TreeBuildingParser< char >::Node *iter)
size_t number_parameters_
yard::TreeBuildingParser< char >::Node AstNode
void reportErrors(yard::SimpleTextParser &parser, const char *input)
called after parsing has failed, throws std::exception with details
EvalNode * walkAst(const AstNodeWrapper &node)
◆ FilterEvaluator() [2/3]
| OpenDDS::DCPS::FilterEvaluator::FilterEvaluator |
( |
const AstNodeWrapper & |
yardNode | ) |
|
|
explicit |
Definition at line 67 of file FilterEvaluator.cpp.
size_t number_parameters_
EvalNode * walkAst(const AstNodeWrapper &node)
◆ ~FilterEvaluator()
| OpenDDS::DCPS::FilterEvaluator::~FilterEvaluator |
( |
| ) |
|
◆ FilterEvaluator() [3/3]
| OpenDDS::DCPS::FilterEvaluator::FilterEvaluator |
( |
const FilterEvaluator & |
| ) |
|
|
private |
◆ eval() [1/2]
template<typename T >
| bool OpenDDS::DCPS::FilterEvaluator::eval |
( |
const T & |
sample, |
|
|
const DDS::StringSeq & |
params |
|
) |
| const |
|
inline |
◆ eval() [2/2]
Returns true if the serialized sample matches the filter.
Definition at line 124 of file FilterEvaluator.h.
128 SerializedForEval data(serializedSample, meta, params,
129 swap_bytes, cdr_encap, exten);
bool eval_i(DataForEval &data) const
◆ eval_i()
| bool OpenDDS::DCPS::FilterEvaluator::eval_i |
( |
DataForEval & |
data | ) |
const |
|
private |
◆ has_non_key_fields()
| bool OpenDDS::DCPS::FilterEvaluator::has_non_key_fields |
( |
const MetaStruct & |
meta | ) |
const |
◆ hasFilter()
| bool OpenDDS::DCPS::FilterEvaluator::hasFilter |
( |
| ) |
const |
◆ number_parameters()
| size_t OpenDDS::DCPS::FilterEvaluator::number_parameters |
( |
| ) |
const |
|
inline |
◆ OPENDDS_VECTOR() [1/2]
| OpenDDS::DCPS::FilterEvaluator::OPENDDS_VECTOR |
( |
OPENDDS_STRING |
| ) |
const |
◆ OPENDDS_VECTOR() [2/2]
◆ operator=()
◆ usesExtendedGrammar()
| bool OpenDDS::DCPS::FilterEvaluator::usesExtendedGrammar |
( |
| ) |
const |
|
inline |
◆ walkAst()
Definition at line 480 of file FilterEvaluator.cpp.
References OpenDDS::DCPS::arity(), OpenDDS::DCPS::child(), extended_grammar_, OpenDDS::DCPS::FilterEvaluator::Operand::isParameter(), OPENDDS_ASSERT, and walkOperand().
Referenced by FilterEvaluator().
484 const FilterEvaluator::AstNodeWrapper& op =
child(node, 1);
486 if (left->isParameter() && right->isParameter()) {
489 return new Comparison(op, left, right);
492 const FilterEvaluator::AstNodeWrapper& op =
child(node, 1);
495 return new Between(field, op, low, high);
496 }
else if (node->TypeMatches<
CondDef>() || node->TypeMatches<
Cond>()) {
497 size_t a =
arity(node);
505 const FilterEvaluator::AstNodeWrapper& op =
child(node, 1);
507 return new Logical(op, left, right);
static FilterEvaluator::AstNodeWrapper child(const FilterEvaluator::AstNodeWrapper &node, size_t idx)
#define OPENDDS_ASSERT(C)
Operand * walkOperand(const AstNodeWrapper &node)
static size_t arity(const FilterEvaluator::AstNodeWrapper &node)
EvalNode * walkAst(const AstNodeWrapper &node)
◆ walkOperand()
Definition at line 516 of file FilterEvaluator.cpp.
References OpenDDS::DCPS::arity(), OpenDDS::DCPS::child(), extended_grammar_, number_parameters_, OPENDDS_ASSERT, and OpenDDS::DCPS::toString().
Referenced by walkAst().
519 return new FieldLookup(node);
520 }
else if (node->TypeMatches<
IntVal>()) {
521 return new LiteralInt(node);
522 }
else if (node->TypeMatches<
CharVal>()) {
523 return new LiteralChar(node);
524 }
else if (node->TypeMatches<
FloatVal>()) {
525 return new LiteralFloat(node);
526 }
else if (node->TypeMatches<
StrVal>()) {
527 return new LiteralString(node);
528 }
else if (node->TypeMatches<
ParamVal>()) {
529 Parameter* retval =
new Parameter(node);
535 }
else if (node->TypeMatches<
CallDef>()) {
536 if (
arity(node) == 1) {
541 for (
AstNode* iter =
child(node, 1); iter != 0; iter = iter->GetSibling()) {
static FilterEvaluator::AstNodeWrapper child(const FilterEvaluator::AstNodeWrapper &node, size_t idx)
OPENDDS_STRING toString(yard::TreeBuildingParser< char >::Node *iter)
#define OPENDDS_ASSERT(C)
size_t number_parameters_
Operand * walkOperand(const AstNodeWrapper &node)
yard::TreeBuildingParser< char >::Node AstNode
static size_t arity(const FilterEvaluator::AstNodeWrapper &node)
◆ extended_grammar_
| bool OpenDDS::DCPS::FilterEvaluator::extended_grammar_ |
|
private |
◆ filter_root_
| EvalNode* OpenDDS::DCPS::FilterEvaluator::filter_root_ |
|
private |
◆ number_parameters_
| size_t OpenDDS::DCPS::FilterEvaluator::number_parameters_ |
|
private |
Number of parameter used in the filter, this should match the number of values passed when evaluating the filter
Definition at line 182 of file FilterEvaluator.h.
Referenced by walkOperand().
The documentation for this class was generated from the following files: