meta: reduce symbol size of meta assoc traits ::iter function

This commit is contained in:
Michele Caini
2023-07-04 10:23:19 +02:00
parent c8f5b1afa6
commit 3047c73952
2 changed files with 7 additions and 7 deletions

View File

@@ -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) {

View File

@@ -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);
}
/**