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
This commit is contained in:
Abseil Team 2019-09-09 08:20:10 -07:00 committed by Shaindel Schwartz
parent 325fd7b042
commit 97c1664b4b
14 changed files with 154 additions and 62 deletions

View file

@ -1025,6 +1025,8 @@ absl_cc_test(
random_internal_iostream_state_saver_test
SRCS
"internal/iostream_state_saver_test.cc"
COPTS
${ABSL_TEST_COPTS}
LINKOPTS
${ABSL_DEFAULT_LINKOPTS}
DEPS

View file

@ -129,7 +129,7 @@ class beta_distribution {
private:
friend class beta_distribution;
#ifdef COMPILER_MSVC
#ifdef _MSC_VER
// MSVC does not have constexpr implementations for std::log and std::exp
// so they are computed at runtime.
#define ABSL_RANDOM_INTERNAL_LOG_EXP_CONSTEXPR

View file

@ -36,6 +36,12 @@
#include "absl/types/span.h"
namespace absl {
struct IntervalClosedClosedTag;
struct IntervalClosedOpenTag;
struct IntervalOpenClosedTag;
struct IntervalOpenOpenTag;
namespace random_internal {
// ScalarTypeName defines a preferred hierarchy of preferred type names for
@ -243,6 +249,39 @@ struct DistributionFormatTraits<absl::log_uniform_int_distribution<R>> {
}
};
template <typename TagType, typename NumType>
struct UniformDistributionWrapper;
template <typename TagType, typename NumType>
struct DistributionFormatTraits<UniformDistributionWrapper<TagType, NumType>> {
using distribution_t = UniformDistributionWrapper<TagType, NumType>;
using result_t = NumType;
static constexpr const char* Name() { return "Uniform"; }
static std::string FunctionName() {
return absl::StrCat(Name(), "<", ScalarTypeName<NumType>(), ">");
}
static std::string FormatArgs(const distribution_t& d) {
absl::string_view tag;
if (std::is_same<TagType, IntervalClosedClosedTag>::value) {
tag = "IntervalClosedClosed";
} else if (std::is_same<TagType, IntervalClosedOpenTag>::value) {
tag = "IntervalClosedOpen";
} else if (std::is_same<TagType, IntervalOpenClosedTag>::value) {
tag = "IntervalOpenClosed";
} else if (std::is_same<TagType, IntervalOpenOpenTag>::value) {
tag = "IntervalOpenOpen";
} else {
tag = "[[unknown tag type]]";
}
return absl::StrCat(tag, ", ", (d.min)(), ", ", (d.max)());
}
static std::string FormatResults(absl::Span<const result_t> results) {
return absl::StrJoin(results, ", ");
}
};
} // namespace random_internal
} // namespace absl

View file

@ -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",
],
)

View file

@ -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

View file

@ -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)) {}