meta: reduce symbol size of meta assoc traits ::iter function
This commit is contained in:
@@ -110,13 +110,13 @@ struct basic_meta_associative_container_traits {
|
||||
return true;
|
||||
}
|
||||
|
||||
[[nodiscard]] static iterator iter(const meta_ctx &ctx, any &container, const bool as_end) {
|
||||
if(auto *const cont = any_cast<Type>(&container); cont) {
|
||||
[[nodiscard]] static iterator iter(const meta_ctx &ctx, void *container, const void *as_const, const bool as_end) {
|
||||
if(auto *const cont = static_cast<Type *>(container); cont) {
|
||||
return iterator{ctx, std::bool_constant<key_only>{}, as_end ? cont->end() : cont->begin()};
|
||||
}
|
||||
|
||||
const auto &as_const = any_cast<const Type &>(container);
|
||||
return iterator{ctx, std::bool_constant<key_only>{}, as_end ? as_const.end() : as_const.begin()};
|
||||
auto *const cont = static_cast<const Type *>(as_const);
|
||||
return iterator{ctx, std::bool_constant<key_only>{}, as_end ? cont->end() : cont->begin()};
|
||||
}
|
||||
|
||||
[[nodiscard]] static size_type insert_or_erase(any &container, meta_any &key, meta_any &value) {
|
||||
|
||||
@@ -143,7 +143,7 @@ private:
|
||||
internal::meta_type_node (*value_type_node)(const internal::meta_context &){};
|
||||
size_type (*size_fn)(const void *) noexcept {};
|
||||
bool (*clear_fn)(void *){};
|
||||
iterator (*iter_fn)(const meta_ctx &, any &, const bool){};
|
||||
iterator (*iter_fn)(const meta_ctx &, void *, const void *, const bool){};
|
||||
size_type (*insert_or_erase_fn)(any &, meta_any &, meta_any &){};
|
||||
iterator (*find_fn)(const meta_ctx &, void *, const void *, meta_any &){};
|
||||
any storage{};
|
||||
@@ -1958,12 +1958,12 @@ inline bool meta_associative_container::clear() {
|
||||
|
||||
/*! @copydoc meta_sequence_container::begin */
|
||||
[[nodiscard]] inline meta_associative_container::iterator meta_associative_container::begin() {
|
||||
return iter_fn(*ctx, storage, false);
|
||||
return iter_fn(*ctx, storage.data(), std::as_const(storage).data(), false);
|
||||
}
|
||||
|
||||
/*! @copydoc meta_sequence_container::end */
|
||||
[[nodiscard]] inline meta_associative_container::iterator meta_associative_container::end() {
|
||||
return iter_fn(*ctx, storage, true);
|
||||
return iter_fn(*ctx, storage.data(), std::as_const(storage).data(), true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user