Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
abseil-cpp
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open
abseil-cpp
Commits
764d4bd0
Commit
764d4bd0
authored
Oct 05, 2017
by
Gennadiy Civil
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'upstream/master'
parents
5e1a8e8d
d732f201
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
56 additions
and
16 deletions
+56
-16
README.md
+1
-1
absl/base/config.h
+1
-1
absl/container/inlined_vector.h
+15
-0
absl/meta/type_traits.h
+20
-8
absl/strings/str_cat_test.cc
+10
-4
absl/time/clock_test.cc
+2
-2
absl/types/optional.h
+7
-0
No files found.
README.md
View file @
764d4bd0
...
@@ -67,7 +67,7 @@ Abseil contains the following C++ library components:
...
@@ -67,7 +67,7 @@ Abseil contains the following C++ library components:
time zones.
time zones.
*
[
`types`
](
absl/types/
)
*
[
`types`
](
absl/types/
)
<br
/>
The
`types`
library contains non-container utility types, like a
<br
/>
The
`types`
library contains non-container utility types, like a
C++11-compatible version of
`absl::optional`
.
C++11-compatible version of
the C++17
`std::optional`
type
.
## License
## License
...
...
absl/base/config.h
View file @
764d4bd0
...
@@ -180,7 +180,7 @@
...
@@ -180,7 +180,7 @@
#ifdef ABSL_HAVE_INTRINSIC_INT128
#ifdef ABSL_HAVE_INTRINSIC_INT128
#error ABSL_HAVE_INTRINSIC_INT128 cannot be directly set
#error ABSL_HAVE_INTRINSIC_INT128 cannot be directly set
#elif (defined(__clang__) && defined(__SIZEOF_INT128__) && \
#elif (defined(__clang__) && defined(__SIZEOF_INT128__) && \
!defined(__
ppc64__) && !defined(__aarch64__)) ||
\
!defined(__
aarch64__)) ||
\
(defined(__CUDACC__) && defined(__SIZEOF_INT128__) && \
(defined(__CUDACC__) && defined(__SIZEOF_INT128__) && \
__CUDACC_VER__ >= 70000) || \
__CUDACC_VER__ >= 70000) || \
(!defined(__clang__) && !defined(__CUDACC__) && defined(__GNUC__) && \
(!defined(__clang__) && !defined(__CUDACC__) && defined(__GNUC__) && \
...
...
absl/container/inlined_vector.h
View file @
764d4bd0
...
@@ -124,9 +124,24 @@ class InlinedVector {
...
@@ -124,9 +124,24 @@ class InlinedVector {
InlinedVector
(
const
InlinedVector
&
v
);
InlinedVector
(
const
InlinedVector
&
v
);
InlinedVector
(
const
InlinedVector
&
v
,
const
allocator_type
&
alloc
);
InlinedVector
(
const
InlinedVector
&
v
,
const
allocator_type
&
alloc
);
// This move constructor does not allocate and only moves the underlying
// objects, so its `noexcept` specification depends on whether moving the
// underlying objects can throw or not. We assume
// a) move constructors should only throw due to allocation failure and
// b) if `value_type`'s move constructor allocates, it uses the same
// allocation function as the `InlinedVector`'s allocator, so the move
// constructor is non-throwing if the allocator is non-throwing or
// `value_type`'s move constructor is specified as `noexcept`.
InlinedVector
(
InlinedVector
&&
v
)
noexcept
(
InlinedVector
(
InlinedVector
&&
v
)
noexcept
(
absl
::
allocator_is_nothrow
<
allocator_type
>::
value
||
absl
::
allocator_is_nothrow
<
allocator_type
>::
value
||
std
::
is_nothrow_move_constructible
<
value_type
>::
value
);
std
::
is_nothrow_move_constructible
<
value_type
>::
value
);
// This move constructor allocates and also moves the underlying objects, so
// its `noexcept` specification depends on whether the allocation can throw
// and whether moving the underlying objects can throw. Based on the same
// assumptions above, the `noexcept` specification is dominated by whether the
// allocation can throw regardless of whether `value_type`'s move constructor
// is specified as `noexcept`.
InlinedVector
(
InlinedVector
&&
v
,
const
allocator_type
&
alloc
)
noexcept
(
InlinedVector
(
InlinedVector
&&
v
,
const
allocator_type
&
alloc
)
noexcept
(
absl
::
allocator_is_nothrow
<
allocator_type
>::
value
);
absl
::
allocator_is_nothrow
<
allocator_type
>::
value
);
...
...
absl/meta/type_traits.h
View file @
764d4bd0
...
@@ -135,8 +135,11 @@ struct negation : std::integral_constant<bool, !T::value> {};
...
@@ -135,8 +135,11 @@ struct negation : std::integral_constant<bool, !T::value> {};
//
//
// Determines whether the passed type `T` is trivially destructable.
// Determines whether the passed type `T` is trivially destructable.
//
//
// This metafunction is designed to be a drop-in replacement for the C++17
// This metafunction is designed to be a drop-in replacement for the C++11
// `std::is_trivially_destructible()` metafunction.
// `std::is_trivially_destructible()` metafunction for platforms that have
// incomplete C++11 support (such as libstdc++ 4.x). On any platforms that do
// fully support C++11, we check whether this yields the same result as the std
// implementation.
//
//
// NOTE: the extensions (__has_trivial_xxx) are implemented in gcc (version >=
// NOTE: the extensions (__has_trivial_xxx) are implemented in gcc (version >=
// 4.3) and clang. Since we are supporting libstdc++ > 4.7, they should always
// 4.3) and clang. Since we are supporting libstdc++ > 4.7, they should always
...
@@ -157,8 +160,11 @@ struct is_trivially_destructible
...
@@ -157,8 +160,11 @@ struct is_trivially_destructible
//
//
// Determines whether the passed type `T` is trivially default constructible.
// Determines whether the passed type `T` is trivially default constructible.
//
//
// This metafunction is designed to be a drop-in replacement for the C++17
// This metafunction is designed to be a drop-in replacement for the C++11
// `std::is_trivially_default_constructible()` metafunction.
// `std::is_trivially_default_constructible()` metafunction for platforms that
// have incomplete C++11 support (such as libstdc++ 4.x). On any platforms that
// do fully support C++11, we check whether this yields the same result as the
// std implementation.
//
//
// NOTE: according to the C++ standard, Section: 20.15.4.3 [meta.unary.prop]
// NOTE: according to the C++ standard, Section: 20.15.4.3 [meta.unary.prop]
// "The predicate condition for a template specialization is_constructible<T,
// "The predicate condition for a template specialization is_constructible<T,
...
@@ -199,8 +205,11 @@ struct is_trivially_default_constructible
...
@@ -199,8 +205,11 @@ struct is_trivially_default_constructible
//
//
// Determines whether the passed type `T` is trivially copy constructible.
// Determines whether the passed type `T` is trivially copy constructible.
//
//
// This metafunction is designed to be a drop-in replacement for the C++17
// This metafunction is designed to be a drop-in replacement for the C++11
// `std::is_trivially_copy_constructible()` metafunction.
// `std::is_trivially_copy_constructible()` metafunction for platforms that have
// incomplete C++11 support (such as libstdc++ 4.x). On any platforms that do
// fully support C++11, we check whether this yields the same result as the std
// implementation.
//
//
// NOTE: `T obj(declval<const T&>());` needs to be well-formed and not call any
// NOTE: `T obj(declval<const T&>());` needs to be well-formed and not call any
// nontrivial operation. Nontrivally destructible types will cause the
// nontrivial operation. Nontrivally destructible types will cause the
...
@@ -221,8 +230,11 @@ struct is_trivially_copy_constructible
...
@@ -221,8 +230,11 @@ struct is_trivially_copy_constructible
//
//
// Determines whether the passed type `T` is trivially copy assignable.
// Determines whether the passed type `T` is trivially copy assignable.
//
//
// This metafunction is designed to be a drop-in replacement for the C++17
// This metafunction is designed to be a drop-in replacement for the C++11
// `std::is_trivially_copy_assignable()` metafunction.
// `std::is_trivially_copy_assignable()` metafunction for platforms that have
// incomplete C++11 support (such as libstdc++ 4.x). On any platforms that do
// fully support C++11, we check whether this yields the same result as the std
// implementation.
//
//
// NOTE: `is_assignable<T, U>::value` is `true` if the expression
// NOTE: `is_assignable<T, U>::value` is `true` if the expression
// `declval<T>() = declval<U>()` is well-formed when treated as an unevaluated
// `declval<T>() = declval<U>()` is well-formed when treated as an unevaluated
...
...
absl/strings/str_cat_test.cc
View file @
764d4bd0
...
@@ -300,6 +300,12 @@ TEST(StrAppend, Basics) {
...
@@ -300,6 +300,12 @@ TEST(StrAppend, Basics) {
"World"
"World"
};
};
std
::
string
stdstrs
[]
=
{
"std::Hello"
,
"std::Cruel"
,
"std::World"
};
absl
::
string_view
pieces
[]
=
{
"Hello"
,
"Cruel"
,
"World"
};
absl
::
string_view
pieces
[]
=
{
"Hello"
,
"Cruel"
,
"World"
};
const
char
*
c_strs
[]
=
{
const
char
*
c_strs
[]
=
{
...
@@ -324,12 +330,12 @@ TEST(StrAppend, Basics) {
...
@@ -324,12 +330,12 @@ TEST(StrAppend, Basics) {
EXPECT_EQ
(
result
.
substr
(
old_size
),
"CruelWorld"
);
EXPECT_EQ
(
result
.
substr
(
old_size
),
"CruelWorld"
);
old_size
=
result
.
size
();
old_size
=
result
.
size
();
absl
::
StrAppend
(
&
result
,
strs
[
0
],
", "
,
pieces
[
2
]);
absl
::
StrAppend
(
&
result
,
st
dst
rs
[
0
],
", "
,
pieces
[
2
]);
EXPECT_EQ
(
result
.
substr
(
old_size
),
"Hello, World"
);
EXPECT_EQ
(
result
.
substr
(
old_size
),
"
std::
Hello, World"
);
old_size
=
result
.
size
();
old_size
=
result
.
size
();
absl
::
StrAppend
(
&
result
,
strs
[
0
],
", "
,
strs
[
1
],
" "
,
strs
[
2
],
"!"
);
absl
::
StrAppend
(
&
result
,
strs
[
0
],
", "
,
st
dst
rs
[
1
],
" "
,
strs
[
2
],
"!"
);
EXPECT_EQ
(
result
.
substr
(
old_size
),
"Hello, Cruel World!"
);
EXPECT_EQ
(
result
.
substr
(
old_size
),
"Hello,
std::
Cruel World!"
);
old_size
=
result
.
size
();
old_size
=
result
.
size
();
absl
::
StrAppend
(
&
result
,
pieces
[
0
],
", "
,
pieces
[
1
],
" "
,
pieces
[
2
]);
absl
::
StrAppend
(
&
result
,
pieces
[
0
],
", "
,
pieces
[
1
],
" "
,
pieces
[
2
]);
...
...
absl/time/clock_test.cc
View file @
764d4bd0
...
@@ -41,7 +41,7 @@ TEST(SleepForTest, BasicSanity) {
...
@@ -41,7 +41,7 @@ TEST(SleepForTest, BasicSanity) {
absl
::
SleepFor
(
sleep_time
);
absl
::
SleepFor
(
sleep_time
);
absl
::
Time
end
=
absl
::
Now
();
absl
::
Time
end
=
absl
::
Now
();
EXPECT_LE
(
sleep_time
-
absl
::
Milliseconds
(
100
),
end
-
start
);
EXPECT_LE
(
sleep_time
-
absl
::
Milliseconds
(
100
),
end
-
start
);
EXPECT_GE
(
sleep_time
+
absl
::
Milliseconds
(
1
00
),
end
-
start
);
EXPECT_GE
(
sleep_time
+
absl
::
Milliseconds
(
2
00
),
end
-
start
);
}
}
#ifdef ABSL_HAVE_ALARM
#ifdef ABSL_HAVE_ALARM
...
@@ -62,7 +62,7 @@ TEST(SleepForTest, AlarmSupport) {
...
@@ -62,7 +62,7 @@ TEST(SleepForTest, AlarmSupport) {
absl
::
Time
end
=
absl
::
Now
();
absl
::
Time
end
=
absl
::
Now
();
EXPECT_TRUE
(
alarm_handler_invoked
);
EXPECT_TRUE
(
alarm_handler_invoked
);
EXPECT_LE
(
sleep_time
-
absl
::
Milliseconds
(
100
),
end
-
start
);
EXPECT_LE
(
sleep_time
-
absl
::
Milliseconds
(
100
),
end
-
start
);
EXPECT_GE
(
sleep_time
+
absl
::
Milliseconds
(
1
00
),
end
-
start
);
EXPECT_GE
(
sleep_time
+
absl
::
Milliseconds
(
2
00
),
end
-
start
);
signal
(
SIGALRM
,
old_alarm
);
signal
(
SIGALRM
,
old_alarm
);
}
}
#endif // ABSL_HAVE_ALARM
#endif // ABSL_HAVE_ALARM
...
...
absl/types/optional.h
View file @
764d4bd0
...
@@ -118,6 +118,13 @@ namespace absl {
...
@@ -118,6 +118,13 @@ namespace absl {
// and `is_nothrow_swappable()` is the same as `std::is_trivial()`.
// and `is_nothrow_swappable()` is the same as `std::is_trivial()`.
// * `make_optional()` cannot be declared `constexpr` due to the absence of
// * `make_optional()` cannot be declared `constexpr` due to the absence of
// guaranteed copy elision.
// guaranteed copy elision.
// * The move constructor's `noexcept` specification is stronger, i.e. if the
// default allocator is non-throwing (via setting
// `ABSL_ALLOCATOR_NOTHROW`), it evaluates to `noexcept(true)`, because
// we assume
// a) move constructors should only throw due to allocation failure and
// b) if T's move constructor allocates, it uses the same allocation
// function as the default allocator.
template
<
typename
T
>
template
<
typename
T
>
class
optional
;
class
optional
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment