Skip to content
Snippets Groups Projects
Commit 1f424b8d authored by Rainer Kartmann's avatar Rainer Kartmann
Browse files

Move selectors into own files

parent e3c30f80
No related branches found
No related tags found
2 merge requests!102ArMem Memory Updates,!100Memory QueryBuilder
......@@ -45,6 +45,7 @@ set(LIB_FILES
client/MemoryClientComponentPlugin.cpp
client/QueryBuilder.cpp
client/query/selectors.cpp
component/IceMemory.cpp
component/MemoryComponentPlugin.cpp
......@@ -90,7 +91,8 @@ set(LIB_HEADERS
client/MemoryClientComponentPlugin.h
client/QueryBuilder.h
client/query/detail.h
client/query/SelectorOps.h
client/query/selectors.h
component/IceMemory.h
component/MemoryComponentPlugin.h
......
......@@ -4,173 +4,12 @@
#include <RobotAPI/interface/armem/query.h>
#include "../core/Time.h"
#include "../core/ice_conversions.h"
#include "query/detail.h"
#include "query/selectors.h"
namespace armarx::armem::client
{
class SnapshotsSelector :
public detail::ChildSelectorOps<SnapshotsSelector, data::query::EntityQueryPtr>
{
public:
std::vector<data::query::EntityQueryPtr> build() const
{
return _queries;
}
SnapshotsSelector& all(bool withData = true)
{
auto q = _addQuery<data::query::entity::All>(withData);
q.withData = withData;
return *this;
}
SnapshotsSelector& latest(bool withData = true);
SnapshotsSelector& atTime(Time timestamp, bool withData = true)
{
auto q = _addQuery<data::query::entity::Single>(withData);
toIce(q.timestamp, timestamp);
return *this;
}
SnapshotsSelector& timeRange(Time min, Time max, bool withData = true)
{
auto q = _addQuery<data::query::entity::TimeRange>(withData);
toIce(q.minTimestamp, min);
toIce(q.maxTimestamp, max);
return *this;
}
SnapshotsSelector& indexRange(long first, long last, bool withData = true)
{
auto q = _addQuery<data::query::entity::IndexRange>(withData);
q.first = first;
q.last = last;
return *this;
}
protected:
template <class DerivedQueryT>
DerivedQueryT& _addQuery(bool withData)
{
DerivedQueryT& query = ChildSelectorOps::_addQuery<DerivedQueryT>();
query.withData = withData;
return query;
}
};
class EntitiesSelector :
public detail::InnerSelectorOps<EntitiesSelector, data::query::ProviderSegmentQueryPtr, SnapshotsSelector>
{
public:
SnapshotsSelector& snapshots()
{
return _addChild();
}
EntitiesSelector& all()
{
auto q = _addQuery<data::query::provider::All>();
return *this;
}
EntitiesSelector& withName(const std::string& name);
EntitiesSelector& withNames(const std::vector<std::string>& names);
EntitiesSelector& withNameMatching(const std::string& regex);
protected:
void _setChildQueries(QueryT& query, const std::vector<ChildT::QueryT>& childQueries) const override;
};
void EntitiesSelector::_setChildQueries(ChildSelectorOps::QueryT& query, const std::vector<ChildT::QueryT>& childQueries) const
{
query->entityQueries = childQueries;
}
class ProviderSegmentSelector :
public detail::InnerSelectorOps<ProviderSegmentSelector, data::query::CoreSegmentQueryPtr, EntitiesSelector>
{
public:
EntitiesSelector& entities()
{
return _addChild();
}
ProviderSegmentSelector& all()
{
auto q = _addQuery<data::query::core::All>();
return *this;
}
ProviderSegmentSelector& withName(const std::string& name);
ProviderSegmentSelector& withNames(const std::vector<std::string>& names);
ProviderSegmentSelector& withNameMatching(const std::string& regex);
protected:
void _setChildQueries(QueryT& query, const std::vector<ChildT::QueryT>& childQueries) const override;
};
void ProviderSegmentSelector::_setChildQueries(ChildSelectorOps::QueryT& query, const std::vector<ChildT::QueryT>& childQueries) const
{
query->providerSegmentQueries = childQueries;
}
class CoreSegmentSelector :
public detail::InnerSelectorOps<CoreSegmentSelector, data::query::MemoryQueryPtr, ProviderSegmentSelector>
{
public:
ProviderSegmentSelector& providerSegments()
{
return _addChild();
}
CoreSegmentSelector& all()
{
auto q = _addQuery<data::query::memory::All>();
return *this;
}
CoreSegmentSelector& withName(const std::string& name);
CoreSegmentSelector& withNames(const std::vector<std::string>& names);
CoreSegmentSelector& withNameMatching(const std::string& regex);
protected:
void _setChildQueries(QueryT& query, const std::vector<ChildT::QueryT>& childQueries) const override;
};
void CoreSegmentSelector::_setChildQueries(data::query::MemoryQueryPtr& query, const std::vector<ChildT::QueryT>& childQueries) const
{
query->coreSegmentQueries = childQueries;
}
// ToDo: Make a memory selector (but this level is not in ice, yet)
class QueryBuilder :
public detail::ParentSelectorOps<QueryBuilder, CoreSegmentSelector>
......
......@@ -30,6 +30,8 @@ namespace armarx::armem::client::detail
};
template <class _DerivedT, class _ChildT>
class ParentSelectorOps
{
......@@ -50,10 +52,11 @@ namespace armarx::armem::client::detail
};
template <class DerivedT, class QueryT, class ChildT>
class InnerSelectorOps :
public ParentSelectorOps<DerivedT, ChildT>,
public ChildSelectorOps<DerivedT, QueryT>
public ParentSelectorOps<DerivedT, ChildT>,
public ChildSelectorOps<DerivedT, QueryT>
{
public:
......
#include "selectors.h"
namespace armarx::armem::client
{
void EntitiesSelector::_setChildQueries(data::query::ProviderSegmentQueryPtr& query, const data::query::EntityQuerySeq& childQueries) const
{
query->entityQueries = childQueries;
}
void ProviderSegmentSelector::_setChildQueries(data::query::CoreSegmentQueryPtr& query, const data::query::ProviderSegmentQuerySeq& childQueries) const
{
query->providerSegmentQueries = childQueries;
}
void CoreSegmentSelector::_setChildQueries(data::query::MemoryQueryPtr& query, const data::query::CoreSegmentQuerySeq& childQueries) const
{
query->coreSegmentQueries = childQueries;
}
}
#pragma once
#include <vector>
#include <RobotAPI/interface/armem/query.h>
#include <RobotAPI/libraries/armem/core/Time.h>
#include <RobotAPI/libraries/armem/core/ice_conversions.h>
#include "SelectorOps.h"
namespace armarx::armem::client
{
class SnapshotsSelector :
public detail::ChildSelectorOps<SnapshotsSelector, data::query::EntityQueryPtr>
{
public:
std::vector<data::query::EntityQueryPtr> build() const
{
return _queries;
}
SnapshotsSelector& all(bool withData = true)
{
auto q = _addQuery<data::query::entity::All>(withData);
q.withData = withData;
return *this;
}
SnapshotsSelector& latest(bool withData = true);
SnapshotsSelector& atTime(Time timestamp, bool withData = true)
{
auto q = _addQuery<data::query::entity::Single>(withData);
toIce(q.timestamp, timestamp);
return *this;
}
SnapshotsSelector& timeRange(Time min, Time max, bool withData = true)
{
auto q = _addQuery<data::query::entity::TimeRange>(withData);
toIce(q.minTimestamp, min);
toIce(q.maxTimestamp, max);
return *this;
}
SnapshotsSelector& indexRange(long first, long last, bool withData = true)
{
auto q = _addQuery<data::query::entity::IndexRange>(withData);
q.first = first;
q.last = last;
return *this;
}
protected:
template <class DerivedQueryT>
DerivedQueryT& _addQuery(bool withData)
{
DerivedQueryT& query = ChildSelectorOps::_addQuery<DerivedQueryT>();
query.withData = withData;
return query;
}
};
class EntitiesSelector :
public detail::InnerSelectorOps<EntitiesSelector, data::query::ProviderSegmentQueryPtr, SnapshotsSelector>
{
public:
SnapshotsSelector& snapshots()
{
return _addChild();
}
EntitiesSelector& all()
{
auto q = _addQuery<data::query::provider::All>();
return *this;
}
EntitiesSelector& withName(const std::string& name);
EntitiesSelector& withNames(const std::vector<std::string>& names);
EntitiesSelector& withNameMatching(const std::string& regex);
protected:
void _setChildQueries(data::query::ProviderSegmentQueryPtr& query, const data::query::EntityQuerySeq& childQueries) const override;
};
class ProviderSegmentSelector :
public detail::InnerSelectorOps<ProviderSegmentSelector, data::query::CoreSegmentQueryPtr, EntitiesSelector>
{
public:
EntitiesSelector& entities()
{
return _addChild();
}
ProviderSegmentSelector& all()
{
auto q = _addQuery<data::query::core::All>();
return *this;
}
ProviderSegmentSelector& withName(const std::string& name);
ProviderSegmentSelector& withNames(const std::vector<std::string>& names);
ProviderSegmentSelector& withNameMatching(const std::string& regex);
protected:
void _setChildQueries(data::query::CoreSegmentQueryPtr& query, const data::query::ProviderSegmentQuerySeq& childQueries) const override;
};
class CoreSegmentSelector :
public detail::InnerSelectorOps<CoreSegmentSelector, data::query::MemoryQueryPtr, ProviderSegmentSelector>
{
public:
ProviderSegmentSelector& providerSegments()
{
return _addChild();
}
CoreSegmentSelector& all()
{
auto q = _addQuery<data::query::memory::All>();
return *this;
}
CoreSegmentSelector& withName(const std::string& name);
CoreSegmentSelector& withNames(const std::vector<std::string>& names);
CoreSegmentSelector& withNameMatching(const std::string& regex);
protected:
void _setChildQueries(data::query::MemoryQueryPtr& query, const data::query::CoreSegmentQuerySeq& childQueries) const override;
};
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment