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>;
29
30 public:
31 virtual ~BaseQueryProcessorBase() = default;
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 }
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
ResultT process(const QueryPtrT &query, const DataT &data) const
ResultT process(const QueryT &query, const DataT &data) const
void process(ResultT &result, const QuerySeqT &queries, const DataT &data) const
virtual void process(ResultT &result, const QueryT &query, const DataT &data) const =0
Process the query and populate result.
ResultT process(const QuerySeqT &queries, const DataT &data) const
armem::query::data::QueryTarget::QueryTargetEnum QueryTarget
#define ARMARX_TRACE
Definition trace.h:77