summaryrefslogtreecommitdiff
path: root/absl/random/internal
diff options
context:
space:
mode:
Diffstat (limited to 'absl/random/internal')
-rw-r--r--absl/random/internal/BUILD.bazel9
-rw-r--r--absl/random/internal/distributions.h12
-rw-r--r--absl/random/internal/uniform_helper.h2
3 files changed, 7 insertions, 16 deletions
diff --git a/absl/random/internal/BUILD.bazel b/absl/random/internal/BUILD.bazel
index 8eb6c61a..cd50982d 100644
--- a/absl/random/internal/BUILD.bazel
+++ b/absl/random/internal/BUILD.bazel
@@ -60,13 +60,11 @@ cc_library(
linkopts = ABSL_DEFAULT_LINKOPTS,
deps = [
":distribution_caller",
- ":fast_uniform_bits",
- ":fastmath",
":traits",
":uniform_helper",
+ "//absl/base",
"//absl/meta:type_traits",
"//absl/strings",
- "//absl/types:span",
],
)
@@ -618,11 +616,6 @@ cc_library(
copts = ABSL_DEFAULT_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
deps = [
- ":distribution_impl",
- ":fast_uniform_bits",
- ":iostream_state_saver",
- ":traits",
- "//absl/base:core_headers",
"//absl/meta:type_traits",
],
)
diff --git a/absl/random/internal/distributions.h b/absl/random/internal/distributions.h
index 34db3b32..96f8bae3 100644
--- a/absl/random/internal/distributions.h
+++ b/absl/random/internal/distributions.h
@@ -39,22 +39,20 @@ NumType UniformImpl(TagType tag,
"absl::Uniform<T>() must use an integer or real parameter type.");
using distribution_t =
- typename std::conditional<std::is_integral<NumType>::value,
- absl::uniform_int_distribution<NumType>,
- absl::uniform_real_distribution<NumType>>::type;
+ UniformDistributionWrapper<absl::decay_t<TagType>, NumType>;
using format_t = random_internal::DistributionFormatTraits<distribution_t>;
+ auto a = uniform_lower_bound(tag, lo, hi);
+ auto b = uniform_upper_bound(tag, lo, hi);
- auto a = random_internal::uniform_lower_bound<NumType>(tag, lo, hi);
- auto b = random_internal::uniform_upper_bound<NumType>(tag, lo, hi);
// TODO(lar): it doesn't make a lot of sense to ask for a random number in an
// empty range. Right now we just return a boundary--even though that
// boundary is not an acceptable value! Is there something better we can do
// here?
+ if (a > b) return a;
using gen_t = absl::decay_t<URBG>;
- if (a > b) return a;
return DistributionCaller<gen_t>::template Call<distribution_t, format_t>(
- &urbg, a, b);
+ &urbg, tag, lo, hi);
}
// In the absence of an explicitly provided return-type, the template
diff --git a/absl/random/internal/uniform_helper.h b/absl/random/internal/uniform_helper.h
index 9e89e526..2929407e 100644
--- a/absl/random/internal/uniform_helper.h
+++ b/absl/random/internal/uniform_helper.h
@@ -156,7 +156,7 @@ using UniformDistribution =
template <typename TagType, typename NumType>
struct UniformDistributionWrapper : public UniformDistribution<NumType> {
- explicit UniformDistributionWrapper(NumType lo, NumType hi)
+ explicit UniformDistributionWrapper(TagType, NumType lo, NumType hi)
: UniformDistribution<NumType>(
uniform_lower_bound<NumType>(TagType{}, lo, hi),
uniform_upper_bound<NumType>(TagType{}, lo, hi)) {}