about summary refs log tree commit diff
path: root/absl/random/internal
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2019-09-09T15·20-0700
committerShaindel Schwartz <shaindel@google.com>2019-09-09T16·41-0400
commit97c1664b4bbab5f78fac2b151ab02656268fb34b (patch)
tree738a650a90ee00d11eb7b0a76a8631748319ac96 /absl/random/internal
parent325fd7b042ff4ec34f7dd32e602cd81ad0e24b22 (diff)
Export of internal Abseil changes
--
167cd2647144583746311129b0cc98a89a9897e1 by Andy Soffer <asoffer@google.com>:

Internal Changes

PiperOrigin-RevId: 268000987

--
ab44fea7dfdaf763c69609a08ddfac22480ce520 by Derek Mauro <dmauro@google.com>:

Fix flags Cmake tests on Windows

PiperOrigin-RevId: 267859442

--
d7ec9f7611370b01bc9a5aed7e18460df2a15429 by Abseil Team <absl-team@google.com>:

Fix undefined behavior in symbolize_elf.inc

PiperOrigin-RevId: 267684904

--
e7c5f8e472a91ed99bdf4876942f2bda5751aa6c by Abseil Team <absl-team@google.com>:

Turn off ABSL_HAS_ALARM on Fuchsia.

PiperOrigin-RevId: 267666090

--
b7d25d5c71a49e697a8bf6440ed30f2e3f036420 by Chris Kennelly <ckennelly@google.com>:

Mark once initialization function as no inline.

We expect this code to run infrequently.

PiperOrigin-RevId: 267649713

--
dc2a5e5f1e39a03fff837d34a319033fde55d9ba by Derek Mauro <dmauro@google.com>:

Fix the MSVC CMake random build

PiperOrigin-RevId: 267624074

--
ba2751b67fa17d1b6c53e5ba79f81a5371e4a03a by Abseil Team <absl-team@google.com>:

Move "internal/flag.*" files to the "internal" build target.

PiperOrigin-RevId: 267588996

--
05b985a33eec4f8acff1809ad9218a1e22220f34 by Abseil Team <absl-team@google.com>:

Move "internal/flag.*" files to the "internal" build target.

PiperOrigin-RevId: 267580412
GitOrigin-RevId: 167cd2647144583746311129b0cc98a89a9897e1
Change-Id: Ibd334f46a5671c7c1d3fcf5354029e2fbb7ba91f
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 8eb6c61ac907..cd50982d8b36 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 34db3b326f4c..96f8bae3918f 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 9e89e5268071..2929407e1497 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)) {}