Commit 27c2f6e2 by Abseil Team Committed by Eric Fiselier

Export of internal Abseil changes.

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

Release types/compare.h, which contains stand ins for three-way comparison result types from C++20. Use absl::weak_ordering for a three-way comparator in test-instance-tracker.h.

PiperOrigin-RevId: 247290078

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

Upgrade linux_clang-latest builds to LLVM r356814 and Bazel 0.25.0

PiperOrigin-RevId: 247250176

--
f305cd5c36561e4dbb69eb87568553ae5badcb15 by CJ Johnson <johnsoncj@google.com>:

Remove argument deduction based on template template argument in InlinedVector/Storage

PiperOrigin-RevId: 247232334

--
2cab8e426838baceb7d08edb313416480d26aa5b by Eric Fiselier <ericwf@google.com>:

Import of CCTZ from GitHub.

PiperOrigin-RevId: 247140132
GitOrigin-RevId: 9fa04b5fb4b6aeb47226b9095b3bc36a53669c39
Change-Id: I373a7d9bc90befa2a9f06555cb8703610c0313b9
parent aa468ad7
......@@ -213,6 +213,7 @@ cc_library(
visibility = [
"//absl:__subpackages__",
],
deps = ["//absl/types:compare"],
)
cc_test(
......
......@@ -204,6 +204,8 @@ absl_cc_library(
"internal/test_instance_tracker.cc"
COPTS
${ABSL_DEFAULT_COPTS}
DEPS
absl::compare
TESTONLY
)
......
......@@ -69,7 +69,7 @@ class InlinedVector {
static_assert(
N > 0, "InlinedVector cannot be instantiated with `0` inlined elements.");
using Storage = inlined_vector_internal::Storage<InlinedVector>;
using Storage = inlined_vector_internal::Storage<T, N, A>;
using AllocatorTraits = typename Storage::AllocatorTraits;
template <typename Iterator>
......
......@@ -31,12 +31,8 @@ using IsAtLeastForwardIterator = std::is_convertible<
typename std::iterator_traits<Iterator>::iterator_category,
std::forward_iterator_tag>;
template <typename InlinedVector>
class Storage;
template <template <typename, size_t, typename> class InlinedVector, typename T,
size_t N, typename A>
class Storage<InlinedVector<T, N, A>> {
template <typename T, size_t N, typename A>
class Storage {
public:
using allocator_type = A;
using value_type = typename allocator_type::value_type;
......
......@@ -18,6 +18,8 @@
#include <cstdlib>
#include <ostream>
#include "absl/types/compare.h"
namespace absl {
namespace test_internal {
......@@ -96,6 +98,14 @@ class BaseCountedInstance {
return value_ >= x.value_;
}
absl::weak_ordering compare(const BaseCountedInstance& x) const {
++num_comparisons_;
return value_ < x.value_
? absl::weak_ordering::less
: value_ == x.value_ ? absl::weak_ordering::equivalent
: absl::weak_ordering::greater;
}
int value() const {
if (!is_live_) std::abort();
return value_;
......
......@@ -174,6 +174,8 @@ TEST(TestInstanceTracker, Comparisons) {
EXPECT_EQ(5, tracker.comparisons());
EXPECT_FALSE(one >= two);
EXPECT_EQ(6, tracker.comparisons());
EXPECT_TRUE(one.compare(two) < 0); // NOLINT
EXPECT_EQ(7, tracker.comparisons());
tracker.ResetCopiesMovesSwaps();
EXPECT_EQ(0, tracker.comparisons());
......
......@@ -41,6 +41,7 @@ list(APPEND ABSL_CLANG_CL_FLAGS
"-Wno-unreachable-code"
"-Wno-unused-macros"
"-Wno-weak-vtables"
"-Wno-zero-as-null-pointer-constant"
"-Wbitfield-enum-conversion"
"-Wbool-conversion"
"-Wconstant-conversion"
......@@ -149,6 +150,7 @@ list(APPEND ABSL_LLVM_FLAGS
"-Wno-unreachable-code"
"-Wno-unused-macros"
"-Wno-weak-vtables"
"-Wno-zero-as-null-pointer-constant"
"-Wbitfield-enum-conversion"
"-Wbool-conversion"
"-Wconstant-conversion"
......
......@@ -42,6 +42,7 @@ ABSL_CLANG_CL_FLAGS = [
"-Wno-unreachable-code",
"-Wno-unused-macros",
"-Wno-weak-vtables",
"-Wno-zero-as-null-pointer-constant",
"-Wbitfield-enum-conversion",
"-Wbool-conversion",
"-Wconstant-conversion",
......@@ -150,6 +151,7 @@ ABSL_LLVM_FLAGS = [
"-Wno-unreachable-code",
"-Wno-unused-macros",
"-Wno-weak-vtables",
"-Wno-zero-as-null-pointer-constant",
"-Wbitfield-enum-conversion",
"-Wbool-conversion",
"-Wconstant-conversion",
......
......@@ -70,6 +70,8 @@ LLVM_DISABLE_WARNINGS_FLAGS = [
# Causes warnings on include guards
"-Wno-unused-macros",
"-Wno-weak-vtables",
# Causes warnings on usage of types/compare.h comparison operators.
"-Wno-zero-as-null-pointer-constant",
###
# Implicit conversion warnings turned off by -Wno-conversion
# which are re-enabled below.
......
......@@ -35,10 +35,10 @@ cc_library(
copts = ABSL_DEFAULT_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS,
deps = [
":city",
"//absl/base:core_headers",
"//absl/base:endian",
"//absl/container:fixed_array",
"//absl/hash:city",
"//absl/meta:type_traits",
"//absl/numeric:int128",
"//absl/strings",
......
......@@ -555,13 +555,43 @@ CONSTEXPR_F weekday get_weekday(const civil_day& cd) noexcept {
////////////////////////////////////////////////////////////////////////
CONSTEXPR_F civil_day next_weekday(civil_day cd, weekday wd) noexcept {
do { cd += 1; } while (get_weekday(cd) != wd);
return cd;
CONSTEXPR_D weekday k_weekdays_forw[14] = {
weekday::monday, weekday::tuesday, weekday::wednesday,
weekday::thursday, weekday::friday, weekday::saturday,
weekday::sunday, weekday::monday, weekday::tuesday,
weekday::wednesday, weekday::thursday, weekday::friday,
weekday::saturday, weekday::sunday,
};
weekday base = get_weekday(cd);
for (int i = 0;; ++i) {
if (base == k_weekdays_forw[i]) {
for (int j = i + 1;; ++j) {
if (wd == k_weekdays_forw[j]) {
return cd + (j - i);
}
}
}
}
}
CONSTEXPR_F civil_day prev_weekday(civil_day cd, weekday wd) noexcept {
do { cd -= 1; } while (get_weekday(cd) != wd);
return cd;
CONSTEXPR_D weekday k_weekdays_back[14] = {
weekday::sunday, weekday::saturday, weekday::friday,
weekday::thursday, weekday::wednesday, weekday::tuesday,
weekday::monday, weekday::sunday, weekday::saturday,
weekday::friday, weekday::thursday, weekday::wednesday,
weekday::tuesday, weekday::monday,
};
weekday base = get_weekday(cd);
for (int i = 0;; ++i) {
if (base == k_weekdays_back[i]) {
for (int j = i + 1;; ++j) {
if (wd == k_weekdays_back[j]) {
return cd - (j - i);
}
}
}
}
}
CONSTEXPR_F int get_yearday(const civil_day& cd) noexcept {
......
......@@ -47,6 +47,56 @@ void BM_Step_Days(benchmark::State& state) {
}
BENCHMARK(BM_Step_Days);
void BM_GetWeekday(benchmark::State& state) {
const cctz::civil_day c(2014, 8, 22);
while (state.KeepRunning()) {
benchmark::DoNotOptimize(cctz::get_weekday(c));
}
}
BENCHMARK(BM_GetWeekday);
void BM_NextWeekday(benchmark::State& state) {
const cctz::civil_day kStart(2014, 8, 22);
const cctz::civil_day kDays[7] = {
kStart + 0, kStart + 1, kStart + 2, kStart + 3,
kStart + 4, kStart + 5, kStart + 6,
};
const cctz::weekday kWeekdays[7] = {
cctz::weekday::monday, cctz::weekday::tuesday, cctz::weekday::wednesday,
cctz::weekday::thursday, cctz::weekday::friday, cctz::weekday::saturday,
cctz::weekday::sunday,
};
while (state.KeepRunningBatch(7 * 7)) {
for (const auto from : kDays) {
for (const auto to : kWeekdays) {
benchmark::DoNotOptimize(cctz::next_weekday(from, to));
}
}
}
}
BENCHMARK(BM_NextWeekday);
void BM_PrevWeekday(benchmark::State& state) {
const cctz::civil_day kStart(2014, 8, 22);
const cctz::civil_day kDays[7] = {
kStart + 0, kStart + 1, kStart + 2, kStart + 3,
kStart + 4, kStart + 5, kStart + 6,
};
const cctz::weekday kWeekdays[7] = {
cctz::weekday::monday, cctz::weekday::tuesday, cctz::weekday::wednesday,
cctz::weekday::thursday, cctz::weekday::friday, cctz::weekday::saturday,
cctz::weekday::sunday,
};
while (state.KeepRunningBatch(7 * 7)) {
for (const auto from : kDays) {
for (const auto to : kWeekdays) {
benchmark::DoNotOptimize(cctz::prev_weekday(from, to));
}
}
}
}
BENCHMARK(BM_PrevWeekday);
const char RFC3339_full[] = "%Y-%m-%dT%H:%M:%E*S%Ez";
const char RFC3339_sec[] = "%Y-%m-%dT%H:%M:%S%Ez";
......
......@@ -308,3 +308,27 @@ cc_test(
"@com_google_googletest//:gtest_main",
],
)
cc_library(
name = "compare",
hdrs = ["compare.h"],
copts = ABSL_DEFAULT_COPTS,
deps = [
"//absl/base:core_headers",
"//absl/meta:type_traits",
],
)
cc_test(
name = "compare_test",
size = "small",
srcs = [
"compare_test.cc",
],
copts = ABSL_TEST_COPTS,
deps = [
":compare",
"//absl/base",
"@com_google_googletest//:gtest_main",
],
)
......@@ -299,6 +299,32 @@ absl_cc_test(
gmock_main
)
absl_cc_library(
NAME
compare
HDRS
"compare.h"
COPTS
${ABSL_DEFAULT_COPTS}
DEPS
absl::core_headers
absl::type_traits
PUBLIC
)
absl_cc_test(
NAME
compare_test
SRCS
"compare_test.cc"
COPTS
${ABSL_TEST_COPTS}
DEPS
absl::base
absl::compare
gmock_main
)
# TODO(cohenjon,zhangxy) Figure out why this test is failing on gcc 4.8
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
else()
......
......@@ -32,7 +32,7 @@ if [ -z ${COMPILATION_MODE:-} ]; then
COMPILATION_MODE="fastbuild opt"
fi
readonly DOCKER_CONTAINER="gcr.io/google.com/absl-177019/linux_clang-latest:20190329"
readonly DOCKER_CONTAINER="gcr.io/google.com/absl-177019/linux_clang-latest:20190508"
# USE_BAZEL_CACHE=1 only works on Kokoro.
# Without access to the credentials this won't work.
......
......@@ -32,7 +32,7 @@ if [ -z ${COMPILATION_MODE:-} ]; then
COMPILATION_MODE="fastbuild opt"
fi
readonly DOCKER_CONTAINER="gcr.io/google.com/absl-177019/linux_clang-latest:20190329"
readonly DOCKER_CONTAINER="gcr.io/google.com/absl-177019/linux_clang-latest:20190508"
# USE_BAZEL_CACHE=1 only works on Kokoro.
# Without access to the credentials this won't work.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment