CoreSegmentQueryProcessorBase.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <regex>
4 
5 #include <RobotAPI/interface/armem/query.h>
7 
9 
11 {
12 
13  /**
14  * @brief Handles memory queries.
15  */
16  template <class _CoreSegmentT, class _ResultCoreSegmentT, class _ChildProcessorT>
18  public BaseQueryProcessorBase<_CoreSegmentT,
19  _ResultCoreSegmentT,
20  armem::query::data::CoreSegmentQuery>
21  {
22  protected:
23  using Base = BaseQueryProcessorBase<_CoreSegmentT,
24  _ResultCoreSegmentT,
25  armem::query::data::CoreSegmentQuery>;
26 
27  public:
28  using CoreSegmentT = _CoreSegmentT;
29  using ProviderSegmentT = typename CoreSegmentT::ProviderSegmentT;
30 
31  using ResultCoreSegmentT = _ResultCoreSegmentT;
32  using ResultProviderSegmentT = typename ResultCoreSegmentT::ProviderSegmentT;
33 
34  using ChildProcessorT = _ChildProcessorT;
35 
36 
37  public:
39  {
40  }
41 
44  {
45  }
46 
47  using Base::process;
48 
49  virtual void
51  const armem::query::data::CoreSegmentQuery& query,
52  const CoreSegmentT& coreSegment) const override
53  {
54  if (auto q = dynamic_cast<const armem::query::data::core::All*>(&query))
55  {
56  process(result, *q, coreSegment);
57  }
58  else if (auto q = dynamic_cast<const armem::query::data::core::Single*>(&query))
59  {
60  process(result, *q, coreSegment);
61  }
62  else if (auto q = dynamic_cast<const armem::query::data::core::Regex*>(&query))
63  {
64  process(result, *q, coreSegment);
65  }
66  else
67  {
68  throw armem::error::UnknownQueryType("core segment", query);
69  }
70  }
71 
72  virtual void
74  const armem::query::data::core::All& query,
75  const CoreSegmentT& coreSegment) const
76  {
77  coreSegment.forEachProviderSegment(
78  [this, &query, &result](const ProviderSegmentT& providerSegment)
79  { this->_processResult(result, providerSegment, query); });
80  }
81 
82  virtual void
84  const armem::query::data::core::Single& query,
85  const CoreSegmentT& coreSegment) const
86  {
87  if (auto providerSegment = coreSegment.findProviderSegment(query.providerSegmentName))
88  {
89  this->_processResult(result, *providerSegment, query);
90  }
91  }
92 
93  virtual void
95  const armem::query::data::core::Regex& query,
96  const CoreSegmentT& coreSegment) const
97  {
98  const std::regex regex(query.providerSegmentNameRegex);
99  coreSegment.forEachProviderSegment(
100  [this, &result, &query, &regex](const ProviderSegmentT& providerSegment)
101  {
102  if (std::regex_search(providerSegment.name(), regex))
103  {
104  this->_processResult(result, providerSegment, query);
105  }
106  });
107  }
108 
109 
110  protected:
111  void
113  const ProviderSegmentT& providerSegment,
114  const armem::query::data::CoreSegmentQuery& query) const
115  {
116  ResultProviderSegmentT* child = result.findProviderSegment(providerSegment.name());
117  if (child == nullptr)
118  {
119  child =
120  &result.addProviderSegment(providerSegment.name(), providerSegment.aronType());
121  }
122  childProcessor.process(*child, query.providerSegmentQueries, providerSegment);
123  }
124 
125 
126  protected:
128  };
129 } // namespace armarx::armem::server::query_proc::base
armarx::armem::server::query_proc::base::CoreSegmentQueryProcessorBase::ResultCoreSegmentT
_ResultCoreSegmentT ResultCoreSegmentT
Definition: CoreSegmentQueryProcessorBase.h:31
armarx::armem::server::query_proc::base
Definition: BaseQueryProcessorBase.cpp:5
armarx::armem::server::query_proc::base::CoreSegmentQueryProcessorBase::ChildProcessorT
_ChildProcessorT ChildProcessorT
Definition: CoreSegmentQueryProcessorBase.h:34
armarx::armem::server::query_proc::base::CoreSegmentQueryProcessorBase::ResultProviderSegmentT
typename ResultCoreSegmentT::ProviderSegmentT ResultProviderSegmentT
Definition: CoreSegmentQueryProcessorBase.h:32
BaseQueryProcessorBase.h
armarx::armem::server::query_proc::wm::detail::CoreSegmentQueryProcessorBase< server::wm::CoreSegment, armem::wm::CoreSegment, ProviderSegmentQueryProcessor >::ChildProcessorT
typename Base::ChildProcessorT ChildProcessorT
Definition: CoreSegmentQueryProcessorBase.h:26
armarx::armem::server::query_proc::base::BaseQueryProcessorBase
Base class for memory query processors.
Definition: BaseQueryProcessorBase.h:20
armarx::armem::server::query_proc::base::CoreSegmentQueryProcessorBase::CoreSegmentT
_CoreSegmentT CoreSegmentT
Definition: CoreSegmentQueryProcessorBase.h:28
armarx::armem::server::query_proc::base::CoreSegmentQueryProcessorBase
Handles memory queries.
Definition: CoreSegmentQueryProcessorBase.h:17
armarx::armem::server::query_proc::base::CoreSegmentQueryProcessorBase::_processResult
void _processResult(ResultCoreSegmentT &result, const ProviderSegmentT &providerSegment, const armem::query::data::CoreSegmentQuery &query) const
Definition: CoreSegmentQueryProcessorBase.h:112
armarx::armem::server::query_proc::wm::detail::CoreSegmentQueryProcessorBase< server::wm::CoreSegment, armem::wm::CoreSegment, ProviderSegmentQueryProcessor >::ResultCoreSegmentT
typename Base::ResultCoreSegmentT ResultCoreSegmentT
Definition: CoreSegmentQueryProcessorBase.h:24
error.h
armarx::armem::server::query_proc::wm::detail::CoreSegmentQueryProcessorBase< server::wm::CoreSegment, armem::wm::CoreSegment, ProviderSegmentQueryProcessor >::ProviderSegmentT
typename Base::ProviderSegmentT ProviderSegmentT
Definition: CoreSegmentQueryProcessorBase.h:23
q
#define q
armarx::armem::server::query_proc::base::CoreSegmentQueryProcessorBase::ProviderSegmentT
typename CoreSegmentT::ProviderSegmentT ProviderSegmentT
Definition: CoreSegmentQueryProcessorBase.h:29
armarx::armem::server::query_proc::wm::detail::CoreSegmentQueryProcessorBase< server::wm::CoreSegment, armem::wm::CoreSegment, ProviderSegmentQueryProcessor >::CoreSegmentT
typename Base::CoreSegmentT CoreSegmentT
Definition: CoreSegmentQueryProcessorBase.h:22
armarx::armem::server::query_proc::base::CoreSegmentQueryProcessorBase::childProcessor
ChildProcessorT childProcessor
Definition: CoreSegmentQueryProcessorBase.h:127
armarx::armem::server::query_proc::base::CoreSegmentQueryProcessorBase::process
virtual void process(ResultCoreSegmentT &result, const armem::query::data::CoreSegmentQuery &query, const CoreSegmentT &coreSegment) const override
Process the query and populate result.
Definition: CoreSegmentQueryProcessorBase.h:50
armarx::armem::server::query_proc::base::BaseQueryProcessorBase< _CoreSegmentT, _ResultCoreSegmentT, armem::query::data::CoreSegmentQuery >::process
_ResultCoreSegmentT process(const armem::query::data::CoreSegmentQuery &query, const _CoreSegmentT &data) const
Definition: BaseQueryProcessorBase.h:31
armarx::armem::server::query_proc::base::CoreSegmentQueryProcessorBase::CoreSegmentQueryProcessorBase
CoreSegmentQueryProcessorBase()
Definition: CoreSegmentQueryProcessorBase.h:38
armarx::armem::error::UnknownQueryType
Indicates that an entity's history was queried, but is empty.
Definition: ArMemError.h:173