OpenDDS::DCPS::MultiTopicImpl Class Reference

#include <MultiTopicImpl.h>

Inheritance diagram for OpenDDS::DCPS::MultiTopicImpl:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::MultiTopicImpl:
Collaboration graph
[legend]

List of all members.

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 &parameters)
DDS::ReturnCode_t set_expression_parameters (const DDS::StringSeq &parameters)
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< FilterEvaluatorfilter_eval_
std::vector< SubjectFieldSpecaggregation_
std::vector< OPENDDS_STRING > selection_
ACE_Recursive_Thread_Mutex lock_
 Concurrent access to expression_parameters_.

Detailed Description

Definition at line 28 of file MultiTopicImpl.h.


Constructor & Destructor Documentation

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 }

Here is the call graph for this function:

OpenDDS::DCPS::MultiTopicImpl::~MultiTopicImpl (  )  [virtual]

Definition at line 70 of file MultiTopicImpl.cpp.

00071 {
00072 }


Member Function Documentation

template<typename Sample >
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   }

Here is the caller graph for this function:

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   }

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

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 }


Member Data Documentation

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().

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().

Definition at line 75 of file MultiTopicImpl.h.

Referenced by get_subscription_expression().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1