#include <FilterEvaluator.h>
Definition at line 91 of file FilterEvaluator.h.
◆ FilterEvaluator() [1/3]
OpenDDS::DCPS::FilterEvaluator::FilterEvaluator |
( |
const char * |
filter, |
|
|
bool |
allowOrderBy |
|
) |
| |
Definition at line 43 of file FilterEvaluator.cpp.
References filter_root_, OpenDDS::DCPS::reportErrors(), OpenDDS::DCPS::toString(), and walkAst().
48 const char* out = filter + std::strlen(filter);
49 yard::SimpleTextParser parser(filter, out);
55 bool found_order_by =
false;
56 for (
AstNode* iter = parser.GetAstRoot()->GetFirstChild(); iter;
57 iter = iter->GetSibling()) {
58 if (iter->TypeMatches<
ORDERBY>()) {
59 found_order_by =
true;
60 }
else if (found_order_by && iter->TypeMatches<
FieldName>()) {
61 order_bys_.push_back(
toString(iter));
yard::TreeBuildingParser< char >::Node AstNode
size_t number_parameters_
OPENDDS_STRING toString(yard::TreeBuildingParser< char >::Node *iter)
EvalNode * walkAst(const AstNodeWrapper &node)
void reportErrors(yard::SimpleTextParser &parser, const char *input)
called after parsing has failed, throws std::exception with details
◆ FilterEvaluator() [2/3]
OpenDDS::DCPS::FilterEvaluator::FilterEvaluator |
( |
const AstNodeWrapper & |
yardNode | ) |
|
|
explicit |
Definition at line 68 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 125 of file FilterEvaluator.h.
129 SerializedForEval data(serializedSample, typeSupport, params,
encoding);
bool eval_i(DataForEval &data) const
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
◆ 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 TypeSupportImpl & |
ts | ) |
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 492 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().
496 const FilterEvaluator::AstNodeWrapper& op =
child(node, 1);
498 if (left->isParameter() && right->isParameter()) {
501 return new Comparison(op, left, right);
504 const FilterEvaluator::AstNodeWrapper& op =
child(node, 1);
507 return new Between(field, op, low, high);
508 }
else if (node->TypeMatches<
CondDef>() || node->TypeMatches<
Cond>()) {
509 size_t a =
arity(node);
517 const FilterEvaluator::AstNodeWrapper& op =
child(node, 1);
519 return new Logical(op, left, right);
#define OPENDDS_ASSERT(C)
static FilterEvaluator::AstNodeWrapper child(const FilterEvaluator::AstNodeWrapper &node, size_t idx)
EvalNode * walkAst(const AstNodeWrapper &node)
static size_t arity(const FilterEvaluator::AstNodeWrapper &node)
Operand * walkOperand(const AstNodeWrapper &node)
◆ walkOperand()
Definition at line 528 of file FilterEvaluator.cpp.
References OpenDDS::DCPS::arity(), OpenDDS::DCPS::child(), extended_grammar_, number_parameters_, OPENDDS_ASSERT, and OpenDDS::DCPS::toString().
Referenced by walkAst().
531 return new FieldLookup(node);
532 }
else if (node->TypeMatches<
IntVal>()) {
533 return new LiteralInt(node);
534 }
else if (node->TypeMatches<
CharVal>()) {
535 return new LiteralChar(node);
536 }
else if (node->TypeMatches<
FloatVal>()) {
537 return new LiteralFloat(node);
538 }
else if (node->TypeMatches<
StrVal>()) {
539 return new LiteralString(node);
540 }
else if (node->TypeMatches<
ParamVal>()) {
541 Parameter* retval =
new Parameter(node);
547 }
else if (node->TypeMatches<
CallDef>()) {
548 if (
arity(node) == 1) {
553 for (
AstNode* iter =
child(node, 1); iter != 0; iter = iter->GetSibling()) {
yard::TreeBuildingParser< char >::Node AstNode
size_t number_parameters_
#define OPENDDS_ASSERT(C)
static FilterEvaluator::AstNodeWrapper child(const FilterEvaluator::AstNodeWrapper &node, size_t idx)
OPENDDS_STRING toString(yard::TreeBuildingParser< char >::Node *iter)
static size_t arity(const FilterEvaluator::AstNodeWrapper &node)
Operand * walkOperand(const 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 parameters 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: