内存优化

This commit is contained in:
2026-08-28 11:49:05 +08:00
parent bacd89f864
commit 77db667716
+8 -11
View File
@@ -302,9 +302,9 @@ public:
} }
template <class Function> template <class Function>
decltype(auto) read(Function&& function) const requires std::invocable<Function, const T&> && detail::Managed_Callback_Result<std::invoke_result_t<Function, const T&>> { decltype(auto) read(Function&& function) const requires std::invocable<Function, const T&> && detail::Managed_Callback_Result<std::invoke_result_t<Function, const T&>> {
const auto& keys = detail::managed_key_array<T>(); return this->with_all_readable_locked([&](const auto&) -> decltype(auto) {
auto guard = this->lock_shared(std::span<const std::string_view>{keys});
return std::invoke(std::forward<Function>(function), std::as_const(value_)); return std::invoke(std::forward<Function>(function), std::as_const(value_));
});
} }
template <class Function> template <class Function>
decltype(auto) write(Function&& function) requires std::invocable<Function, T&> && detail::Managed_Callback_Result<std::invoke_result_t<Function, T&>> { decltype(auto) write(Function&& function) requires std::invocable<Function, T&> && detail::Managed_Callback_Result<std::invoke_result_t<Function, T&>> {
@@ -362,15 +362,12 @@ public:
explicit Managed_Field(Managed& owner) : owner_(&owner) {} explicit Managed_Field(Managed& owner) : owner_(&owner) {}
template <class Function> template <class Function>
decltype(auto) read(Function&& function) const requires std::invocable<Function, const value_type&> && detail::Managed_Callback_Result<std::invoke_result_t<Function, const value_type&>> { decltype(auto) read(Function&& function) const requires std::invocable<Function, const value_type&> && detail::Managed_Callback_Result<std::invoke_result_t<Function, const value_type&>> {
if constexpr(detail::managed_path_requires_synchronization<Root, Root_Index, Members...>()) { return owner_->template with_read_index<Root_Index>([&](const auto& root_value) -> decltype(auto) {
const auto key = detail::Managed_Key_Attribute<Root_Index>::value.view(); if constexpr(sizeof...(Members) == 0)
auto guard = owner_->lock_shared({key}); return std::invoke(std::forward<Function>(function), root_value);
const auto& value = detail::managed_path_value<Root, Root_Index, Members...>(owner_->unsafe_value()); else
return std::invoke(std::forward<Function>(function), value); return std::invoke(std::forward<Function>(function), detail::path_value<decltype(root_value), Members...>(root_value));
} else { });
const auto& value = detail::managed_path_value<Root, Root_Index, Members...>(owner_->unsafe_value());
return std::invoke(std::forward<Function>(function), value);
}
} }
template <class Function> template <class Function>
decltype(auto) write(Function&& function) requires (!std::is_const_v<Managed>) && (detail::managed_path_writable<Root, Root_Index, Members...>()) && std::invocable<Function, value_type&> && detail::Managed_Callback_Result<std::invoke_result_t<Function, value_type&>> { decltype(auto) write(Function&& function) requires (!std::is_const_v<Managed>) && (detail::managed_path_writable<Root, Root_Index, Members...>()) && std::invocable<Function, value_type&> && detail::Managed_Callback_Result<std::invoke_result_t<Function, value_type&>> {