Skip to content

Commit

Permalink
Unconditionally use absl::apply() and absl::make_from_tuple() ins…
Browse files Browse the repository at this point in the history
…tead of

conditionally using either their `std` counterparts or other workarounds.

PiperOrigin-RevId: 606192944
  • Loading branch information
QrczakMK committed Feb 12, 2024
1 parent 65f9297 commit 6cdad85
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 40 deletions.
2 changes: 2 additions & 0 deletions riegeli/base/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ cc_library(
"@com_google_absl//absl/meta:type_traits",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/types:span",
"@com_google_absl//absl/utility",
],
)

Expand Down Expand Up @@ -365,6 +366,7 @@ cc_library(
"@com_google_absl//absl/strings:cord",
"@com_google_absl//absl/types:optional",
"@com_google_absl//absl/types:span",
"@com_google_absl//absl/utility",
],
)

Expand Down
16 changes: 1 addition & 15 deletions riegeli/base/any_dependency.h
Original file line number Diff line number Diff line change
Expand Up @@ -789,23 +789,9 @@ inline Handle SentinelHandleInternal(Handle&& handle) {
return std::move(handle);
}

#if !__cpp_lib_make_from_tuple
template <typename Handle, typename... HandleArgs, size_t... indices>
inline Handle SentinelHandleInternal(
ABSL_ATTRIBUTE_UNUSED std::tuple<HandleArgs...>&& handle_args,
std::index_sequence<indices...>) {
return Handle(std::forward<HandleArgs>(std::get<indices>(handle_args))...);
}
#endif

template <typename Handle, typename... HandleArgs>
inline Handle SentinelHandleInternal(std::tuple<HandleArgs...> handle_args) {
#if __cpp_lib_make_from_tuple
return std::make_from_tuple<Handle>(std::move(handle_args));
#else
return SentinelHandleInternal<Handle>(
std::move(handle_args), std::index_sequence_for<HandleArgs...>());
#endif
return absl::make_from_tuple<Handle>(std::move(handle_args));
}

template <typename Handle>
Expand Down
13 changes: 7 additions & 6 deletions riegeli/base/chain.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#include "absl/types/span.h"
#include "absl/utility/utility.h"
#include "riegeli/base/arithmetic.h"
#include "riegeli/base/assert.h"
#include "riegeli/base/buffering.h"
Expand Down Expand Up @@ -1054,7 +1055,7 @@ class Chain::RawBlock {
template <typename T>
static constexpr size_t kExternalObjectOffset();

#if !__cpp_guaranteed_copy_elision || !__cpp_lib_make_from_tuple
#if !__cpp_guaranteed_copy_elision
template <typename T, typename... Args, size_t... indices>
void ConstructExternal(std::tuple<Args...>&& args,
std::index_sequence<indices...>);
Expand Down Expand Up @@ -1284,10 +1285,10 @@ void Chain::ExternalMethodsFor<T>::RegisterSubobjects(

template <typename T, typename... Args>
inline Chain::RawBlock::RawBlock(ExternalType<T>, std::tuple<Args...> args) {
#if __cpp_guaranteed_copy_elision && __cpp_lib_make_from_tuple
#if __cpp_guaranteed_copy_elision
external_.methods = &ExternalMethodsFor<T>::methods;
new (&unchecked_external_object<T>())
T(std::make_from_tuple<T>(std::move(args)));
T(absl::make_from_tuple<T>(std::move(args)));
#else
ConstructExternal<T>(std::move(args), std::index_sequence_for<Args...>());
#endif
Expand All @@ -1302,10 +1303,10 @@ template <typename T, typename... Args>
inline Chain::RawBlock::RawBlock(ExternalType<T>, std::tuple<Args...> args,
absl::string_view data)
: data_(data.data()), size_(data.size()) {
#if __cpp_guaranteed_copy_elision && __cpp_lib_make_from_tuple
#if __cpp_guaranteed_copy_elision
external_.methods = &ExternalMethodsFor<T>::methods;
new (&unchecked_external_object<T>())
T(std::make_from_tuple<T>(std::move(args)));
T(absl::make_from_tuple<T>(std::move(args)));
#else
ConstructExternal<T>(std::move(args), std::index_sequence_for<Args...>());
#endif
Expand Down Expand Up @@ -1347,7 +1348,7 @@ void Chain::RawBlock::Unref() {
}
}

#if !__cpp_guaranteed_copy_elision || !__cpp_lib_make_from_tuple
#if !__cpp_guaranteed_copy_elision
template <typename T, typename... Args, size_t... indices>
inline void Chain::RawBlock::ConstructExternal(
ABSL_ATTRIBUTE_UNUSED std::tuple<Args...>&& args,
Expand Down
24 changes: 5 additions & 19 deletions riegeli/base/dependency.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "absl/meta/type_traits.h"
#include "absl/strings/string_view.h"
#include "absl/types/span.h"
#include "absl/utility/utility.h"
#include "riegeli/base/assert.h"
#include "riegeli/base/compare.h"
#include "riegeli/base/reset.h"
Expand Down Expand Up @@ -235,8 +236,8 @@ class DependencyBase {
template <typename... ManagerArgs>
explicit DependencyBase(std::tuple<ManagerArgs...> manager_args)
:
#if __cpp_guaranteed_copy_elision && __cpp_lib_make_from_tuple
manager_(std::make_from_tuple<Manager>(std::move(manager_args)))
#if __cpp_guaranteed_copy_elision
manager_(absl::make_from_tuple<Manager>(std::move(manager_args)))
#else
DependencyBase(std::move(manager_args),
std::index_sequence_for<ManagerArgs...>())
Expand Down Expand Up @@ -266,16 +267,11 @@ class DependencyBase {
template <typename... ManagerArgs>
ABSL_ATTRIBUTE_REINITIALIZES void Reset(
std::tuple<ManagerArgs...> manager_args) {
#if __cpp_lib_apply
std::apply(
absl::apply(
[&](ManagerArgs&&... args) {
riegeli::Reset(manager_, std::forward<ManagerArgs>(args)...);
},
std::move(manager_args));
#else
ResetInternal(std::move(manager_args),
std::index_sequence_for<ManagerArgs...>());
#endif
}

Manager& manager() { return manager_; }
Expand All @@ -293,7 +289,7 @@ class DependencyBase {
Manager& mutable_manager() const { return manager_; }

private:
#if !__cpp_guaranteed_copy_elision || !__cpp_lib_make_from_tuple
#if !__cpp_guaranteed_copy_elision
template <typename... ManagerArgs, size_t... indices>
explicit DependencyBase(
ABSL_ATTRIBUTE_UNUSED std::tuple<ManagerArgs...>&& manager_args,
Expand All @@ -302,16 +298,6 @@ class DependencyBase {
std::forward<ManagerArgs>(std::get<indices>(manager_args))...) {}
#endif

#if !__cpp_lib_apply
template <typename... ManagerArgs, size_t... indices>
void ResetInternal(
ABSL_ATTRIBUTE_UNUSED std::tuple<ManagerArgs...>&& manager_args,
std::index_sequence<indices...>) {
riegeli::Reset(manager_, std::forward<ManagerArgs>(
std::get<indices>(manager_args))...);
}
#endif

mutable Manager manager_;
};

Expand Down

0 comments on commit 6cdad85

Please sign in to comment.