#include <MultiTopicImpl.h>
Classes | |
struct | SubjectFieldSpec |
Public Member Functions | |
MultiTopicImpl (const char *name, const char *type_name, const char *subscription_expression, const DDS::StringSeq &expression_parameters, DomainParticipantImpl *participant) | |
virtual | ~MultiTopicImpl () |
char * | get_subscription_expression () |
DDS::ReturnCode_t | get_expression_parameters (DDS::StringSeq ¶meters) |
DDS::ReturnCode_t | set_expression_parameters (const DDS::StringSeq ¶meters) |
const std::vector < SubjectFieldSpec > & | get_aggregation () const |
const std::vector < OPENDDS_STRING > & | get_selection () const |
template<typename Sample > | |
bool | filter (const Sample &s) const |
Private Attributes | |
OPENDDS_STRING | subscription_expression_ |
DDS::StringSeq | expression_parameters_ |
unique_ptr< FilterEvaluator > | filter_eval_ |
std::vector< SubjectFieldSpec > | aggregation_ |
std::vector< OPENDDS_STRING > | selection_ |
ACE_Recursive_Thread_Mutex | lock_ |
Concurrent access to expression_parameters_. |
Definition at line 28 of file MultiTopicImpl.h.
OpenDDS::DCPS::MultiTopicImpl::MultiTopicImpl | ( | const char * | name, | |
const char * | type_name, | |||
const char * | subscription_expression, | |||
const DDS::StringSeq & | expression_parameters, | |||
DomainParticipantImpl * | participant | |||
) |
Definition at line 39 of file MultiTopicImpl.cpp.
References aggregation_, filter_eval_, parser, OpenDDS::DCPS::reportErrors(), OpenDDS::DCPS::unique_ptr< T, Deleter >::reset(), selection_, and OpenDDS::DCPS::toString().
00043 : TopicDescriptionImpl(name, type_name, 00044 findTypeSupport(participant, type_name), 00045 participant) 00046 , subscription_expression_(subscription_expression) 00047 , expression_parameters_(expression_parameters) 00048 { 00049 const char* out = subscription_expression 00050 + std::strlen(subscription_expression); 00051 yard::SimpleTextParser parser(subscription_expression, out); 00052 if (!parser.Parse<TopicExpressionGrammar::TopicCompleteInput>()) { 00053 reportErrors(parser, subscription_expression); 00054 } 00055 00056 for (AstNode* iter = parser.GetAstRoot()->GetFirstChild(); iter; 00057 iter = iter->GetSibling()) { 00058 if (iter->TypeMatches<TopicExpressionGrammar::SubjectFieldSpec>()) { 00059 AstNode* fieldName = iter->GetFirstChild(); 00060 aggregation_.push_back(SubjectFieldSpec(toString(fieldName), 00061 toString(fieldName->GetSibling()))); 00062 } else if (iter->TypeMatches<TopicExpressionGrammar::TopicName>()) { 00063 selection_.push_back(toString(iter)); 00064 } else { 00065 filter_eval_.reset(new FilterEvaluator(iter)); 00066 } 00067 } 00068 }
OpenDDS::DCPS::MultiTopicImpl::~MultiTopicImpl | ( | ) | [virtual] |
Definition at line 70 of file MultiTopicImpl.cpp.
bool OpenDDS::DCPS::MultiTopicImpl::filter | ( | const Sample & | s | ) | const [inline] |
Definition at line 67 of file MultiTopicImpl.h.
00068 { 00069 if (!filter_eval_) return true; 00070 ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, guard, lock_, false); 00071 return filter_eval_->eval(s, expression_parameters_); 00072 }
const std::vector<SubjectFieldSpec>& OpenDDS::DCPS::MultiTopicImpl::get_aggregation | ( | ) | const [inline] |
Definition at line 56 of file MultiTopicImpl.h.
Referenced by OpenDDS::DCPS::MultiTopicDataReaderBase::init().
00057 { 00058 return aggregation_; 00059 }
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicImpl::get_expression_parameters | ( | DDS::StringSeq & | parameters | ) |
Definition at line 80 of file MultiTopicImpl.cpp.
References expression_parameters_, lock_, DDS::RETCODE_OK, and DDS::RETCODE_OUT_OF_RESOURCES.
00081 { 00082 ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, guard, lock_, 00083 DDS::RETCODE_OUT_OF_RESOURCES); 00084 params = expression_parameters_; 00085 return DDS::RETCODE_OK; 00086 }
const std::vector<OPENDDS_STRING>& OpenDDS::DCPS::MultiTopicImpl::get_selection | ( | ) | const [inline] |
Definition at line 61 of file MultiTopicImpl.h.
Referenced by OpenDDS::DCPS::MultiTopicDataReaderBase::init().
00062 { 00063 return selection_; 00064 }
char * OpenDDS::DCPS::MultiTopicImpl::get_subscription_expression | ( | ) |
Implements DDS::MultiTopic.
Definition at line 74 of file MultiTopicImpl.cpp.
References FACE::string_dup(), and subscription_expression_.
00075 { 00076 return CORBA::string_dup(subscription_expression_.c_str()); 00077 }
DDS::ReturnCode_t OpenDDS::DCPS::MultiTopicImpl::set_expression_parameters | ( | const DDS::StringSeq & | parameters | ) |
Definition at line 89 of file MultiTopicImpl.cpp.
References expression_parameters_, lock_, DDS::RETCODE_OK, and DDS::RETCODE_OUT_OF_RESOURCES.
00090 { 00091 ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, guard, lock_, 00092 DDS::RETCODE_OUT_OF_RESOURCES); 00093 expression_parameters_ = p; 00094 return DDS::RETCODE_OK; 00095 }
std::vector<SubjectFieldSpec> OpenDDS::DCPS::MultiTopicImpl::aggregation_ [private] |
Definition at line 79 of file MultiTopicImpl.h.
Referenced by MultiTopicImpl().
Definition at line 76 of file MultiTopicImpl.h.
Referenced by get_expression_parameters(), and set_expression_parameters().
Definition at line 77 of file MultiTopicImpl.h.
Referenced by MultiTopicImpl().
ACE_Recursive_Thread_Mutex OpenDDS::DCPS::MultiTopicImpl::lock_ [mutable, private] |
Concurrent access to expression_parameters_.
Definition at line 83 of file MultiTopicImpl.h.
Referenced by get_expression_parameters(), and set_expression_parameters().
std::vector<OPENDDS_STRING> OpenDDS::DCPS::MultiTopicImpl::selection_ [private] |
Definition at line 80 of file MultiTopicImpl.h.
Referenced by MultiTopicImpl().
OPENDDS_STRING OpenDDS::DCPS::MultiTopicImpl::subscription_expression_ [private] |
Definition at line 75 of file MultiTopicImpl.h.
Referenced by get_subscription_expression().