1 #ifndef ENTT_META_CONTAINER_HPP
2 #define ENTT_META_CONTAINER_HPP
8 #include <unordered_map>
9 #include <unordered_set>
12 #include "../config/config.h"
13 #include "type_traits.hpp"
22 template<
typename Container,
template<
typename>
class... Trait>
30 template<
typename Container>
44 [[nodiscard]]
static size_type size(
const Container &cont) ENTT_NOEXCEPT {
72 template<
typename Container>
84 [[nodiscard]]
static typename Container::iterator
find(Container &cont,
const key_type &key) {
85 return cont.find(key);
94 template<
typename Container>
101 [[nodiscard]]
static bool clear(Container &cont) {
102 return cont.clear(),
true;
111 template<
typename Container>
119 [[nodiscard]]
static bool erase(Container &cont,
const typename Container::key_type &key) {
120 const auto sz = cont.size();
121 return cont.erase(key) != sz;
130 template<
typename Container>
139 [[nodiscard]]
static typename Container::value_type &
get(Container &cont,
typename Container::size_type pos) {
149 template<
typename Container>
157 [[nodiscard]]
static bool insert(Container &cont,
const typename Container::key_type &key) {
158 return cont.insert(key).second;
167 template<
typename Container>
176 [[nodiscard]]
static bool insert(Container &cont,
const typename Container::key_type &key,
const typename Container::mapped_type &value) {
177 return cont.insert(std::make_pair(key, value)).second;
186 template<
typename Container>
194 [[nodiscard]]
static bool resize(Container &cont,
typename Container::size_type sz) {
195 return (cont.resize(sz),
true);
206 [[nodiscard]]
static std::pair<typename Container::iterator, bool>
insert(Container &cont,
typename Container::iterator it,
const typename Container::value_type &value) {
207 return { cont.insert(it, value),
true };
218 [[nodiscard]]
static std::pair<typename Container::iterator, bool>
erase(Container &cont,
typename Container::iterator it) {
219 return { cont.erase(it),
true };
228 template<
typename Container>
234 [[nodiscard]]
static bool resize(
const Container &,
typename Container::size_type) {
242 [[nodiscard]]
static bool clear(
const Container &) {
251 [[nodiscard]]
static std::pair<typename Container::iterator, bool>
insert(
const Container &,
typename Container::iterator,
const typename Container::value_type &) {
252 return { {},
false };
260 [[nodiscard]]
static std::pair<typename Container::iterator, bool>
erase(
const Container &,
typename Container::iterator) {
261 return { {},
false };
274 template<
typename Type,
typename... Args>
277 std::vector<Type, Args...>,
278 internal::basic_container,
279 internal::basic_dynamic_container,
280 internal::basic_sequence_container,
281 internal::dynamic_sequence_container
291 template<
typename Type, auto N>
295 internal::basic_container,
296 internal::basic_sequence_container,
297 internal::fixed_sequence_container
308 template<
typename Key,
typename Value,
typename... Args>
311 std::map<Key, Value, Args...>,
312 internal::basic_container,
313 internal::basic_associative_container,
314 internal::basic_dynamic_container,
315 internal::basic_dynamic_associative_container,
316 internal::dynamic_associative_key_value_container
331 template<
typename Key,
typename Value,
typename... Args>
334 std::unordered_map<Key, Value, Args...>,
335 internal::basic_container,
336 internal::basic_associative_container,
337 internal::basic_dynamic_container,
338 internal::basic_dynamic_associative_container,
339 internal::dynamic_associative_key_value_container
352 template<
typename Key,
typename... Args>
355 std::set<Key, Args...>,
356 internal::basic_container,
357 internal::basic_associative_container,
358 internal::basic_dynamic_container,
359 internal::basic_dynamic_associative_container,
360 internal::dynamic_associative_key_only_container
371 template<
typename Key,
typename... Args>
374 std::unordered_set<Key, Args...>,
375 internal::basic_container,
376 internal::basic_associative_container,
377 internal::basic_dynamic_container,
378 internal::basic_dynamic_associative_container,
379 internal::dynamic_associative_key_only_container