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 
14  using QueryTarget = armem::query::data::QueryTarget::QueryTargetEnum;
15 
16  /**
17  * @brief Base class for memory query processors.
18  */
19  template <class DataT, class ResultT, class QueryT>
21  {
22  public:
24  using QuerySeqT = std::vector<QueryPtrT>;
25 
26 
27  public:
28  virtual ~BaseQueryProcessorBase() = default;
29 
30  ResultT
31  process(const QueryT& query, const DataT& data) const
32  {
33  ResultT result{data.id()};
34  this->process(result, query, data);
35  return result;
36  }
37 
38  ResultT
39  process(const QueryPtrT& query, const DataT& data) const
40  {
41  return this->process(*query, *data);
42  }
43 
44  ResultT
45  process(const QuerySeqT& queries, const DataT& data) const
46  {
47  ResultT result{data.id()};
48  this->process(result, queries, data);
49  return result;
50  }
51 
52  void
53  process(ResultT& result, const QuerySeqT& queries, const DataT& data) const
54  {
55  if (queries.empty())
56  {
57  return;
58  }
59 
60  for (const auto& query : queries)
61  {
62  this->process(result, *query, data);
63  }
64  }
65 
66  /**
67  * @brief Process the query and populate `result`.
68  *
69  * @param result The result container.
70  * @param query The query.
71  * @param data The source container.
72  */
73  virtual void process(ResultT& result, const QueryT& query, const DataT& data) const = 0;
74  };
75 
76 
77 } // 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:39
armarx::armem::server::query_proc::base::BaseQueryProcessorBase
Base class for memory query processors.
Definition: BaseQueryProcessorBase.h:20
armarx::armem::server::query_proc::base::BaseQueryProcessorBase::~BaseQueryProcessorBase
virtual ~BaseQueryProcessorBase()=default
IceInternal::Handle
Definition: forward_declarations.h:8
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:45
armarx::armem::server::query_proc::base::BaseQueryProcessorBase::process
ResultT process(const QueryT &query, const DataT &data) const
Definition: BaseQueryProcessorBase.h:31
armarx::armem::server::query_proc::base::BaseQueryProcessorBase::process
void process(ResultT &result, const QuerySeqT &queries, const DataT &data) const
Definition: BaseQueryProcessorBase.h:53
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:24
armarx::armem::server::query_proc::base::QueryTarget
armem::query::data::QueryTarget::QueryTargetEnum QueryTarget
Definition: BaseQueryProcessorBase.h:14
QueryTarget.h