内存优化
This commit is contained in:
@@ -302,9 +302,9 @@ public:
|
||||
}
|
||||
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&>> {
|
||||
const auto& keys = detail::managed_key_array<T>();
|
||||
auto guard = this->lock_shared(std::span<const std::string_view>{keys});
|
||||
return this->with_all_readable_locked([&](const auto&) -> decltype(auto) {
|
||||
return std::invoke(std::forward<Function>(function), std::as_const(value_));
|
||||
});
|
||||
}
|
||||
template <class Function>
|
||||
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) {}
|
||||
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&>> {
|
||||
if constexpr(detail::managed_path_requires_synchronization<Root, Root_Index, Members...>()) {
|
||||
const auto key = detail::Managed_Key_Attribute<Root_Index>::value.view();
|
||||
auto guard = owner_->lock_shared({key});
|
||||
const auto& value = detail::managed_path_value<Root, Root_Index, Members...>(owner_->unsafe_value());
|
||||
return std::invoke(std::forward<Function>(function), value);
|
||||
} else {
|
||||
const auto& value = detail::managed_path_value<Root, Root_Index, Members...>(owner_->unsafe_value());
|
||||
return std::invoke(std::forward<Function>(function), value);
|
||||
}
|
||||
return owner_->template with_read_index<Root_Index>([&](const auto& root_value) -> decltype(auto) {
|
||||
if constexpr(sizeof...(Members) == 0)
|
||||
return std::invoke(std::forward<Function>(function), root_value);
|
||||
else
|
||||
return std::invoke(std::forward<Function>(function), detail::path_value<decltype(root_value), Members...>(root_value));
|
||||
});
|
||||
}
|
||||
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&>> {
|
||||
|
||||
Reference in New Issue
Block a user