BaseQueryProcessorBase.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <set>
4 #include <vector>
5 
6 #include <Ice/Handle.h>
7 
8 #include <RobotAPI/interface/armem/query.h>
10 
12 
13 
15 {
16 
17  using QueryTarget = armem::query::data::QueryTarget::QueryTargetEnum;
18 
19  /**
20  * @brief Base class for memory query processors.
21  */
22  template <class DataT, class ResultT, class QueryT>
24  {
25  public:
27  using QuerySeqT = std::vector<QueryPtrT>;
28 
29 
30  public:
31  virtual ~BaseQueryProcessorBase() = default;
32 
33  ResultT
34  process(const QueryT& query, const DataT& data) const
35  {
37 
38  ResultT result{data.id()};
39  this->process(result, query, data);
40  return result;
41  }
42 
43  ResultT
44  process(const QueryPtrT& query, const DataT& data) const
45  {
47 
48  return this->process(*query, *data);
49  }
50 
51  ResultT
52  process(const QuerySeqT& queries, const DataT& data) const
53  {
55 
56  ResultT result{data.id()};
57  this->process(result, queries, data);
58  return result;
59  }
60 
61  void
62  process(ResultT& result, const QuerySeqT& queries, const DataT& data) const
63  {
65 
66  if (queries.empty())
67  {
68  return;
69  }
70 
71  for (const auto& query : queries)
72  {
73  this->process(result, *query, data);
74  }
75  }
76 
77  /**
78  * @brief Process the query and populate `result`.
79  *
80  * @param result The result container.
81  * @param query The query.
82  * @param data The source container.
83  */
84  virtual void process(ResultT& result, const QueryT& query, const DataT& data) const = 0;
85  };
86 
87 
88 } // namespace armarx::armem::server::query_proc::base
armarx::armem::server::query_proc::base
Definition: BaseQueryProcessorBase.cpp:5
armarx::armem::server::query_proc::base::BaseQueryProcessorBase::process
ResultT process(const QueryPtrT &query, const DataT &data) const
Definition: BaseQueryProcessorBase.h:44
armarx::armem::server::query_proc::base::BaseQueryProcessorBase
Base class for memory query processors.
Definition: BaseQueryProcessorBase.h:23
armarx::armem::server::query_proc::base::BaseQueryProcessorBase::~BaseQueryProcessorBase
virtual ~BaseQueryProcessorBase()=default
IceInternal::Handle
Definition: forward_declarations.h:8
ARMARX_TRACE
#define ARMARX_TRACE
Definition: trace.h:77
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
armarx::armem::server::query_proc::base::BaseQueryProcessorBase::process
ResultT process(const QuerySeqT &queries, const DataT &data) const
Definition: BaseQueryProcessorBase.h:52
Logging.h
armarx::armem::server::query_proc::base::BaseQueryProcessorBase::process
ResultT process(const QueryT &query, const DataT &data) const
Definition: BaseQueryProcessorBase.h:34
armarx::armem::server::query_proc::base::BaseQueryProcessorBase::process
void process(ResultT &result, const QuerySeqT &queries, const DataT &data) const
Definition: BaseQueryProcessorBase.h:62
armarx::armem::server::query_proc::base::BaseQueryProcessorBase< armem::server::ltm::ProviderSegment, armem::wm::ProviderSegment, armem::query::data::ProviderSegmentQuery >::QuerySeqT
std::vector< QueryPtrT > QuerySeqT
Definition: BaseQueryProcessorBase.h:27
armarx::armem::server::query_proc::base::QueryTarget
armem::query::data::QueryTarget::QueryTargetEnum QueryTarget
Definition: BaseQueryProcessorBase.h:17
QueryTarget.h