merge(3p/absl): subtree merge of Abseil up to e19260f
... notably, this includes Abseil's own StatusOr type, which conflicted with our implementation (that was taken from TensorFlow). Change-Id: Ie7d6764b64055caaeb8dc7b6b9d066291e6b538f
This commit is contained in:
parent
cc27324d02
commit
082c006c04
854 changed files with 11260 additions and 5296 deletions
42
third_party/abseil_cpp/absl/strings/str_split.h
vendored
42
third_party/abseil_cpp/absl/strings/str_split.h
vendored
|
|
@ -369,6 +369,12 @@ struct SkipWhitespace {
|
|||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
using EnableSplitIfString =
|
||||
typename std::enable_if<std::is_same<T, std::string>::value ||
|
||||
std::is_same<T, const std::string>::value,
|
||||
int>::type;
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// StrSplit()
|
||||
//------------------------------------------------------------------------------
|
||||
|
|
@ -489,22 +495,50 @@ struct SkipWhitespace {
|
|||
// Try not to depend on this distinction because the bug may one day be fixed.
|
||||
template <typename Delimiter>
|
||||
strings_internal::Splitter<
|
||||
typename strings_internal::SelectDelimiter<Delimiter>::type, AllowEmpty>
|
||||
typename strings_internal::SelectDelimiter<Delimiter>::type, AllowEmpty,
|
||||
absl::string_view>
|
||||
StrSplit(strings_internal::ConvertibleToStringView text, Delimiter d) {
|
||||
using DelimiterType =
|
||||
typename strings_internal::SelectDelimiter<Delimiter>::type;
|
||||
return strings_internal::Splitter<DelimiterType, AllowEmpty>(
|
||||
return strings_internal::Splitter<DelimiterType, AllowEmpty,
|
||||
absl::string_view>(
|
||||
text.value(), DelimiterType(d), AllowEmpty());
|
||||
}
|
||||
|
||||
template <typename Delimiter, typename StringType,
|
||||
EnableSplitIfString<StringType> = 0>
|
||||
strings_internal::Splitter<
|
||||
typename strings_internal::SelectDelimiter<Delimiter>::type, AllowEmpty,
|
||||
std::string>
|
||||
StrSplit(StringType&& text, Delimiter d) {
|
||||
using DelimiterType =
|
||||
typename strings_internal::SelectDelimiter<Delimiter>::type;
|
||||
return strings_internal::Splitter<DelimiterType, AllowEmpty, std::string>(
|
||||
std::move(text), DelimiterType(d), AllowEmpty());
|
||||
}
|
||||
|
||||
template <typename Delimiter, typename Predicate>
|
||||
strings_internal::Splitter<
|
||||
typename strings_internal::SelectDelimiter<Delimiter>::type, Predicate>
|
||||
typename strings_internal::SelectDelimiter<Delimiter>::type, Predicate,
|
||||
absl::string_view>
|
||||
StrSplit(strings_internal::ConvertibleToStringView text, Delimiter d,
|
||||
Predicate p) {
|
||||
using DelimiterType =
|
||||
typename strings_internal::SelectDelimiter<Delimiter>::type;
|
||||
return strings_internal::Splitter<DelimiterType, Predicate>(
|
||||
return strings_internal::Splitter<DelimiterType, Predicate,
|
||||
absl::string_view>(
|
||||
text.value(), DelimiterType(d), std::move(p));
|
||||
}
|
||||
|
||||
template <typename Delimiter, typename Predicate, typename StringType,
|
||||
EnableSplitIfString<StringType> = 0>
|
||||
strings_internal::Splitter<
|
||||
typename strings_internal::SelectDelimiter<Delimiter>::type, Predicate,
|
||||
std::string>
|
||||
StrSplit(StringType&& text, Delimiter d, Predicate p) {
|
||||
using DelimiterType =
|
||||
typename strings_internal::SelectDelimiter<Delimiter>::type;
|
||||
return strings_internal::Splitter<DelimiterType, Predicate, std::string>(
|
||||
std::move(text), DelimiterType(d), std::move(p));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue