summaryrefslogtreecommitdiff
path: root/absl/random/internal/distribution_caller.h
diff options
context:
space:
mode:
authorGravatar Abseil Team <absl-team@google.com>2020-06-11 09:56:29 -0700
committerGravatar vslashg <gfalcon@google.com>2020-06-12 17:24:49 -0400
commit2c92bdc7c2f8e65198af61a0611d90a55312ee82 (patch)
tree8b0fe283dd1594d6bd8f4d039417047807985f97 /absl/random/internal/distribution_caller.h
parente7ebf9803746b9a115d96164bdf5e915be8f223b (diff)
Export of internal Abseil changes
-- e21e960918678629abf89ad1b694b7d4a456b434 by Greg Falcon <gfalcon@google.com>: Roll back invoke() change due to large increases in compiler memory usage. PiperOrigin-RevId: 315919455 -- f95872e1e1d7afdefbac94f42ea228d42d80eb6e by Greg Falcon <gfalcon@google.com>: Rollback of invoke() changes due to compiler memory usage growth PiperOrigin-RevId: 315911585 -- 6c6c6ba6892016a2ce4703042800254fb9b15727 by Laramie Leavitt <lar@google.com>: Move some of the common mocking code into MockHelpers. Use MockHelpers to do mock signature detection and improve the dispatch mechansim. PiperOrigin-RevId: 315825988 -- 5e9380367d280c7fa6dbd4d0f48c31ade7f1d419 by Greg Falcon <gfalcon@google.com>: Rename the internal implementation details Invoke and InvokeT to `invoke` and `invoke_result_t`, since these are re-implementations of C++17 library entites of the same names. PiperOrigin-RevId: 315790467 GitOrigin-RevId: e21e960918678629abf89ad1b694b7d4a456b434 Change-Id: Ia75011f94cb033c1c9a4cb64cf14d283b91426ac
Diffstat (limited to 'absl/random/internal/distribution_caller.h')
-rw-r--r--absl/random/internal/distribution_caller.h18
1 files changed, 10 insertions, 8 deletions
diff --git a/absl/random/internal/distribution_caller.h b/absl/random/internal/distribution_caller.h
index 87a76845..fc81b787 100644
--- a/absl/random/internal/distribution_caller.h
+++ b/absl/random/internal/distribution_caller.h
@@ -52,23 +52,25 @@ struct DistributionCaller {
// Default implementation of distribution caller.
template <typename DistrT, typename... Args>
- static inline typename DistrT::result_type Impl(std::false_type, URBG* urbg,
- Args&&... args) {
+ static typename DistrT::result_type Impl(std::false_type, URBG* urbg,
+ Args&&... args) {
DistrT dist(std::forward<Args>(args)...);
return dist(*urbg);
}
// Mock implementation of distribution caller.
+ // The underlying KeyT must match the KeyT constructed by MockOverloadSet.
template <typename DistrT, typename... Args>
- static inline typename DistrT::result_type Impl(std::true_type, URBG* urbg,
- Args&&... args) {
+ static typename DistrT::result_type Impl(std::true_type, URBG* urbg,
+ Args&&... args) {
using ResultT = typename DistrT::result_type;
using ArgTupleT = std::tuple<absl::decay_t<Args>...>;
+ using KeyT = ResultT(DistrT, ArgTupleT);
+
ArgTupleT arg_tuple(std::forward<Args>(args)...);
ResultT result;
- if (!urbg->InvokeMock(
- ::absl::base_internal::FastTypeId<ResultT(DistrT, ArgTupleT)>(),
- &arg_tuple, &result)) {
+ if (!urbg->InvokeMock(::absl::base_internal::FastTypeId<KeyT>(), &arg_tuple,
+ &result)) {
auto dist = absl::make_from_tuple<DistrT>(arg_tuple);
result = dist(*urbg);
}
@@ -77,7 +79,7 @@ struct DistributionCaller {
// Default implementation of distribution caller.
template <typename DistrT, typename... Args>
- static inline typename DistrT::result_type Call(URBG* urbg, Args&&... args) {
+ static typename DistrT::result_type Call(URBG* urbg, Args&&... args) {
return Impl<DistrT, Args...>(HasInvokeMock{}, urbg,
std::forward<Args>(args)...);
}