11 #ifndef smtk_resource_query_Queries_h
12 #define smtk_resource_query_Queries_h
14 #include "smtk/CoreExports.h"
16 #include "smtk/resource/query/Cache.h"
17 #include "smtk/resource/query/Container.h"
18 #include "smtk/resource/query/Factory.h"
38 : m_caches(std::move(rhs.m_caches))
39 , m_queries(std::move(rhs.m_queries))
40 , m_factory(std::move(rhs.m_factory))
46 m_caches = std::move(rhs.m_caches);
47 m_queries = std::move(rhs.m_queries);
48 m_factory = std::move(rhs.m_factory);
54 template<
typename QueryType>
57 return m_factory.registerQuery<QueryType>();
62 template<
typename QueryType>
65 return m_factory.registerQuery<QueryType>(
66 std::forward<std::function<int(
const std::size_t&)>>(priority));
71 template<
typename Tuple>
74 return m_factory.registerQueries<Tuple>();
78 template<
typename QueryType>
81 return m_factory.unregisterQuery<QueryType>();
85 template<
typename Tuple>
88 return m_factory.unregisterQueries<Tuple>();
93 template<
typename QueryType>
96 return m_factory.contains<QueryType>();
100 template<
typename QueryType>
103 std::size_t index = m_factory.indexFor<QueryType>();
108 return static_cast<QueryType&
>(m_queries.get(index));
113 auto& queries = m_queries.data();
114 auto query = m_factory.create(index);
120 auto inserted = queries.emplace(std::make_pair(index, std::move(query))).first;
121 return static_cast<QueryType&
>(*(inserted->second));
126 template<
typename CacheType>
129 return m_caches.get<CacheType>();
132 decltype(std::declval<
Container<Cache>>().data()) caches() {
return m_caches.data(); }
133 decltype(std::declval<
Container<Query>>().data()) data() {
return m_queries.data(); }
134 Factory& factory() {
return m_factory; }
137 mutable Container<Cache> m_caches;
138 mutable Container<Query> m_queries;