|
@@ -36,8 +36,12 @@ public:
|
|
|
/*! @brief Meta iterator type. */
|
|
/*! @brief Meta iterator type. */
|
|
|
using iterator = meta_iterator;
|
|
using iterator = meta_iterator;
|
|
|
|
|
|
|
|
- /*! @brief Default constructor. */
|
|
|
|
|
- meta_sequence_container() noexcept = default;
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * @brief Context aware constructor.
|
|
|
|
|
+ * @param area The context from which to search for meta types.
|
|
|
|
|
+ */
|
|
|
|
|
+ meta_sequence_container(const meta_ctx &area = locator<meta_ctx>::value_or()) noexcept
|
|
|
|
|
+ : ctx{&area} {}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @brief Rebinds a proxy object to a sequence container type.
|
|
* @brief Rebinds a proxy object to a sequence container type.
|
|
@@ -46,7 +50,7 @@ public:
|
|
|
*/
|
|
*/
|
|
|
template<typename Type>
|
|
template<typename Type>
|
|
|
void rebind(any instance) noexcept {
|
|
void rebind(any instance) noexcept {
|
|
|
- value_type_node = &internal::resolve_TODO<typename Type::value_type>;
|
|
|
|
|
|
|
+ value_type_node = &internal::resolve<typename Type::value_type>;
|
|
|
size_fn = &meta_sequence_container_traits<Type>::size;
|
|
size_fn = &meta_sequence_container_traits<Type>::size;
|
|
|
resize_fn = &meta_sequence_container_traits<Type>::resize;
|
|
resize_fn = &meta_sequence_container_traits<Type>::resize;
|
|
|
iter_fn = &meta_sequence_container_traits<Type>::iter;
|
|
iter_fn = &meta_sequence_container_traits<Type>::iter;
|
|
@@ -66,7 +70,8 @@ public:
|
|
|
[[nodiscard]] inline explicit operator bool() const noexcept;
|
|
[[nodiscard]] inline explicit operator bool() const noexcept;
|
|
|
|
|
|
|
|
private:
|
|
private:
|
|
|
- internal::meta_type_node (*value_type_node)(){};
|
|
|
|
|
|
|
+ const meta_ctx *ctx{};
|
|
|
|
|
+ internal::meta_type_node (*value_type_node)(const internal::meta_context &){};
|
|
|
size_type (*size_fn)(const any &) noexcept {};
|
|
size_type (*size_fn)(const any &) noexcept {};
|
|
|
bool (*resize_fn)(any &, size_type){};
|
|
bool (*resize_fn)(any &, size_type){};
|
|
|
iterator (*iter_fn)(any &, const bool){};
|
|
iterator (*iter_fn)(any &, const bool){};
|
|
@@ -84,8 +89,12 @@ public:
|
|
|
/*! @brief Meta iterator type. */
|
|
/*! @brief Meta iterator type. */
|
|
|
using iterator = meta_iterator;
|
|
using iterator = meta_iterator;
|
|
|
|
|
|
|
|
- /*! @brief Default constructor. */
|
|
|
|
|
- meta_associative_container() noexcept = default;
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * @brief Context aware constructor.
|
|
|
|
|
+ * @param area The context from which to search for meta types.
|
|
|
|
|
+ */
|
|
|
|
|
+ meta_associative_container(const meta_ctx &area = locator<meta_ctx>::value_or()) noexcept
|
|
|
|
|
+ : ctx{&area} {}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @brief Rebinds a proxy object to an associative container type.
|
|
* @brief Rebinds a proxy object to an associative container type.
|
|
@@ -95,12 +104,12 @@ public:
|
|
|
template<typename Type>
|
|
template<typename Type>
|
|
|
void rebind(any instance) noexcept {
|
|
void rebind(any instance) noexcept {
|
|
|
if constexpr(!meta_associative_container_traits<Type>::key_only) {
|
|
if constexpr(!meta_associative_container_traits<Type>::key_only) {
|
|
|
- mapped_type_node = &internal::resolve_TODO<typename Type::mapped_type>;
|
|
|
|
|
|
|
+ mapped_type_node = &internal::resolve<typename Type::mapped_type>;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
key_only_container = meta_associative_container_traits<Type>::key_only;
|
|
key_only_container = meta_associative_container_traits<Type>::key_only;
|
|
|
- key_type_node = &internal::resolve_TODO<typename Type::key_type>;
|
|
|
|
|
- value_type_node = &internal::resolve_TODO<typename Type::value_type>;
|
|
|
|
|
|
|
+ key_type_node = &internal::resolve<typename Type::key_type>;
|
|
|
|
|
+ value_type_node = &internal::resolve<typename Type::value_type>;
|
|
|
size_fn = &meta_associative_container_traits<Type>::size;
|
|
size_fn = &meta_associative_container_traits<Type>::size;
|
|
|
clear_fn = &meta_associative_container_traits<Type>::clear;
|
|
clear_fn = &meta_associative_container_traits<Type>::clear;
|
|
|
iter_fn = &meta_associative_container_traits<Type>::iter;
|
|
iter_fn = &meta_associative_container_traits<Type>::iter;
|
|
@@ -123,10 +132,11 @@ public:
|
|
|
[[nodiscard]] inline explicit operator bool() const noexcept;
|
|
[[nodiscard]] inline explicit operator bool() const noexcept;
|
|
|
|
|
|
|
|
private:
|
|
private:
|
|
|
|
|
+ const meta_ctx *ctx{};
|
|
|
bool key_only_container{};
|
|
bool key_only_container{};
|
|
|
- internal::meta_type_node (*key_type_node)(){};
|
|
|
|
|
- internal::meta_type_node (*mapped_type_node)(){};
|
|
|
|
|
- internal::meta_type_node (*value_type_node)(){};
|
|
|
|
|
|
|
+ internal::meta_type_node (*key_type_node)(const internal::meta_context &){};
|
|
|
|
|
+ internal::meta_type_node (*mapped_type_node)(const internal::meta_context &){};
|
|
|
|
|
+ internal::meta_type_node (*value_type_node)(const internal::meta_context &){};
|
|
|
size_type (*size_fn)(const any &) noexcept {};
|
|
size_type (*size_fn)(const any &) noexcept {};
|
|
|
bool (*clear_fn)(any &){};
|
|
bool (*clear_fn)(any &){};
|
|
|
iterator (*iter_fn)(any &, const bool){};
|
|
iterator (*iter_fn)(any &, const bool){};
|
|
@@ -503,7 +513,7 @@ public:
|
|
|
*/
|
|
*/
|
|
|
[[nodiscard]] meta_sequence_container as_sequence_container() noexcept {
|
|
[[nodiscard]] meta_sequence_container as_sequence_container() noexcept {
|
|
|
any detached = storage.as_ref();
|
|
any detached = storage.as_ref();
|
|
|
- meta_sequence_container proxy;
|
|
|
|
|
|
|
+ meta_sequence_container proxy{*ctx};
|
|
|
vtable(operation::seq, detached, &proxy);
|
|
vtable(operation::seq, detached, &proxy);
|
|
|
return proxy;
|
|
return proxy;
|
|
|
}
|
|
}
|
|
@@ -511,7 +521,7 @@ public:
|
|
|
/*! @copydoc as_sequence_container */
|
|
/*! @copydoc as_sequence_container */
|
|
|
[[nodiscard]] meta_sequence_container as_sequence_container() const noexcept {
|
|
[[nodiscard]] meta_sequence_container as_sequence_container() const noexcept {
|
|
|
any detached = storage.as_ref();
|
|
any detached = storage.as_ref();
|
|
|
- meta_sequence_container proxy;
|
|
|
|
|
|
|
+ meta_sequence_container proxy{*ctx};
|
|
|
vtable(operation::seq, detached, &proxy);
|
|
vtable(operation::seq, detached, &proxy);
|
|
|
return proxy;
|
|
return proxy;
|
|
|
}
|
|
}
|
|
@@ -522,7 +532,7 @@ public:
|
|
|
*/
|
|
*/
|
|
|
[[nodiscard]] meta_associative_container as_associative_container() noexcept {
|
|
[[nodiscard]] meta_associative_container as_associative_container() noexcept {
|
|
|
any detached = storage.as_ref();
|
|
any detached = storage.as_ref();
|
|
|
- meta_associative_container proxy;
|
|
|
|
|
|
|
+ meta_associative_container proxy{*ctx};
|
|
|
vtable(operation::assoc, detached, &proxy);
|
|
vtable(operation::assoc, detached, &proxy);
|
|
|
return proxy;
|
|
return proxy;
|
|
|
}
|
|
}
|
|
@@ -530,7 +540,7 @@ public:
|
|
|
/*! @copydoc as_associative_container */
|
|
/*! @copydoc as_associative_container */
|
|
|
[[nodiscard]] meta_associative_container as_associative_container() const noexcept {
|
|
[[nodiscard]] meta_associative_container as_associative_container() const noexcept {
|
|
|
any detached = storage.as_ref();
|
|
any detached = storage.as_ref();
|
|
|
- meta_associative_container proxy;
|
|
|
|
|
|
|
+ meta_associative_container proxy{*ctx};
|
|
|
vtable(operation::assoc, detached, &proxy);
|
|
vtable(operation::assoc, detached, &proxy);
|
|
|
return proxy;
|
|
return proxy;
|
|
|
}
|
|
}
|
|
@@ -1761,8 +1771,7 @@ private:
|
|
|
* @return The meta value type of the container.
|
|
* @return The meta value type of the container.
|
|
|
*/
|
|
*/
|
|
|
[[nodiscard]] inline meta_type meta_sequence_container::value_type() const noexcept {
|
|
[[nodiscard]] inline meta_type meta_sequence_container::value_type() const noexcept {
|
|
|
- auto &&ctx_TODO = locator<meta_ctx>::value_or();
|
|
|
|
|
- return value_type_node ? meta_type{ctx_TODO, value_type_node()} : meta_type{};
|
|
|
|
|
|
|
+ return value_type_node ? meta_type{*ctx, value_type_node(internal::meta_context::from(*ctx))} : meta_type{};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1858,8 +1867,7 @@ inline meta_sequence_container::iterator meta_sequence_container::erase(iterator
|
|
|
* @return The meta key type of the a container.
|
|
* @return The meta key type of the a container.
|
|
|
*/
|
|
*/
|
|
|
[[nodiscard]] inline meta_type meta_associative_container::key_type() const noexcept {
|
|
[[nodiscard]] inline meta_type meta_associative_container::key_type() const noexcept {
|
|
|
- auto &&ctx_TODO = locator<meta_ctx>::value_or();
|
|
|
|
|
- return key_type_node ? meta_type{ctx_TODO, key_type_node()} : meta_type{};
|
|
|
|
|
|
|
+ return key_type_node ? meta_type{*ctx, key_type_node(internal::meta_context::from(*ctx))} : meta_type{};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1867,14 +1875,12 @@ inline meta_sequence_container::iterator meta_sequence_container::erase(iterator
|
|
|
* @return The meta mapped type of the a container.
|
|
* @return The meta mapped type of the a container.
|
|
|
*/
|
|
*/
|
|
|
[[nodiscard]] inline meta_type meta_associative_container::mapped_type() const noexcept {
|
|
[[nodiscard]] inline meta_type meta_associative_container::mapped_type() const noexcept {
|
|
|
- auto &&ctx_TODO = locator<meta_ctx>::value_or();
|
|
|
|
|
- return mapped_type_node ? meta_type{ctx_TODO, mapped_type_node()} : meta_type{};
|
|
|
|
|
|
|
+ return mapped_type_node ? meta_type{*ctx, mapped_type_node(internal::meta_context::from(*ctx))} : meta_type{};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*! @copydoc meta_sequence_container::value_type */
|
|
/*! @copydoc meta_sequence_container::value_type */
|
|
|
[[nodiscard]] inline meta_type meta_associative_container::value_type() const noexcept {
|
|
[[nodiscard]] inline meta_type meta_associative_container::value_type() const noexcept {
|
|
|
- auto &&ctx_TODO = locator<meta_ctx>::value_or();
|
|
|
|
|
- return value_type_node ? meta_type{ctx_TODO, value_type_node()} : meta_type{};
|
|
|
|
|
|
|
+ return value_type_node ? meta_type{*ctx, value_type_node(internal::meta_context::from(*ctx))} : meta_type{};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*! @copydoc meta_sequence_container::size */
|
|
/*! @copydoc meta_sequence_container::size */
|