Export of internal Abseil changes
-- ea0cfebeb69b25bec343652bbe1a203f5476c51a by Mark Barolak <mbar@google.com>: Change "std::string" to "string" in places where a "std::" qualification was incorrectly inserted by automation. PiperOrigin-RevId: 300108520 GitOrigin-RevId: ea0cfebeb69b25bec343652bbe1a203f5476c51a Change-Id: Ie3621e63a6ebad67b9fe56a3ebe33e1d50dac602
This commit is contained in:
parent
d936052d32
commit
a877af1f29
68 changed files with 191 additions and 191 deletions
|
@ -27,7 +27,7 @@ cmake_policy(SET CMP0025 NEW)
|
||||||
# if command can use IN_LIST
|
# if command can use IN_LIST
|
||||||
cmake_policy(SET CMP0057 NEW)
|
cmake_policy(SET CMP0057 NEW)
|
||||||
|
|
||||||
# Project version variables are the empty std::string if version is unspecified
|
# Project version variables are the empty string if version is unspecified
|
||||||
cmake_policy(SET CMP0048 NEW)
|
cmake_policy(SET CMP0048 NEW)
|
||||||
|
|
||||||
project(absl CXX)
|
project(absl CXX)
|
||||||
|
|
|
@ -2132,11 +2132,11 @@ TEST(Btree, UserProvidedKeyCompareToComparators) {
|
||||||
TEST(Btree, TryEmplaceBasicTest) {
|
TEST(Btree, TryEmplaceBasicTest) {
|
||||||
absl::btree_map<int, std::string> m;
|
absl::btree_map<int, std::string> m;
|
||||||
|
|
||||||
// Should construct a std::string from the literal.
|
// Should construct a string from the literal.
|
||||||
m.try_emplace(1, "one");
|
m.try_emplace(1, "one");
|
||||||
EXPECT_EQ(1, m.size());
|
EXPECT_EQ(1, m.size());
|
||||||
|
|
||||||
// Try other std::string constructors and const lvalue key.
|
// Try other string constructors and const lvalue key.
|
||||||
const int key(42);
|
const int key(42);
|
||||||
m.try_emplace(key, 3, 'a');
|
m.try_emplace(key, 3, 'a');
|
||||||
m.try_emplace(2, std::string("two"));
|
m.try_emplace(2, std::string("two"));
|
||||||
|
|
|
@ -83,7 +83,7 @@ int GetNonShortStringOptimizationSize() {
|
||||||
}
|
}
|
||||||
ABSL_RAW_LOG(
|
ABSL_RAW_LOG(
|
||||||
FATAL,
|
FATAL,
|
||||||
"Failed to find a std::string larger than the short std::string optimization");
|
"Failed to find a string larger than the short string optimization");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -780,7 +780,7 @@ TEST(IntVec, Reserve) {
|
||||||
TEST(StringVec, SelfRefPushBack) {
|
TEST(StringVec, SelfRefPushBack) {
|
||||||
std::vector<std::string> std_v;
|
std::vector<std::string> std_v;
|
||||||
absl::InlinedVector<std::string, 4> v;
|
absl::InlinedVector<std::string, 4> v;
|
||||||
const std::string s = "A quite long std::string to ensure heap.";
|
const std::string s = "A quite long string to ensure heap.";
|
||||||
std_v.push_back(s);
|
std_v.push_back(s);
|
||||||
v.push_back(s);
|
v.push_back(s);
|
||||||
for (int i = 0; i < 20; ++i) {
|
for (int i = 0; i < 20; ++i) {
|
||||||
|
@ -795,7 +795,7 @@ TEST(StringVec, SelfRefPushBack) {
|
||||||
TEST(StringVec, SelfRefPushBackWithMove) {
|
TEST(StringVec, SelfRefPushBackWithMove) {
|
||||||
std::vector<std::string> std_v;
|
std::vector<std::string> std_v;
|
||||||
absl::InlinedVector<std::string, 4> v;
|
absl::InlinedVector<std::string, 4> v;
|
||||||
const std::string s = "A quite long std::string to ensure heap.";
|
const std::string s = "A quite long string to ensure heap.";
|
||||||
std_v.push_back(s);
|
std_v.push_back(s);
|
||||||
v.push_back(s);
|
v.push_back(s);
|
||||||
for (int i = 0; i < 20; ++i) {
|
for (int i = 0; i < 20; ++i) {
|
||||||
|
@ -808,7 +808,7 @@ TEST(StringVec, SelfRefPushBackWithMove) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(StringVec, SelfMove) {
|
TEST(StringVec, SelfMove) {
|
||||||
const std::string s = "A quite long std::string to ensure heap.";
|
const std::string s = "A quite long string to ensure heap.";
|
||||||
for (int len = 0; len < 20; len++) {
|
for (int len = 0; len < 20; len++) {
|
||||||
SCOPED_TRACE(len);
|
SCOPED_TRACE(len);
|
||||||
absl::InlinedVector<std::string, 8> v;
|
absl::InlinedVector<std::string, 8> v;
|
||||||
|
|
|
@ -186,7 +186,7 @@ struct key_compare_to_adapter<std::greater<absl::Cord>> {
|
||||||
template <typename Key, typename Compare, typename Alloc, int TargetNodeSize,
|
template <typename Key, typename Compare, typename Alloc, int TargetNodeSize,
|
||||||
bool Multi, typename SlotPolicy>
|
bool Multi, typename SlotPolicy>
|
||||||
struct common_params {
|
struct common_params {
|
||||||
// If Compare is a common comparator for a std::string-like type, then we adapt it
|
// If Compare is a common comparator for a string-like type, then we adapt it
|
||||||
// to use heterogeneous lookup and to be a key-compare-to comparator.
|
// to use heterogeneous lookup and to be a key-compare-to comparator.
|
||||||
using key_compare = typename key_compare_to_adapter<Compare>::type;
|
using key_compare = typename key_compare_to_adapter<Compare>::type;
|
||||||
// A type which indicates if we have a key-compare-to functor or a plain old
|
// A type which indicates if we have a key-compare-to functor or a plain old
|
||||||
|
|
|
@ -277,11 +277,11 @@ TEST(CompressedTupleTest, Nested) {
|
||||||
|
|
||||||
TEST(CompressedTupleTest, Reference) {
|
TEST(CompressedTupleTest, Reference) {
|
||||||
int i = 7;
|
int i = 7;
|
||||||
std::string s = "Very long std::string that goes in the heap";
|
std::string s = "Very long string that goes in the heap";
|
||||||
CompressedTuple<int, int&, std::string, std::string&> x(i, i, s, s);
|
CompressedTuple<int, int&, std::string, std::string&> x(i, i, s, s);
|
||||||
|
|
||||||
// Sanity check. We should have not moved from `s`
|
// Sanity check. We should have not moved from `s`
|
||||||
EXPECT_EQ(s, "Very long std::string that goes in the heap");
|
EXPECT_EQ(s, "Very long string that goes in the heap");
|
||||||
|
|
||||||
EXPECT_EQ(x.get<0>(), x.get<1>());
|
EXPECT_EQ(x.get<0>(), x.get<1>());
|
||||||
EXPECT_NE(&x.get<0>(), &x.get<1>());
|
EXPECT_NE(&x.get<0>(), &x.get<1>());
|
||||||
|
|
|
@ -1666,9 +1666,9 @@ TEST(Nodes, EmptyNodeType) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Nodes, ExtractInsert) {
|
TEST(Nodes, ExtractInsert) {
|
||||||
constexpr char k0[] = "Very long std::string zero.";
|
constexpr char k0[] = "Very long string zero.";
|
||||||
constexpr char k1[] = "Very long std::string one.";
|
constexpr char k1[] = "Very long string one.";
|
||||||
constexpr char k2[] = "Very long std::string two.";
|
constexpr char k2[] = "Very long string two.";
|
||||||
StringTable t = {{k0, ""}, {k1, ""}, {k2, ""}};
|
StringTable t = {{k0, ""}, {k1, ""}, {k2, ""}};
|
||||||
EXPECT_THAT(t,
|
EXPECT_THAT(t,
|
||||||
UnorderedElementsAre(Pair(k0, ""), Pair(k1, ""), Pair(k2, "")));
|
UnorderedElementsAre(Pair(k0, ""), Pair(k1, ""), Pair(k2, "")));
|
||||||
|
|
|
@ -88,7 +88,7 @@ struct FailureSignalHandlerOptions {
|
||||||
bool call_previous_handler = false;
|
bool call_previous_handler = false;
|
||||||
|
|
||||||
// If non-null, indicates a pointer to a callback function that will be called
|
// If non-null, indicates a pointer to a callback function that will be called
|
||||||
// upon failure, with a std::string argument containing failure data. This function
|
// upon failure, with a string argument containing failure data. This function
|
||||||
// may be used as a hook to write failure data to a secondary location, such
|
// may be used as a hook to write failure data to a secondary location, such
|
||||||
// as a log file. This function may also be called with null data, as a hint
|
// as a log file. This function may also be called with null data, as a hint
|
||||||
// to flush any buffered data before the program may be terminated. Consider
|
// to flush any buffered data before the program may be terminated. Consider
|
||||||
|
|
|
@ -151,7 +151,7 @@ static const AbbrevPair kSubstitutionList[] = {
|
||||||
// frame, so every byte counts.
|
// frame, so every byte counts.
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int mangled_idx; // Cursor of mangled name.
|
int mangled_idx; // Cursor of mangled name.
|
||||||
int out_cur_idx; // Cursor of output std::string.
|
int out_cur_idx; // Cursor of output string.
|
||||||
int prev_name_idx; // For constructors/destructors.
|
int prev_name_idx; // For constructors/destructors.
|
||||||
signed int prev_name_length : 16; // For constructors/destructors.
|
signed int prev_name_length : 16; // For constructors/destructors.
|
||||||
signed int nest_level : 15; // For nested names.
|
signed int nest_level : 15; // For nested names.
|
||||||
|
@ -172,8 +172,8 @@ static_assert(sizeof(ParseState) == 4 * sizeof(int),
|
||||||
// Only one copy of this exists for each call to Demangle, so the size of this
|
// Only one copy of this exists for each call to Demangle, so the size of this
|
||||||
// struct is nearly inconsequential.
|
// struct is nearly inconsequential.
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *mangled_begin; // Beginning of input std::string.
|
const char *mangled_begin; // Beginning of input string.
|
||||||
char *out; // Beginning of output std::string.
|
char *out; // Beginning of output string.
|
||||||
int out_end_idx; // One past last allowed output character.
|
int out_end_idx; // One past last allowed output character.
|
||||||
int recursion_depth; // For stack exhaustion prevention.
|
int recursion_depth; // For stack exhaustion prevention.
|
||||||
int steps; // Cap how much work we'll do, regardless of depth.
|
int steps; // Cap how much work we'll do, regardless of depth.
|
||||||
|
|
|
@ -25,7 +25,7 @@ TEST(LeakCheckTest, LeakMemory) {
|
||||||
// failed exit code.
|
// failed exit code.
|
||||||
|
|
||||||
char* foo = strdup("lsan should complain about this leaked string");
|
char* foo = strdup("lsan should complain about this leaked string");
|
||||||
ABSL_RAW_LOG(INFO, "Should detect leaked std::string %s", foo);
|
ABSL_RAW_LOG(INFO, "Should detect leaked string %s", foo);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(LeakCheckTest, LeakMemoryAfterDisablerScope) {
|
TEST(LeakCheckTest, LeakMemoryAfterDisablerScope) {
|
||||||
|
@ -34,7 +34,7 @@ TEST(LeakCheckTest, LeakMemoryAfterDisablerScope) {
|
||||||
// failed exit code.
|
// failed exit code.
|
||||||
{ absl::LeakCheckDisabler disabler; }
|
{ absl::LeakCheckDisabler disabler; }
|
||||||
char* foo = strdup("lsan should also complain about this leaked string");
|
char* foo = strdup("lsan should also complain about this leaked string");
|
||||||
ABSL_RAW_LOG(INFO, "Re-enabled leak detection.Should detect leaked std::string %s",
|
ABSL_RAW_LOG(INFO, "Re-enabled leak detection.Should detect leaked string %s",
|
||||||
foo);
|
foo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,13 +30,13 @@ TEST(LeakCheckTest, DetectLeakSanitizer) {
|
||||||
|
|
||||||
TEST(LeakCheckTest, IgnoreLeakSuppressesLeakedMemoryErrors) {
|
TEST(LeakCheckTest, IgnoreLeakSuppressesLeakedMemoryErrors) {
|
||||||
auto foo = absl::IgnoreLeak(new std::string("some ignored leaked string"));
|
auto foo = absl::IgnoreLeak(new std::string("some ignored leaked string"));
|
||||||
ABSL_RAW_LOG(INFO, "Ignoring leaked std::string %s", foo->c_str());
|
ABSL_RAW_LOG(INFO, "Ignoring leaked string %s", foo->c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(LeakCheckTest, LeakCheckDisablerIgnoresLeak) {
|
TEST(LeakCheckTest, LeakCheckDisablerIgnoresLeak) {
|
||||||
absl::LeakCheckDisabler disabler;
|
absl::LeakCheckDisabler disabler;
|
||||||
auto foo = new std::string("some std::string leaked while checks are disabled");
|
auto foo = new std::string("some string leaked while checks are disabled");
|
||||||
ABSL_RAW_LOG(INFO, "Ignoring leaked std::string %s", foo->c_str());
|
ABSL_RAW_LOG(INFO, "Ignoring leaked string %s", foo->c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
@ -1402,7 +1402,7 @@ bool RegisterFileMappingHint(const void *start, const void *end, uint64_t offset
|
||||||
if (g_num_file_mapping_hints >= kMaxFileMappingHints) {
|
if (g_num_file_mapping_hints >= kMaxFileMappingHints) {
|
||||||
ret = false;
|
ret = false;
|
||||||
} else {
|
} else {
|
||||||
// TODO(ckennelly): Move this into a std::string copy routine.
|
// TODO(ckennelly): Move this into a string copy routine.
|
||||||
int len = strlen(filename);
|
int len = strlen(filename);
|
||||||
char *dst = static_cast<char *>(
|
char *dst = static_cast<char *>(
|
||||||
base_internal::LowLevelAlloc::AllocWithArena(len + 1, SigSafeArena()));
|
base_internal::LowLevelAlloc::AllocWithArena(len + 1, SigSafeArena()));
|
||||||
|
|
|
@ -141,7 +141,7 @@ class CommandLineFlag {
|
||||||
// Returns name of the file where this flag is defined.
|
// Returns name of the file where this flag is defined.
|
||||||
virtual std::string Filename() const = 0;
|
virtual std::string Filename() const = 0;
|
||||||
// Returns name of the flag's value type for some built-in types or empty
|
// Returns name of the flag's value type for some built-in types or empty
|
||||||
// std::string.
|
// string.
|
||||||
virtual absl::string_view Typename() const = 0;
|
virtual absl::string_view Typename() const = 0;
|
||||||
// Returns help message associated with this flag.
|
// Returns help message associated with this flag.
|
||||||
virtual std::string Help() const = 0;
|
virtual std::string Help() const = 0;
|
||||||
|
@ -163,7 +163,7 @@ class CommandLineFlag {
|
||||||
// or nullptr if flag does not support saving and restoring a state.
|
// or nullptr if flag does not support saving and restoring a state.
|
||||||
virtual std::unique_ptr<FlagStateInterface> SaveState() = 0;
|
virtual std::unique_ptr<FlagStateInterface> SaveState() = 0;
|
||||||
|
|
||||||
// Sets the value of the flag based on specified std::string `value`. If the flag
|
// Sets the value of the flag based on specified string `value`. If the flag
|
||||||
// was successfully set to new value, it returns true. Otherwise, sets `error`
|
// was successfully set to new value, it returns true. Otherwise, sets `error`
|
||||||
// to indicate the error, leaves the flag unchanged, and returns false. There
|
// to indicate the error, leaves the flag unchanged, and returns false. There
|
||||||
// are three ways to set the flag's value:
|
// are three ways to set the flag's value:
|
||||||
|
@ -176,7 +176,7 @@ class CommandLineFlag {
|
||||||
flags_internal::ValueSource source,
|
flags_internal::ValueSource source,
|
||||||
std::string* error) = 0;
|
std::string* error) = 0;
|
||||||
|
|
||||||
// Checks that flags default value can be converted to std::string and back to the
|
// Checks that flags default value can be converted to string and back to the
|
||||||
// flag's value type.
|
// flag's value type.
|
||||||
virtual void CheckDefaultValueParsingRoundtrip() const = 0;
|
virtual void CheckDefaultValueParsingRoundtrip() const = 0;
|
||||||
|
|
||||||
|
|
|
@ -408,7 +408,7 @@ void FlagImpl::CheckDefaultValueParsingRoundtrip() const {
|
||||||
ABSL_INTERNAL_LOG(
|
ABSL_INTERNAL_LOG(
|
||||||
FATAL,
|
FATAL,
|
||||||
absl::StrCat("Flag ", Name(), " (from ", Filename(),
|
absl::StrCat("Flag ", Name(), " (from ", Filename(),
|
||||||
"): std::string form of default value '", v,
|
"): string form of default value '", v,
|
||||||
"' could not be parsed; error=", error));
|
"' could not be parsed; error=", error));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -439,7 +439,7 @@ class FlagImpl {
|
||||||
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard());
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*DataGuard());
|
||||||
// Flag initialization called via absl::call_once.
|
// Flag initialization called via absl::call_once.
|
||||||
void Init();
|
void Init();
|
||||||
// Attempts to parse supplied `value` std::string. If parsing is successful,
|
// Attempts to parse supplied `value` string. If parsing is successful,
|
||||||
// returns new value. Otherwise returns nullptr.
|
// returns new value. Otherwise returns nullptr.
|
||||||
std::unique_ptr<void, DynValueDeleter> TryParse(absl::string_view value,
|
std::unique_ptr<void, DynValueDeleter> TryParse(absl::string_view value,
|
||||||
std::string* err) const
|
std::string* err) const
|
||||||
|
|
|
@ -134,14 +134,14 @@ class FlagHelpPrettyPrinter {
|
||||||
first_line_(true) {}
|
first_line_(true) {}
|
||||||
|
|
||||||
void Write(absl::string_view str, bool wrap_line = false) {
|
void Write(absl::string_view str, bool wrap_line = false) {
|
||||||
// Empty std::string - do nothing.
|
// Empty string - do nothing.
|
||||||
if (str.empty()) return;
|
if (str.empty()) return;
|
||||||
|
|
||||||
std::vector<absl::string_view> tokens;
|
std::vector<absl::string_view> tokens;
|
||||||
if (wrap_line) {
|
if (wrap_line) {
|
||||||
for (auto line : absl::StrSplit(str, absl::ByAnyChar("\n\r"))) {
|
for (auto line : absl::StrSplit(str, absl::ByAnyChar("\n\r"))) {
|
||||||
if (!tokens.empty()) {
|
if (!tokens.empty()) {
|
||||||
// Keep line separators in the input std::string.
|
// Keep line separators in the input string.
|
||||||
tokens.push_back("\n");
|
tokens.push_back("\n");
|
||||||
}
|
}
|
||||||
for (auto token :
|
for (auto token :
|
||||||
|
@ -156,13 +156,13 @@ class FlagHelpPrettyPrinter {
|
||||||
for (auto token : tokens) {
|
for (auto token : tokens) {
|
||||||
bool new_line = (line_len_ == 0);
|
bool new_line = (line_len_ == 0);
|
||||||
|
|
||||||
// Respect line separators in the input std::string.
|
// Respect line separators in the input string.
|
||||||
if (token == "\n") {
|
if (token == "\n") {
|
||||||
EndLine();
|
EndLine();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write the token, ending the std::string first if necessary/possible.
|
// Write the token, ending the string first if necessary/possible.
|
||||||
if (!new_line && (line_len_ + token.size() >= max_line_len_)) {
|
if (!new_line && (line_len_ + token.size() >= max_line_len_)) {
|
||||||
EndLine();
|
EndLine();
|
||||||
new_line = true;
|
new_line = true;
|
||||||
|
|
|
@ -172,7 +172,7 @@ std::string Unparse(long long v) { return absl::StrCat(v); }
|
||||||
std::string Unparse(unsigned long long v) { return absl::StrCat(v); }
|
std::string Unparse(unsigned long long v) { return absl::StrCat(v); }
|
||||||
template <typename T>
|
template <typename T>
|
||||||
std::string UnparseFloatingPointVal(T v) {
|
std::string UnparseFloatingPointVal(T v) {
|
||||||
// digits10 is guaranteed to roundtrip correctly in std::string -> value -> std::string
|
// digits10 is guaranteed to roundtrip correctly in string -> value -> string
|
||||||
// conversions, but may not be enough to represent all the values correctly.
|
// conversions, but may not be enough to represent all the values correctly.
|
||||||
std::string digit10_str =
|
std::string digit10_str =
|
||||||
absl::StrFormat("%.*g", std::numeric_limits<T>::digits10, v);
|
absl::StrFormat("%.*g", std::numeric_limits<T>::digits10, v);
|
||||||
|
|
|
@ -533,10 +533,10 @@ std::tuple<bool, absl::string_view> DeduceFlagValue(const CommandLineFlag& flag,
|
||||||
curr_list->PopFront();
|
curr_list->PopFront();
|
||||||
value = curr_list->Front();
|
value = curr_list->Front();
|
||||||
|
|
||||||
// Heuristic to detect the case where someone treats a std::string arg
|
// Heuristic to detect the case where someone treats a string arg
|
||||||
// like a bool or just forgets to pass a value:
|
// like a bool or just forgets to pass a value:
|
||||||
// --my_string_var --foo=bar
|
// --my_string_var --foo=bar
|
||||||
// We look for a flag of std::string type, whose value begins with a
|
// We look for a flag of string type, whose value begins with a
|
||||||
// dash and corresponds to known flag or standalone --.
|
// dash and corresponds to known flag or standalone --.
|
||||||
if (!value.empty() && value[0] == '-' && flag.IsOfType<std::string>()) {
|
if (!value.empty() && value[0] == '-' && flag.IsOfType<std::string>()) {
|
||||||
auto maybe_flag_name = std::get<0>(SplitNameAndValue(value.substr(1)));
|
auto maybe_flag_name = std::get<0>(SplitNameAndValue(value.substr(1)));
|
||||||
|
@ -646,7 +646,7 @@ std::vector<char*> ParseCommandLineImpl(int argc, char* argv[],
|
||||||
|
|
||||||
// 60. Split the current argument on '=' to figure out the argument
|
// 60. Split the current argument on '=' to figure out the argument
|
||||||
// name and value. If flag name is empty it means we've got "--". value
|
// name and value. If flag name is empty it means we've got "--". value
|
||||||
// can be empty either if there were no '=' in argument std::string at all or
|
// can be empty either if there were no '=' in argument string at all or
|
||||||
// an argument looked like "--foo=". In a latter case is_empty_value is
|
// an argument looked like "--foo=". In a latter case is_empty_value is
|
||||||
// true.
|
// true.
|
||||||
absl::string_view flag_name;
|
absl::string_view flag_name;
|
||||||
|
|
|
@ -90,7 +90,7 @@ struct FlagsUsageConfig {
|
||||||
// program output.
|
// program output.
|
||||||
flags_internal::FlagKindFilter contains_helppackage_flags;
|
flags_internal::FlagKindFilter contains_helppackage_flags;
|
||||||
|
|
||||||
// Generates std::string containing program version. This is the std::string reported
|
// Generates string containing program version. This is the string reported
|
||||||
// when user specifies --version in a command line.
|
// when user specifies --version in a command line.
|
||||||
std::function<std::string()> version_string;
|
std::function<std::string()> version_string;
|
||||||
|
|
||||||
|
|
|
@ -316,7 +316,7 @@ TEST(HashValueTest, Strings) {
|
||||||
t(std::string(huge)), t(absl::string_view(huge)), //
|
t(std::string(huge)), t(absl::string_view(huge)), //
|
||||||
t(FlatCord(huge)), t(FragmentedCord(huge)))));
|
t(FlatCord(huge)), t(FragmentedCord(huge)))));
|
||||||
|
|
||||||
// Make sure that hashing a `const char*` does not use its std::string-value.
|
// Make sure that hashing a `const char*` does not use its string-value.
|
||||||
EXPECT_NE(SpyHash(static_cast<const char*>("ABC")),
|
EXPECT_NE(SpyHash(static_cast<const char*>("ABC")),
|
||||||
SpyHash(absl::string_view("ABC")));
|
SpyHash(absl::string_view("ABC")));
|
||||||
}
|
}
|
||||||
|
@ -512,7 +512,7 @@ TEST(HashValueTest, CombinePiecewiseBuffer) {
|
||||||
SCOPED_TRACE(big_buffer_size);
|
SCOPED_TRACE(big_buffer_size);
|
||||||
std::string big_buffer;
|
std::string big_buffer;
|
||||||
for (int i = 0; i < big_buffer_size; ++i) {
|
for (int i = 0; i < big_buffer_size; ++i) {
|
||||||
// Arbitrary std::string
|
// Arbitrary string
|
||||||
big_buffer.push_back(32 + (i * (i / 3)) % 64);
|
big_buffer.push_back(32 + (i * (i / 3)) % 64);
|
||||||
}
|
}
|
||||||
auto big_buffer_hash = hash(PiecewiseHashTester(big_buffer));
|
auto big_buffer_hash = hash(PiecewiseHashTester(big_buffer));
|
||||||
|
|
|
@ -131,7 +131,7 @@ TEST(BernoulliTest, StabilityTest) {
|
||||||
0x275b0dc7e0a18acfull, 0x36cebe0d2653682eull, 0x0361e9b23861596bull,
|
0x275b0dc7e0a18acfull, 0x36cebe0d2653682eull, 0x0361e9b23861596bull,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Generate a std::string of '0' and '1' for the distribution output.
|
// Generate a string of '0' and '1' for the distribution output.
|
||||||
auto generate = [&urbg](absl::bernoulli_distribution& dist) {
|
auto generate = [&urbg](absl::bernoulli_distribution& dist) {
|
||||||
std::string output;
|
std::string output;
|
||||||
output.reserve(36);
|
output.reserve(36);
|
||||||
|
@ -176,7 +176,7 @@ TEST(BernoulliTest, StabilityTest2) {
|
||||||
0xECDD4775619F1510ull, 0x13CCA830EB61BD96ull, 0x0334FE1EAA0363CFull,
|
0xECDD4775619F1510ull, 0x13CCA830EB61BD96ull, 0x0334FE1EAA0363CFull,
|
||||||
0xB5735C904C70A239ull, 0xD59E9E0BCBAADE14ull, 0xEECC86BC60622CA7ull});
|
0xB5735C904C70A239ull, 0xD59E9E0BCBAADE14ull, 0xEECC86BC60622CA7ull});
|
||||||
|
|
||||||
// Generate a std::string of '0' and '1' for the distribution output.
|
// Generate a string of '0' and '1' for the distribution output.
|
||||||
auto generate = [&urbg](absl::bernoulli_distribution& dist) {
|
auto generate = [&urbg](absl::bernoulli_distribution& dist) {
|
||||||
std::string output;
|
std::string output;
|
||||||
output.reserve(13);
|
output.reserve(13);
|
||||||
|
|
|
@ -101,7 +101,7 @@ std::string BrandString() {
|
||||||
char brand_string[49];
|
char brand_string[49];
|
||||||
uint32_t abcd[4];
|
uint32_t abcd[4];
|
||||||
|
|
||||||
// Check if brand std::string is supported (it is on all reasonable Intel/AMD)
|
// Check if brand string is supported (it is on all reasonable Intel/AMD)
|
||||||
Cpuid(0x80000000U, 0, abcd);
|
Cpuid(0x80000000U, 0, abcd);
|
||||||
if (abcd[0] < 0x80000004U) {
|
if (abcd[0] < 0x80000004U) {
|
||||||
return std::string();
|
return std::string();
|
||||||
|
|
|
@ -123,7 +123,7 @@ TYPED_TEST(UniformIntDistributionTest, ViolatesPreconditionsDeathTest) {
|
||||||
absl::uniform_int_distribution<TypeParam> dist(10, 1);
|
absl::uniform_int_distribution<TypeParam> dist(10, 1);
|
||||||
auto x = dist(gen);
|
auto x = dist(gen);
|
||||||
|
|
||||||
// Any value will generate a non-empty std::string.
|
// Any value will generate a non-empty string.
|
||||||
EXPECT_FALSE(absl::StrCat(+x).empty()) << x;
|
EXPECT_FALSE(absl::StrCat(+x).empty()) << x;
|
||||||
#endif // NDEBUG
|
#endif // NDEBUG
|
||||||
}
|
}
|
||||||
|
|
|
@ -177,7 +177,7 @@ void Status::ForEachPayload(
|
||||||
visitor(elem.type_url, elem.payload);
|
visitor(elem.type_url, elem.payload);
|
||||||
#else
|
#else
|
||||||
// In debug mode invalidate the type url to prevent users from relying on
|
// In debug mode invalidate the type url to prevent users from relying on
|
||||||
// this std::string lifetime.
|
// this string lifetime.
|
||||||
|
|
||||||
// NOLINTNEXTLINE intentional extra conversion to force temporary.
|
// NOLINTNEXTLINE intentional extra conversion to force temporary.
|
||||||
visitor(std::string(elem.type_url), elem.payload);
|
visitor(std::string(elem.type_url), elem.payload);
|
||||||
|
|
|
@ -122,7 +122,7 @@ class ABSL_MUST_USE_RESULT Status final {
|
||||||
|
|
||||||
// Returns the error message. Note: prefer ToString() for debug logging.
|
// Returns the error message. Note: prefer ToString() for debug logging.
|
||||||
// This message rarely describes the error code. It is not unusual for the
|
// This message rarely describes the error code. It is not unusual for the
|
||||||
// error message to be the empty std::string.
|
// error message to be the empty string.
|
||||||
absl::string_view message() const;
|
absl::string_view message() const;
|
||||||
|
|
||||||
friend bool operator==(const Status&, const Status&);
|
friend bool operator==(const Status&, const Status&);
|
||||||
|
@ -231,7 +231,7 @@ class ABSL_MUST_USE_RESULT Status final {
|
||||||
static uintptr_t PointerToRep(status_internal::StatusRep* r);
|
static uintptr_t PointerToRep(status_internal::StatusRep* r);
|
||||||
static status_internal::StatusRep* RepToPointer(uintptr_t r);
|
static status_internal::StatusRep* RepToPointer(uintptr_t r);
|
||||||
|
|
||||||
// Returns std::string for non-ok Status.
|
// Returns string for non-ok Status.
|
||||||
std::string ToStringSlow() const;
|
std::string ToStringSlow() const;
|
||||||
|
|
||||||
// Status supports two different representations.
|
// Status supports two different representations.
|
||||||
|
|
|
@ -619,10 +619,10 @@ from_chars_result FromCharsImpl(const char* first, const char* last,
|
||||||
// Either we failed to parse a hex float after the "0x", or we read
|
// Either we failed to parse a hex float after the "0x", or we read
|
||||||
// "0xinf" or "0xnan" which we don't want to match.
|
// "0xinf" or "0xnan" which we don't want to match.
|
||||||
//
|
//
|
||||||
// However, a std::string that begins with "0x" also begins with "0", which
|
// However, a string that begins with "0x" also begins with "0", which
|
||||||
// is normally a valid match for the number zero. So we want these
|
// is normally a valid match for the number zero. So we want these
|
||||||
// strings to match zero unless fmt_flags is `scientific`. (This flag
|
// strings to match zero unless fmt_flags is `scientific`. (This flag
|
||||||
// means an exponent is required, which the std::string "0" does not have.)
|
// means an exponent is required, which the string "0" does not have.)
|
||||||
if (fmt_flags == chars_format::scientific) {
|
if (fmt_flags == chars_format::scientific) {
|
||||||
result.ec = std::errc::invalid_argument;
|
result.ec = std::errc::invalid_argument;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -132,7 +132,7 @@ BENCHMARK(BM_Absl_HugeMantissa);
|
||||||
std::string MakeHardCase(int length) {
|
std::string MakeHardCase(int length) {
|
||||||
// The number 1.1521...e-297 is exactly halfway between 12345 * 2**-1000 and
|
// The number 1.1521...e-297 is exactly halfway between 12345 * 2**-1000 and
|
||||||
// the next larger representable number. The digits of this number are in
|
// the next larger representable number. The digits of this number are in
|
||||||
// the std::string below.
|
// the string below.
|
||||||
const std::string digits =
|
const std::string digits =
|
||||||
"1."
|
"1."
|
||||||
"152113937042223790993097181572444900347587985074226836242307364987727724"
|
"152113937042223790993097181572444900347587985074226836242307364987727724"
|
||||||
|
|
|
@ -278,7 +278,7 @@ class Cord {
|
||||||
|
|
||||||
// Copies the contents from `src` to `*dst`.
|
// Copies the contents from `src` to `*dst`.
|
||||||
//
|
//
|
||||||
// This function optimizes the case of reusing the destination std::string since it
|
// This function optimizes the case of reusing the destination string since it
|
||||||
// can reuse previously allocated capacity. However, this function does not
|
// can reuse previously allocated capacity. However, this function does not
|
||||||
// guarantee that pointers previously returned by `dst->data()` remain valid
|
// guarantee that pointers previously returned by `dst->data()` remain valid
|
||||||
// even if `*dst` had enough capacity to hold `src`. If `*dst` is a new
|
// even if `*dst` had enough capacity to hold `src`. If `*dst` is a new
|
||||||
|
@ -603,7 +603,7 @@ class Cord {
|
||||||
}
|
}
|
||||||
void CopyTo(std::string* dst) const {
|
void CopyTo(std::string* dst) const {
|
||||||
// memcpy is much faster when operating on a known size. On most supported
|
// memcpy is much faster when operating on a known size. On most supported
|
||||||
// platforms, the small std::string optimization is large enough that resizing
|
// platforms, the small string optimization is large enough that resizing
|
||||||
// to 15 bytes does not cause a memory allocation.
|
// to 15 bytes does not cause a memory allocation.
|
||||||
absl::strings_internal::STLStringResizeUninitialized(dst,
|
absl::strings_internal::STLStringResizeUninitialized(dst,
|
||||||
sizeof(data_) - 1);
|
sizeof(data_) - 1);
|
||||||
|
|
|
@ -174,7 +174,7 @@ TEST(Cord, AllFlatSizes) {
|
||||||
using absl::strings_internal::CordTestAccess;
|
using absl::strings_internal::CordTestAccess;
|
||||||
|
|
||||||
for (size_t s = 0; s < CordTestAccess::MaxFlatLength(); s++) {
|
for (size_t s = 0; s < CordTestAccess::MaxFlatLength(); s++) {
|
||||||
// Make a std::string of length s.
|
// Make a string of length s.
|
||||||
std::string src;
|
std::string src;
|
||||||
while (src.size() < s) {
|
while (src.size() < s) {
|
||||||
src.push_back('a' + (src.size() % 26));
|
src.push_back('a' + (src.size() % 26));
|
||||||
|
@ -409,7 +409,7 @@ static void VerifyCopyToString(const absl::Cord& cord) {
|
||||||
|
|
||||||
if (cord.size() <= kInitialLength) {
|
if (cord.size() <= kInitialLength) {
|
||||||
EXPECT_EQ(has_initial_contents.data(), address_before_copy)
|
EXPECT_EQ(has_initial_contents.data(), address_before_copy)
|
||||||
<< "CopyCordToString allocated new std::string storage; "
|
<< "CopyCordToString allocated new string storage; "
|
||||||
"has_initial_contents = \""
|
"has_initial_contents = \""
|
||||||
<< has_initial_contents << "\"";
|
<< has_initial_contents << "\"";
|
||||||
}
|
}
|
||||||
|
@ -856,7 +856,7 @@ TEST(Cord, CompareAfterAssign) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test CompareTo() and ComparePrefix() against string and substring
|
// Test CompareTo() and ComparePrefix() against string and substring
|
||||||
// comparison methods from std::basic_string.
|
// comparison methods from basic_string.
|
||||||
static void TestCompare(const absl::Cord& c, const absl::Cord& d,
|
static void TestCompare(const absl::Cord& c, const absl::Cord& d,
|
||||||
RandomEngine* rng) {
|
RandomEngine* rng) {
|
||||||
typedef std::basic_string<uint8_t> ustring;
|
typedef std::basic_string<uint8_t> ustring;
|
||||||
|
@ -912,7 +912,7 @@ void CompareOperators() {
|
||||||
|
|
||||||
EXPECT_TRUE(a == a);
|
EXPECT_TRUE(a == a);
|
||||||
// For pointer type (i.e. `const char*`), operator== compares the address
|
// For pointer type (i.e. `const char*`), operator== compares the address
|
||||||
// instead of the std::string, so `a == const char*("a")` isn't necessarily true.
|
// instead of the string, so `a == const char*("a")` isn't necessarily true.
|
||||||
EXPECT_TRUE(std::is_pointer<T1>::value || a == T1("a"));
|
EXPECT_TRUE(std::is_pointer<T1>::value || a == T1("a"));
|
||||||
EXPECT_TRUE(std::is_pointer<T2>::value || a == T2("a"));
|
EXPECT_TRUE(std::is_pointer<T2>::value || a == T2("a"));
|
||||||
EXPECT_FALSE(a == b);
|
EXPECT_FALSE(a == b);
|
||||||
|
|
|
@ -450,7 +450,7 @@ bool Base64UnescapeInternal(const char* src_param, size_t szsrc, char* dest,
|
||||||
|
|
||||||
// The GET_INPUT macro gets the next input character, skipping
|
// The GET_INPUT macro gets the next input character, skipping
|
||||||
// over any whitespace, and stopping when we reach the end of the
|
// over any whitespace, and stopping when we reach the end of the
|
||||||
// std::string or when we read any non-data character. The arguments are
|
// string or when we read any non-data character. The arguments are
|
||||||
// an arbitrary identifier (used as a label for goto) and the number
|
// an arbitrary identifier (used as a label for goto) and the number
|
||||||
// of data bytes that must remain in the input to avoid aborting the
|
// of data bytes that must remain in the input to avoid aborting the
|
||||||
// loop.
|
// loop.
|
||||||
|
@ -473,18 +473,18 @@ bool Base64UnescapeInternal(const char* src_param, size_t szsrc, char* dest,
|
||||||
if (dest) {
|
if (dest) {
|
||||||
// This loop consumes 4 input bytes and produces 3 output bytes
|
// This loop consumes 4 input bytes and produces 3 output bytes
|
||||||
// per iteration. We can't know at the start that there is enough
|
// per iteration. We can't know at the start that there is enough
|
||||||
// data left in the std::string for a full iteration, so the loop may
|
// data left in the string for a full iteration, so the loop may
|
||||||
// break out in the middle; if so 'state' will be set to the
|
// break out in the middle; if so 'state' will be set to the
|
||||||
// number of input bytes read.
|
// number of input bytes read.
|
||||||
|
|
||||||
while (szsrc >= 4) {
|
while (szsrc >= 4) {
|
||||||
// We'll start by optimistically assuming that the next four
|
// We'll start by optimistically assuming that the next four
|
||||||
// bytes of the std::string (src[0..3]) are four good data bytes
|
// bytes of the string (src[0..3]) are four good data bytes
|
||||||
// (that is, no nulls, whitespace, padding chars, or illegal
|
// (that is, no nulls, whitespace, padding chars, or illegal
|
||||||
// chars). We need to test src[0..2] for nulls individually
|
// chars). We need to test src[0..2] for nulls individually
|
||||||
// before constructing temp to preserve the property that we
|
// before constructing temp to preserve the property that we
|
||||||
// never read past a null in the std::string (no matter how long
|
// never read past a null in the string (no matter how long
|
||||||
// szsrc claims the std::string is).
|
// szsrc claims the string is).
|
||||||
|
|
||||||
if (!src[0] || !src[1] || !src[2] ||
|
if (!src[0] || !src[1] || !src[2] ||
|
||||||
((temp = ((unsigned(unbase64[src[0]]) << 18) |
|
((temp = ((unsigned(unbase64[src[0]]) << 18) |
|
||||||
|
@ -509,7 +509,7 @@ bool Base64UnescapeInternal(const char* src_param, size_t szsrc, char* dest,
|
||||||
temp = (temp << 6) | decode;
|
temp = (temp << 6) | decode;
|
||||||
} else {
|
} else {
|
||||||
// We really did have four good data bytes, so advance four
|
// We really did have four good data bytes, so advance four
|
||||||
// characters in the std::string.
|
// characters in the string.
|
||||||
|
|
||||||
szsrc -= 4;
|
szsrc -= 4;
|
||||||
src += 4;
|
src += 4;
|
||||||
|
@ -644,7 +644,7 @@ bool Base64UnescapeInternal(const char* src_param, size_t szsrc, char* dest,
|
||||||
state);
|
state);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The remainder of the std::string should be all whitespace, mixed with
|
// The remainder of the string should be all whitespace, mixed with
|
||||||
// exactly 0 equals signs, or exactly 'expected_equals' equals
|
// exactly 0 equals signs, or exactly 'expected_equals' equals
|
||||||
// signs. (Always accepting 0 equals signs is an Abseil extension
|
// signs. (Always accepting 0 equals signs is an Abseil extension
|
||||||
// not covered in the RFC, as is accepting dot as the pad character.)
|
// not covered in the RFC, as is accepting dot as the pad character.)
|
||||||
|
@ -771,7 +771,7 @@ constexpr char kWebSafeBase64Chars[] =
|
||||||
template <typename String>
|
template <typename String>
|
||||||
bool Base64UnescapeInternal(const char* src, size_t slen, String* dest,
|
bool Base64UnescapeInternal(const char* src, size_t slen, String* dest,
|
||||||
const signed char* unbase64) {
|
const signed char* unbase64) {
|
||||||
// Determine the size of the output std::string. Base64 encodes every 3 bytes into
|
// Determine the size of the output string. Base64 encodes every 3 bytes into
|
||||||
// 4 characters. any leftover chars are added directly for good measure.
|
// 4 characters. any leftover chars are added directly for good measure.
|
||||||
// This is documented in the base64 RFC: http://tools.ietf.org/html/rfc3548
|
// This is documented in the base64 RFC: http://tools.ietf.org/html/rfc3548
|
||||||
const size_t dest_len = 3 * (slen / 4) + (slen % 4);
|
const size_t dest_len = 3 * (slen / 4) + (slen % 4);
|
||||||
|
@ -779,7 +779,7 @@ bool Base64UnescapeInternal(const char* src, size_t slen, String* dest,
|
||||||
strings_internal::STLStringResizeUninitialized(dest, dest_len);
|
strings_internal::STLStringResizeUninitialized(dest, dest_len);
|
||||||
|
|
||||||
// We are getting the destination buffer by getting the beginning of the
|
// We are getting the destination buffer by getting the beginning of the
|
||||||
// std::string and converting it into a char *.
|
// string and converting it into a char *.
|
||||||
size_t len;
|
size_t len;
|
||||||
const bool ok =
|
const bool ok =
|
||||||
Base64UnescapeInternal(src, slen, &(*dest)[0], dest_len, unbase64, &len);
|
Base64UnescapeInternal(src, slen, &(*dest)[0], dest_len, unbase64, &len);
|
||||||
|
|
|
@ -300,7 +300,7 @@ static struct {
|
||||||
absl::string_view plaintext;
|
absl::string_view plaintext;
|
||||||
absl::string_view cyphertext;
|
absl::string_view cyphertext;
|
||||||
} const base64_tests[] = {
|
} const base64_tests[] = {
|
||||||
// Empty std::string.
|
// Empty string.
|
||||||
{{"", 0}, {"", 0}},
|
{{"", 0}, {"", 0}},
|
||||||
{{nullptr, 0},
|
{{nullptr, 0},
|
||||||
{"", 0}}, // if length is zero, plaintext ptr must be ignored!
|
{"", 0}}, // if length is zero, plaintext ptr must be ignored!
|
||||||
|
@ -586,7 +586,7 @@ void TestEscapeAndUnescape() {
|
||||||
EXPECT_EQ(encoded, websafe);
|
EXPECT_EQ(encoded, websafe);
|
||||||
EXPECT_EQ(absl::WebSafeBase64Escape(tc.plaintext), websafe);
|
EXPECT_EQ(absl::WebSafeBase64Escape(tc.plaintext), websafe);
|
||||||
|
|
||||||
// Let's try the std::string version of the decoder
|
// Let's try the string version of the decoder
|
||||||
decoded = "this junk should be ignored";
|
decoded = "this junk should be ignored";
|
||||||
EXPECT_TRUE(absl::WebSafeBase64Unescape(websafe, &decoded));
|
EXPECT_TRUE(absl::WebSafeBase64Unescape(websafe, &decoded));
|
||||||
EXPECT_EQ(decoded, tc.plaintext);
|
EXPECT_EQ(decoded, tc.plaintext);
|
||||||
|
@ -625,7 +625,7 @@ TEST(Base64, DISABLED_HugeData) {
|
||||||
std::string escaped;
|
std::string escaped;
|
||||||
absl::Base64Escape(huge, &escaped);
|
absl::Base64Escape(huge, &escaped);
|
||||||
|
|
||||||
// Generates the std::string that should match a base64 encoded "xxx..." std::string.
|
// Generates the string that should match a base64 encoded "xxx..." string.
|
||||||
// "xxx" in base64 is "eHh4".
|
// "xxx" in base64 is "eHh4".
|
||||||
std::string expected_encoding;
|
std::string expected_encoding;
|
||||||
expected_encoding.reserve(kSize / 3 * 4);
|
expected_encoding.reserve(kSize / 3 * 4);
|
||||||
|
|
|
@ -72,7 +72,7 @@ class Charmap {
|
||||||
CharMaskForWord(x, 2), CharMaskForWord(x, 3));
|
CharMaskForWord(x, 2), CharMaskForWord(x, 3));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Containing all the chars in the C-std::string 's'.
|
// Containing all the chars in the C-string 's'.
|
||||||
// Note that this is expensively recursive because of the C++11 constexpr
|
// Note that this is expensively recursive because of the C++11 constexpr
|
||||||
// formulation. Use only in constexpr initializers.
|
// formulation. Use only in constexpr initializers.
|
||||||
static constexpr Charmap FromString(const char* s) {
|
static constexpr Charmap FromString(const char* s) {
|
||||||
|
|
|
@ -208,7 +208,7 @@ int BigUnsigned<max_words>::ReadDigits(const char* begin, const char* end,
|
||||||
++dropped_digits;
|
++dropped_digits;
|
||||||
}
|
}
|
||||||
if (begin < end && *std::prev(end) == '.') {
|
if (begin < end && *std::prev(end) == '.') {
|
||||||
// If the std::string ends in '.', either before or after dropping zeroes, then
|
// If the string ends in '.', either before or after dropping zeroes, then
|
||||||
// drop the decimal point and look for more digits to drop.
|
// drop the decimal point and look for more digits to drop.
|
||||||
dropped_digits = 0;
|
dropped_digits = 0;
|
||||||
--end;
|
--end;
|
||||||
|
|
|
@ -66,7 +66,7 @@ class BigUnsigned {
|
||||||
static_cast<uint32_t>(v >> 32)} {}
|
static_cast<uint32_t>(v >> 32)} {}
|
||||||
|
|
||||||
// Constructs a BigUnsigned from the given string_view containing a decimal
|
// Constructs a BigUnsigned from the given string_view containing a decimal
|
||||||
// value. If the input std::string is not a decimal integer, constructs a 0
|
// value. If the input string is not a decimal integer, constructs a 0
|
||||||
// instead.
|
// instead.
|
||||||
explicit BigUnsigned(absl::string_view sv) : size_(0), words_{} {
|
explicit BigUnsigned(absl::string_view sv) : size_(0), words_{} {
|
||||||
// Check for valid input, returning a 0 otherwise. This is reasonable
|
// Check for valid input, returning a 0 otherwise. This is reasonable
|
||||||
|
@ -210,7 +210,7 @@ class BigUnsigned {
|
||||||
return words_[index];
|
return words_[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns this integer as a decimal std::string. This is not used in the decimal-
|
// Returns this integer as a decimal string. This is not used in the decimal-
|
||||||
// to-binary conversion; it is intended to aid in testing.
|
// to-binary conversion; it is intended to aid in testing.
|
||||||
std::string ToString() const;
|
std::string ToString() const;
|
||||||
|
|
||||||
|
|
|
@ -302,7 +302,7 @@ bool ParseInfinityOrNan(const char* begin, const char* end,
|
||||||
switch (*begin) {
|
switch (*begin) {
|
||||||
case 'i':
|
case 'i':
|
||||||
case 'I': {
|
case 'I': {
|
||||||
// An infinity std::string consists of the characters "inf" or "infinity",
|
// An infinity string consists of the characters "inf" or "infinity",
|
||||||
// case insensitive.
|
// case insensitive.
|
||||||
if (strings_internal::memcasecmp(begin + 1, "nf", 2) != 0) {
|
if (strings_internal::memcasecmp(begin + 1, "nf", 2) != 0) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -326,7 +326,7 @@ bool ParseInfinityOrNan(const char* begin, const char* end,
|
||||||
}
|
}
|
||||||
out->type = strings_internal::FloatType::kNan;
|
out->type = strings_internal::FloatType::kNan;
|
||||||
out->end = begin + 3;
|
out->end = begin + 3;
|
||||||
// NaN is allowed to be followed by a parenthesized std::string, consisting of
|
// NaN is allowed to be followed by a parenthesized string, consisting of
|
||||||
// only the characters [a-zA-Z0-9_]. Match that if it's present.
|
// only the characters [a-zA-Z0-9_]. Match that if it's present.
|
||||||
begin += 3;
|
begin += 3;
|
||||||
if (begin < end && *begin == '(') {
|
if (begin < end && *begin == '(') {
|
||||||
|
|
|
@ -63,7 +63,7 @@ void ExpectParsedFloat(std::string s, absl::chars_format format_flags,
|
||||||
}
|
}
|
||||||
const std::string::size_type expected_characters_matched = s.find('$');
|
const std::string::size_type expected_characters_matched = s.find('$');
|
||||||
ABSL_RAW_CHECK(expected_characters_matched != std::string::npos,
|
ABSL_RAW_CHECK(expected_characters_matched != std::string::npos,
|
||||||
"Input std::string must contain $");
|
"Input string must contain $");
|
||||||
s.replace(expected_characters_matched, 1, "");
|
s.replace(expected_characters_matched, 1, "");
|
||||||
|
|
||||||
ParsedFloat parsed =
|
ParsedFloat parsed =
|
||||||
|
|
|
@ -170,7 +170,7 @@ inline const std::array<uint64_test_case, 34>& strtouint64_test_cases() {
|
||||||
|
|
||||||
{"0x1234", true, 16, 0x1234},
|
{"0x1234", true, 16, 0x1234},
|
||||||
|
|
||||||
// Base-10 std::string version.
|
// Base-10 string version.
|
||||||
{"1234", true, 0, 1234},
|
{"1234", true, 0, 1234},
|
||||||
{nullptr, false, 0, 0},
|
{nullptr, false, 0, 0},
|
||||||
}};
|
}};
|
||||||
|
|
|
@ -76,11 +76,11 @@ class FormatSpecTemplate
|
||||||
public:
|
public:
|
||||||
#ifdef ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
|
#ifdef ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
|
||||||
|
|
||||||
// Honeypot overload for when the std::string is not constexpr.
|
// Honeypot overload for when the string is not constexpr.
|
||||||
// We use the 'unavailable' attribute to give a better compiler error than
|
// We use the 'unavailable' attribute to give a better compiler error than
|
||||||
// just 'method is deleted'.
|
// just 'method is deleted'.
|
||||||
FormatSpecTemplate(...) // NOLINT
|
FormatSpecTemplate(...) // NOLINT
|
||||||
__attribute__((unavailable("Format std::string is not constexpr.")));
|
__attribute__((unavailable("Format string is not constexpr.")));
|
||||||
|
|
||||||
// Honeypot overload for when the format is constexpr and invalid.
|
// Honeypot overload for when the format is constexpr and invalid.
|
||||||
// We use the 'unavailable' attribute to give a better compiler error than
|
// We use the 'unavailable' attribute to give a better compiler error than
|
||||||
|
|
|
@ -143,7 +143,7 @@ bool ParseFormatString(string_view src, Consumer consumer) {
|
||||||
auto tag = GetTagForChar(percent[1]);
|
auto tag = GetTagForChar(percent[1]);
|
||||||
if (tag.is_conv()) {
|
if (tag.is_conv()) {
|
||||||
if (ABSL_PREDICT_FALSE(next_arg < 0)) {
|
if (ABSL_PREDICT_FALSE(next_arg < 0)) {
|
||||||
// This indicates an error in the format std::string.
|
// This indicates an error in the format string.
|
||||||
// The only way to get `next_arg < 0` here is to have a positional
|
// The only way to get `next_arg < 0` here is to have a positional
|
||||||
// argument first which sets next_arg to -1 and then a non-positional
|
// argument first which sets next_arg to -1 and then a non-positional
|
||||||
// argument.
|
// argument.
|
||||||
|
@ -287,7 +287,7 @@ class ExtendedParsedFormat : public str_format_internal::ParsedFormatBase {
|
||||||
#ifdef ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
|
#ifdef ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
|
||||||
__attribute__((
|
__attribute__((
|
||||||
enable_if(str_format_internal::EnsureConstexpr(format),
|
enable_if(str_format_internal::EnsureConstexpr(format),
|
||||||
"Format std::string is not constexpr."),
|
"Format string is not constexpr."),
|
||||||
enable_if(str_format_internal::ValidFormatImpl<C...>(format),
|
enable_if(str_format_internal::ValidFormatImpl<C...>(format),
|
||||||
"Format specified does not match the template arguments.")))
|
"Format specified does not match the template arguments.")))
|
||||||
#endif // ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
|
#endif // ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
|
||||||
|
|
|
@ -481,7 +481,7 @@ TEST(stringtest, safe_strto32_base) {
|
||||||
EXPECT_TRUE(safe_strto32_base(std::string("0x1234"), &value, 16));
|
EXPECT_TRUE(safe_strto32_base(std::string("0x1234"), &value, 16));
|
||||||
EXPECT_EQ(0x1234, value);
|
EXPECT_EQ(0x1234, value);
|
||||||
|
|
||||||
// Base-10 std::string version.
|
// Base-10 string version.
|
||||||
EXPECT_TRUE(safe_strto32_base("1234", &value, 10));
|
EXPECT_TRUE(safe_strto32_base("1234", &value, 10));
|
||||||
EXPECT_EQ(1234, value);
|
EXPECT_EQ(1234, value);
|
||||||
}
|
}
|
||||||
|
@ -622,7 +622,7 @@ TEST(stringtest, safe_strto64_base) {
|
||||||
EXPECT_TRUE(safe_strto64_base(std::string("0x1234"), &value, 16));
|
EXPECT_TRUE(safe_strto64_base(std::string("0x1234"), &value, 16));
|
||||||
EXPECT_EQ(0x1234, value);
|
EXPECT_EQ(0x1234, value);
|
||||||
|
|
||||||
// Base-10 std::string version.
|
// Base-10 string version.
|
||||||
EXPECT_TRUE(safe_strto64_base("1234", &value, 10));
|
EXPECT_TRUE(safe_strto64_base("1234", &value, 10));
|
||||||
EXPECT_EQ(1234, value);
|
EXPECT_EQ(1234, value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -253,7 +253,7 @@ class AlphaNum {
|
||||||
const std::basic_string<char, std::char_traits<char>, Allocator>& str)
|
const std::basic_string<char, std::char_traits<char>, Allocator>& str)
|
||||||
: piece_(str) {}
|
: piece_(str) {}
|
||||||
|
|
||||||
// Use std::string literals ":" instead of character literals ':'.
|
// Use string literals ":" instead of character literals ':'.
|
||||||
AlphaNum(char c) = delete; // NOLINT(runtime/explicit)
|
AlphaNum(char c) = delete; // NOLINT(runtime/explicit)
|
||||||
|
|
||||||
AlphaNum(const AlphaNum&) = delete;
|
AlphaNum(const AlphaNum&) = delete;
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
const char kStringOne[] = "Once Upon A Time, ";
|
const char kStringOne[] = "Once Upon A Time, ";
|
||||||
const char kStringTwo[] = "There was a std::string benchmark";
|
const char kStringTwo[] = "There was a string benchmark";
|
||||||
|
|
||||||
// We want to include negative numbers in the benchmark, so this function
|
// We want to include negative numbers in the benchmark, so this function
|
||||||
// is used to count 0, 1, -1, 2, -2, 3, -3, ...
|
// is used to count 0, 1, -1, 2, -2, 3, -3, ...
|
||||||
|
|
|
@ -162,7 +162,7 @@ TEST(StrCat, Basics) {
|
||||||
EXPECT_EQ(result, "12345678910, 10987654321!");
|
EXPECT_EQ(result, "12345678910, 10987654321!");
|
||||||
|
|
||||||
std::string one =
|
std::string one =
|
||||||
"1"; // Actually, it's the size of this std::string that we want; a
|
"1"; // Actually, it's the size of this string that we want; a
|
||||||
// 64-bit build distinguishes between size_t and uint64_t,
|
// 64-bit build distinguishes between size_t and uint64_t,
|
||||||
// even though they're both unsigned 64-bit values.
|
// even though they're both unsigned 64-bit values.
|
||||||
result = absl::StrCat("And a ", one.size(), " and a ",
|
result = absl::StrCat("And a ", one.size(), " and a ",
|
||||||
|
@ -375,7 +375,7 @@ TEST(StrAppend, Basics) {
|
||||||
EXPECT_EQ(result.substr(old_size), "12345678910, 10987654321!");
|
EXPECT_EQ(result.substr(old_size), "12345678910, 10987654321!");
|
||||||
|
|
||||||
std::string one =
|
std::string one =
|
||||||
"1"; // Actually, it's the size of this std::string that we want; a
|
"1"; // Actually, it's the size of this string that we want; a
|
||||||
// 64-bit build distinguishes between size_t and uint64_t,
|
// 64-bit build distinguishes between size_t and uint64_t,
|
||||||
// even though they're both unsigned 64-bit values.
|
// even though they're both unsigned 64-bit values.
|
||||||
old_size = result.size();
|
old_size = result.size();
|
||||||
|
@ -463,7 +463,7 @@ TEST(StrAppend, CornerCases) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(StrAppend, CornerCasesNonEmptyAppend) {
|
TEST(StrAppend, CornerCasesNonEmptyAppend) {
|
||||||
for (std::string result : {"hello", "a std::string too long to fit in the SSO"}) {
|
for (std::string result : {"hello", "a string too long to fit in the SSO"}) {
|
||||||
const std::string expected = result;
|
const std::string expected = result;
|
||||||
absl::StrAppend(&result, "");
|
absl::StrAppend(&result, "");
|
||||||
EXPECT_EQ(result, expected);
|
EXPECT_EQ(result, expected);
|
||||||
|
|
|
@ -242,7 +242,7 @@ class TempFile {
|
||||||
|
|
||||||
std::FILE* file() const { return file_; }
|
std::FILE* file() const { return file_; }
|
||||||
|
|
||||||
// Read the file into a std::string.
|
// Read the file into a string.
|
||||||
std::string ReadFile() {
|
std::string ReadFile() {
|
||||||
std::fseek(file_, 0, SEEK_END);
|
std::fseek(file_, 0, SEEK_END);
|
||||||
int size = std::ftell(file_);
|
int size = std::ftell(file_);
|
||||||
|
@ -345,7 +345,7 @@ TEST(StrFormat, BehavesAsDocumented) {
|
||||||
EXPECT_EQ(StrFormat("%c", int{'a'}), "a");
|
EXPECT_EQ(StrFormat("%c", int{'a'}), "a");
|
||||||
EXPECT_EQ(StrFormat("%c", long{'a'}), "a"); // NOLINT
|
EXPECT_EQ(StrFormat("%c", long{'a'}), "a"); // NOLINT
|
||||||
EXPECT_EQ(StrFormat("%c", uint64_t{'a'}), "a");
|
EXPECT_EQ(StrFormat("%c", uint64_t{'a'}), "a");
|
||||||
// "s" - std::string Eg: "C" -> "C", std::string("C++") -> "C++"
|
// "s" - string Eg: "C" -> "C", std::string("C++") -> "C++"
|
||||||
// Formats std::string, char*, string_view, and Cord.
|
// Formats std::string, char*, string_view, and Cord.
|
||||||
EXPECT_EQ(StrFormat("%s", "C"), "C");
|
EXPECT_EQ(StrFormat("%s", "C"), "C");
|
||||||
EXPECT_EQ(StrFormat("%s", std::string("C++")), "C++");
|
EXPECT_EQ(StrFormat("%s", std::string("C++")), "C++");
|
||||||
|
|
|
@ -134,26 +134,26 @@ TEST(StrJoin, APIExamples) {
|
||||||
//
|
//
|
||||||
|
|
||||||
{
|
{
|
||||||
// Empty range yields an empty std::string.
|
// Empty range yields an empty string.
|
||||||
std::vector<std::string> v;
|
std::vector<std::string> v;
|
||||||
EXPECT_EQ("", absl::StrJoin(v, "-"));
|
EXPECT_EQ("", absl::StrJoin(v, "-"));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// A range of 1 element gives a std::string with that element but no
|
// A range of 1 element gives a string with that element but no
|
||||||
// separator.
|
// separator.
|
||||||
std::vector<std::string> v = {"foo"};
|
std::vector<std::string> v = {"foo"};
|
||||||
EXPECT_EQ("foo", absl::StrJoin(v, "-"));
|
EXPECT_EQ("foo", absl::StrJoin(v, "-"));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// A range with a single empty std::string element
|
// A range with a single empty string element
|
||||||
std::vector<std::string> v = {""};
|
std::vector<std::string> v = {""};
|
||||||
EXPECT_EQ("", absl::StrJoin(v, "-"));
|
EXPECT_EQ("", absl::StrJoin(v, "-"));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// A range with 2 elements, one of which is an empty std::string
|
// A range with 2 elements, one of which is an empty string
|
||||||
std::vector<std::string> v = {"a", ""};
|
std::vector<std::string> v = {"a", ""};
|
||||||
EXPECT_EQ("a-", absl::StrJoin(v, "-"));
|
EXPECT_EQ("a-", absl::StrJoin(v, "-"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ void SetUpStrings() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// big_string->resize(50);
|
// big_string->resize(50);
|
||||||
// OK, we've set up the std::string, now let's set up expectations - first by
|
// OK, we've set up the string, now let's set up expectations - first by
|
||||||
// just replacing "the" with "box"
|
// just replacing "the" with "box"
|
||||||
after_replacing_the = new std::string(*big_string);
|
after_replacing_the = new std::string(*big_string);
|
||||||
for (size_t pos = 0;
|
for (size_t pos = 0;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
TEST(StrReplaceAll, OneReplacement) {
|
TEST(StrReplaceAll, OneReplacement) {
|
||||||
std::string s;
|
std::string s;
|
||||||
|
|
||||||
// Empty std::string.
|
// Empty string.
|
||||||
s = absl::StrReplaceAll(s, {{"", ""}});
|
s = absl::StrReplaceAll(s, {{"", ""}});
|
||||||
EXPECT_EQ(s, "");
|
EXPECT_EQ(s, "");
|
||||||
s = absl::StrReplaceAll(s, {{"x", ""}});
|
s = absl::StrReplaceAll(s, {{"x", ""}});
|
||||||
|
@ -47,7 +47,7 @@ TEST(StrReplaceAll, OneReplacement) {
|
||||||
s = absl::StrReplaceAll("abc", {{"xyz", "123"}});
|
s = absl::StrReplaceAll("abc", {{"xyz", "123"}});
|
||||||
EXPECT_EQ(s, "abc");
|
EXPECT_EQ(s, "abc");
|
||||||
|
|
||||||
// Replace entire std::string.
|
// Replace entire string.
|
||||||
s = absl::StrReplaceAll("abc", {{"abc", "xyz"}});
|
s = absl::StrReplaceAll("abc", {{"abc", "xyz"}});
|
||||||
EXPECT_EQ(s, "xyz");
|
EXPECT_EQ(s, "xyz");
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ TEST(StrReplaceAll, OneReplacement) {
|
||||||
TEST(StrReplaceAll, ManyReplacements) {
|
TEST(StrReplaceAll, ManyReplacements) {
|
||||||
std::string s;
|
std::string s;
|
||||||
|
|
||||||
// Empty std::string.
|
// Empty string.
|
||||||
s = absl::StrReplaceAll("", {{"", ""}, {"x", ""}, {"", "y"}, {"x", "y"}});
|
s = absl::StrReplaceAll("", {{"", ""}, {"x", ""}, {"", "y"}, {"x", "y"}});
|
||||||
EXPECT_EQ(s, "");
|
EXPECT_EQ(s, "");
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ TEST(StrReplaceAll, ManyReplacements) {
|
||||||
s = absl::StrReplaceAll("abc", {{"", ""}, {"", "y"}, {"x", ""}});
|
s = absl::StrReplaceAll("abc", {{"", ""}, {"", "y"}, {"x", ""}});
|
||||||
EXPECT_EQ(s, "abc");
|
EXPECT_EQ(s, "abc");
|
||||||
|
|
||||||
// Replace entire std::string, one char at a time
|
// Replace entire string, one char at a time
|
||||||
s = absl::StrReplaceAll("abc", {{"a", "x"}, {"b", "y"}, {"c", "z"}});
|
s = absl::StrReplaceAll("abc", {{"a", "x"}, {"b", "y"}, {"c", "z"}});
|
||||||
EXPECT_EQ(s, "xyz");
|
EXPECT_EQ(s, "xyz");
|
||||||
s = absl::StrReplaceAll("zxy", {{"z", "x"}, {"x", "y"}, {"y", "z"}});
|
s = absl::StrReplaceAll("zxy", {{"z", "x"}, {"x", "y"}, {"y", "z"}});
|
||||||
|
@ -264,7 +264,7 @@ TEST(StrReplaceAll, Inplace) {
|
||||||
std::string s;
|
std::string s;
|
||||||
int reps;
|
int reps;
|
||||||
|
|
||||||
// Empty std::string.
|
// Empty string.
|
||||||
s = "";
|
s = "";
|
||||||
reps = absl::StrReplaceAll({{"", ""}, {"x", ""}, {"", "y"}, {"x", "y"}}, &s);
|
reps = absl::StrReplaceAll({{"", ""}, {"x", ""}, {"", "y"}, {"x", "y"}}, &s);
|
||||||
EXPECT_EQ(reps, 0);
|
EXPECT_EQ(reps, 0);
|
||||||
|
@ -276,7 +276,7 @@ TEST(StrReplaceAll, Inplace) {
|
||||||
EXPECT_EQ(reps, 0);
|
EXPECT_EQ(reps, 0);
|
||||||
EXPECT_EQ(s, "abc");
|
EXPECT_EQ(s, "abc");
|
||||||
|
|
||||||
// Replace entire std::string, one char at a time
|
// Replace entire string, one char at a time
|
||||||
s = "abc";
|
s = "abc";
|
||||||
reps = absl::StrReplaceAll({{"a", "x"}, {"b", "y"}, {"c", "z"}}, &s);
|
reps = absl::StrReplaceAll({{"a", "x"}, {"b", "y"}, {"c", "z"}}, &s);
|
||||||
EXPECT_EQ(reps, 3);
|
EXPECT_EQ(reps, 3);
|
||||||
|
|
|
@ -42,7 +42,7 @@ absl::string_view GenericFind(absl::string_view text,
|
||||||
absl::string_view delimiter, size_t pos,
|
absl::string_view delimiter, size_t pos,
|
||||||
FindPolicy find_policy) {
|
FindPolicy find_policy) {
|
||||||
if (delimiter.empty() && text.length() > 0) {
|
if (delimiter.empty() && text.length() > 0) {
|
||||||
// Special case for empty std::string delimiters: always return a zero-length
|
// Special case for empty string delimiters: always return a zero-length
|
||||||
// absl::string_view referring to the item at position 1 past pos.
|
// absl::string_view referring to the item at position 1 past pos.
|
||||||
return absl::string_view(text.data() + pos + 1, 0);
|
return absl::string_view(text.data() + pos + 1, 0);
|
||||||
}
|
}
|
||||||
|
@ -127,7 +127,7 @@ absl::string_view ByLength::Find(absl::string_view text,
|
||||||
size_t pos) const {
|
size_t pos) const {
|
||||||
pos = std::min(pos, text.size()); // truncate `pos`
|
pos = std::min(pos, text.size()); // truncate `pos`
|
||||||
absl::string_view substr = text.substr(pos);
|
absl::string_view substr = text.substr(pos);
|
||||||
// If the std::string is shorter than the chunk size we say we
|
// If the string is shorter than the chunk size we say we
|
||||||
// "can't find the delimiter" so this will be the last chunk.
|
// "can't find the delimiter" so this will be the last chunk.
|
||||||
if (substr.length() <= static_cast<size_t>(length_))
|
if (substr.length() <= static_cast<size_t>(length_))
|
||||||
return absl::string_view(text.data() + text.size(), 0);
|
return absl::string_view(text.data() + text.size(), 0);
|
||||||
|
|
|
@ -71,7 +71,7 @@ TEST(Split, TraitsTest) {
|
||||||
// namespaces just like callers will need to use.
|
// namespaces just like callers will need to use.
|
||||||
TEST(Split, APIExamples) {
|
TEST(Split, APIExamples) {
|
||||||
{
|
{
|
||||||
// Passes std::string delimiter. Assumes the default of ByString.
|
// Passes string delimiter. Assumes the default of ByString.
|
||||||
std::vector<std::string> v = absl::StrSplit("a,b,c", ","); // NOLINT
|
std::vector<std::string> v = absl::StrSplit("a,b,c", ","); // NOLINT
|
||||||
EXPECT_THAT(v, ElementsAre("a", "b", "c"));
|
EXPECT_THAT(v, ElementsAre("a", "b", "c"));
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ TEST(Split, APIExamples) {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// Uses the Literal std::string "=>" as the delimiter.
|
// Uses the Literal string "=>" as the delimiter.
|
||||||
const std::vector<std::string> v = absl::StrSplit("a=>b=>c", "=>");
|
const std::vector<std::string> v = absl::StrSplit("a=>b=>c", "=>");
|
||||||
EXPECT_THAT(v, ElementsAre("a", "b", "c"));
|
EXPECT_THAT(v, ElementsAre("a", "b", "c"));
|
||||||
}
|
}
|
||||||
|
@ -121,17 +121,17 @@ TEST(Split, APIExamples) {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// Splits the input std::string into individual characters by using an empty
|
// Splits the input string into individual characters by using an empty
|
||||||
// std::string as the delimiter.
|
// string as the delimiter.
|
||||||
std::vector<std::string> v = absl::StrSplit("abc", "");
|
std::vector<std::string> v = absl::StrSplit("abc", "");
|
||||||
EXPECT_THAT(v, ElementsAre("a", "b", "c"));
|
EXPECT_THAT(v, ElementsAre("a", "b", "c"));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// Splits std::string data with embedded NUL characters, using NUL as the
|
// Splits string data with embedded NUL characters, using NUL as the
|
||||||
// delimiter. A simple delimiter of "\0" doesn't work because strlen() will
|
// delimiter. A simple delimiter of "\0" doesn't work because strlen() will
|
||||||
// say that's the empty std::string when constructing the absl::string_view
|
// say that's the empty string when constructing the absl::string_view
|
||||||
// delimiter. Instead, a non-empty std::string containing NUL can be used as the
|
// delimiter. Instead, a non-empty string containing NUL can be used as the
|
||||||
// delimiter.
|
// delimiter.
|
||||||
std::string embedded_nulls("a\0b\0c", 5);
|
std::string embedded_nulls("a\0b\0c", 5);
|
||||||
std::string null_delim("\0", 1);
|
std::string null_delim("\0", 1);
|
||||||
|
@ -436,7 +436,7 @@ TEST(Splitter, ConversionOperator) {
|
||||||
// less-than, equal-to, and more-than 2 strings.
|
// less-than, equal-to, and more-than 2 strings.
|
||||||
TEST(Splitter, ToPair) {
|
TEST(Splitter, ToPair) {
|
||||||
{
|
{
|
||||||
// Empty std::string
|
// Empty string
|
||||||
std::pair<std::string, std::string> p = absl::StrSplit("", ',');
|
std::pair<std::string, std::string> p = absl::StrSplit("", ',');
|
||||||
EXPECT_EQ("", p.first);
|
EXPECT_EQ("", p.first);
|
||||||
EXPECT_EQ("", p.second);
|
EXPECT_EQ("", p.second);
|
||||||
|
@ -565,7 +565,7 @@ TEST(Split, AcceptsCertainTemporaries) {
|
||||||
|
|
||||||
TEST(Split, Temporary) {
|
TEST(Split, Temporary) {
|
||||||
// Use a std::string longer than the SSO length, so that when the temporary is
|
// Use a std::string longer than the SSO length, so that when the temporary is
|
||||||
// destroyed, if the splitter keeps a reference to the std::string's contents,
|
// destroyed, if the splitter keeps a reference to the string's contents,
|
||||||
// it'll reference freed memory instead of just dead on-stack memory.
|
// it'll reference freed memory instead of just dead on-stack memory.
|
||||||
const char input[] = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u";
|
const char input[] = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u";
|
||||||
EXPECT_LT(sizeof(std::string), ABSL_ARRAYSIZE(input))
|
EXPECT_LT(sizeof(std::string), ABSL_ARRAYSIZE(input))
|
||||||
|
@ -651,14 +651,14 @@ TEST(Split, UTF8) {
|
||||||
// Tests splitting utf8 strings and utf8 delimiters.
|
// Tests splitting utf8 strings and utf8 delimiters.
|
||||||
std::string utf8_string = u8"\u03BA\u1F79\u03C3\u03BC\u03B5";
|
std::string utf8_string = u8"\u03BA\u1F79\u03C3\u03BC\u03B5";
|
||||||
{
|
{
|
||||||
// A utf8 input std::string with an ascii delimiter.
|
// A utf8 input string with an ascii delimiter.
|
||||||
std::string to_split = "a," + utf8_string;
|
std::string to_split = "a," + utf8_string;
|
||||||
std::vector<absl::string_view> v = absl::StrSplit(to_split, ',');
|
std::vector<absl::string_view> v = absl::StrSplit(to_split, ',');
|
||||||
EXPECT_THAT(v, ElementsAre("a", utf8_string));
|
EXPECT_THAT(v, ElementsAre("a", utf8_string));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// A utf8 input std::string and a utf8 delimiter.
|
// A utf8 input string and a utf8 delimiter.
|
||||||
std::string to_split = "a," + utf8_string + ",b";
|
std::string to_split = "a," + utf8_string + ",b";
|
||||||
std::string unicode_delimiter = "," + utf8_string + ",";
|
std::string unicode_delimiter = "," + utf8_string + ",";
|
||||||
std::vector<absl::string_view> v =
|
std::vector<absl::string_view> v =
|
||||||
|
@ -667,7 +667,7 @@ TEST(Split, UTF8) {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// A utf8 input std::string and ByAnyChar with ascii chars.
|
// A utf8 input string and ByAnyChar with ascii chars.
|
||||||
std::vector<absl::string_view> v =
|
std::vector<absl::string_view> v =
|
||||||
absl::StrSplit(u8"Foo h\u00E4llo th\u4E1Ere", absl::ByAnyChar(" \t"));
|
absl::StrSplit(u8"Foo h\u00E4llo th\u4E1Ere", absl::ByAnyChar(" \t"));
|
||||||
EXPECT_THAT(v, ElementsAre("Foo", u8"h\u00E4llo", u8"th\u4E1Ere"));
|
EXPECT_THAT(v, ElementsAre("Foo", u8"h\u00E4llo", u8"th\u4E1Ere"));
|
||||||
|
@ -814,10 +814,10 @@ TEST(Delimiter, ByString) {
|
||||||
ByString comma_string(",");
|
ByString comma_string(",");
|
||||||
TestComma(comma_string);
|
TestComma(comma_string);
|
||||||
|
|
||||||
// The first occurrence of empty std::string ("") in a std::string is at position 0.
|
// The first occurrence of empty string ("") in a string is at position 0.
|
||||||
// There is a test below that demonstrates this for absl::string_view::find().
|
// There is a test below that demonstrates this for absl::string_view::find().
|
||||||
// If the ByString delimiter returned position 0 for this, there would
|
// If the ByString delimiter returned position 0 for this, there would
|
||||||
// be an infinite loop in the SplitIterator code. To avoid this, empty std::string
|
// be an infinite loop in the SplitIterator code. To avoid this, empty string
|
||||||
// is a special case in that it always returns the item at position 1.
|
// is a special case in that it always returns the item at position 1.
|
||||||
absl::string_view abc("abc");
|
absl::string_view abc("abc");
|
||||||
EXPECT_EQ(0, abc.find("")); // "" is found at position 0
|
EXPECT_EQ(0, abc.find("")); // "" is found at position 0
|
||||||
|
@ -876,7 +876,7 @@ TEST(Delimiter, ByAnyChar) {
|
||||||
EXPECT_FALSE(IsFoundAt("=", two_delims, -1));
|
EXPECT_FALSE(IsFoundAt("=", two_delims, -1));
|
||||||
|
|
||||||
// ByAnyChar behaves just like ByString when given a delimiter of empty
|
// ByAnyChar behaves just like ByString when given a delimiter of empty
|
||||||
// std::string. That is, it always returns a zero-length absl::string_view
|
// string. That is, it always returns a zero-length absl::string_view
|
||||||
// referring to the item at position 1, not position 0.
|
// referring to the item at position 1, not position 0.
|
||||||
ByAnyChar empty("");
|
ByAnyChar empty("");
|
||||||
EXPECT_FALSE(IsFoundAt("", empty, 0));
|
EXPECT_FALSE(IsFoundAt("", empty, 0));
|
||||||
|
@ -913,7 +913,7 @@ TEST(Split, WorksWithLargeStrings) {
|
||||||
std::vector<absl::string_view> v = absl::StrSplit(s, '-');
|
std::vector<absl::string_view> v = absl::StrSplit(s, '-');
|
||||||
EXPECT_EQ(2, v.size());
|
EXPECT_EQ(2, v.size());
|
||||||
// The first element will contain 2G of 'x's.
|
// The first element will contain 2G of 'x's.
|
||||||
// testing::StartsWith is too slow with a 2G std::string.
|
// testing::StartsWith is too slow with a 2G string.
|
||||||
EXPECT_EQ('x', v[0][0]);
|
EXPECT_EQ('x', v[0][0]);
|
||||||
EXPECT_EQ('x', v[0][1]);
|
EXPECT_EQ('x', v[0][1]);
|
||||||
EXPECT_EQ('x', v[0][3]);
|
EXPECT_EQ('x', v[0][3]);
|
||||||
|
|
|
@ -319,7 +319,7 @@ class string_view {
|
||||||
// stored elsewhere). Note that `string_view::data()` may contain embedded nul
|
// stored elsewhere). Note that `string_view::data()` may contain embedded nul
|
||||||
// characters, but the returned buffer may or may not be NUL-terminated;
|
// characters, but the returned buffer may or may not be NUL-terminated;
|
||||||
// therefore, do not pass `data()` to a routine that expects a NUL-terminated
|
// therefore, do not pass `data()` to a routine that expects a NUL-terminated
|
||||||
// std::string.
|
// string.
|
||||||
constexpr const_pointer data() const noexcept { return ptr_; }
|
constexpr const_pointer data() const noexcept { return ptr_; }
|
||||||
|
|
||||||
// Modifiers
|
// Modifiers
|
||||||
|
@ -327,7 +327,7 @@ class string_view {
|
||||||
// string_view::remove_prefix()
|
// string_view::remove_prefix()
|
||||||
//
|
//
|
||||||
// Removes the first `n` characters from the `string_view`. Note that the
|
// Removes the first `n` characters from the `string_view`. Note that the
|
||||||
// underlying std::string is not changed, only the view.
|
// underlying string is not changed, only the view.
|
||||||
void remove_prefix(size_type n) {
|
void remove_prefix(size_type n) {
|
||||||
assert(n <= length_);
|
assert(n <= length_);
|
||||||
ptr_ += n;
|
ptr_ += n;
|
||||||
|
@ -337,7 +337,7 @@ class string_view {
|
||||||
// string_view::remove_suffix()
|
// string_view::remove_suffix()
|
||||||
//
|
//
|
||||||
// Removes the last `n` characters from the `string_view`. Note that the
|
// Removes the last `n` characters from the `string_view`. Note that the
|
||||||
// underlying std::string is not changed, only the view.
|
// underlying string is not changed, only the view.
|
||||||
void remove_suffix(size_type n) {
|
void remove_suffix(size_type n) {
|
||||||
assert(n <= length_);
|
assert(n <= length_);
|
||||||
length_ -= n;
|
length_ -= n;
|
||||||
|
@ -394,7 +394,7 @@ class string_view {
|
||||||
//
|
//
|
||||||
// Performs a lexicographical comparison between the `string_view` and
|
// Performs a lexicographical comparison between the `string_view` and
|
||||||
// another `absl::string_view`, returning -1 if `this` is less than, 0 if
|
// another `absl::string_view`, returning -1 if `this` is less than, 0 if
|
||||||
// `this` is equal to, and 1 if `this` is greater than the passed std::string
|
// `this` is equal to, and 1 if `this` is greater than the passed string
|
||||||
// view. Note that in the case of data equality, a further comparison is made
|
// view. Note that in the case of data equality, a further comparison is made
|
||||||
// on the respective sizes of the two `string_view`s to determine which is
|
// on the respective sizes of the two `string_view`s to determine which is
|
||||||
// smaller, equal, or greater.
|
// smaller, equal, or greater.
|
||||||
|
@ -420,17 +420,17 @@ class string_view {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overload of `string_view::compare()` for comparing a `string_view` and a
|
// Overload of `string_view::compare()` for comparing a `string_view` and a
|
||||||
// a different C-style std::string `s`.
|
// a different C-style string `s`.
|
||||||
int compare(const char* s) const { return compare(string_view(s)); }
|
int compare(const char* s) const { return compare(string_view(s)); }
|
||||||
|
|
||||||
// Overload of `string_view::compare()` for comparing a substring of the
|
// Overload of `string_view::compare()` for comparing a substring of the
|
||||||
// `string_view` and a different std::string C-style std::string `s`.
|
// `string_view` and a different string C-style string `s`.
|
||||||
int compare(size_type pos1, size_type count1, const char* s) const {
|
int compare(size_type pos1, size_type count1, const char* s) const {
|
||||||
return substr(pos1, count1).compare(string_view(s));
|
return substr(pos1, count1).compare(string_view(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overload of `string_view::compare()` for comparing a substring of the
|
// Overload of `string_view::compare()` for comparing a substring of the
|
||||||
// `string_view` and a substring of a different C-style std::string `s`.
|
// `string_view` and a substring of a different C-style string `s`.
|
||||||
int compare(size_type pos1, size_type count1, const char* s,
|
int compare(size_type pos1, size_type count1, const char* s,
|
||||||
size_type count2) const {
|
size_type count2) const {
|
||||||
return substr(pos1, count1).compare(string_view(s, count2));
|
return substr(pos1, count1).compare(string_view(s, count2));
|
||||||
|
|
|
@ -410,7 +410,7 @@ TEST(StringViewTest, STL2) {
|
||||||
EXPECT_EQ(a.find(e, 17), 17);
|
EXPECT_EQ(a.find(e, 17), 17);
|
||||||
absl::string_view g("xx not found bb");
|
absl::string_view g("xx not found bb");
|
||||||
EXPECT_EQ(a.find(g), absl::string_view::npos);
|
EXPECT_EQ(a.find(g), absl::string_view::npos);
|
||||||
// empty std::string nonsense
|
// empty string nonsense
|
||||||
EXPECT_EQ(d.find(b), absl::string_view::npos);
|
EXPECT_EQ(d.find(b), absl::string_view::npos);
|
||||||
EXPECT_EQ(e.find(b), absl::string_view::npos);
|
EXPECT_EQ(e.find(b), absl::string_view::npos);
|
||||||
EXPECT_EQ(d.find(b, 4), absl::string_view::npos);
|
EXPECT_EQ(d.find(b, 4), absl::string_view::npos);
|
||||||
|
@ -438,7 +438,7 @@ TEST(StringViewTest, STL2) {
|
||||||
EXPECT_EQ(g.find('o', 4), 4);
|
EXPECT_EQ(g.find('o', 4), 4);
|
||||||
EXPECT_EQ(g.find('o', 5), 8);
|
EXPECT_EQ(g.find('o', 5), 8);
|
||||||
EXPECT_EQ(a.find('b', 5), absl::string_view::npos);
|
EXPECT_EQ(a.find('b', 5), absl::string_view::npos);
|
||||||
// empty std::string nonsense
|
// empty string nonsense
|
||||||
EXPECT_EQ(d.find('\0'), absl::string_view::npos);
|
EXPECT_EQ(d.find('\0'), absl::string_view::npos);
|
||||||
EXPECT_EQ(e.find('\0'), absl::string_view::npos);
|
EXPECT_EQ(e.find('\0'), absl::string_view::npos);
|
||||||
EXPECT_EQ(d.find('\0', 4), absl::string_view::npos);
|
EXPECT_EQ(d.find('\0', 4), absl::string_view::npos);
|
||||||
|
@ -465,7 +465,7 @@ TEST(StringViewTest, STL2) {
|
||||||
EXPECT_EQ(e.rfind(b), absl::string_view::npos);
|
EXPECT_EQ(e.rfind(b), absl::string_view::npos);
|
||||||
EXPECT_EQ(d.rfind(b, 4), absl::string_view::npos);
|
EXPECT_EQ(d.rfind(b, 4), absl::string_view::npos);
|
||||||
EXPECT_EQ(e.rfind(b, 7), absl::string_view::npos);
|
EXPECT_EQ(e.rfind(b, 7), absl::string_view::npos);
|
||||||
// empty std::string nonsense
|
// empty string nonsense
|
||||||
EXPECT_EQ(d.rfind(d, 4), std::string().rfind(std::string()));
|
EXPECT_EQ(d.rfind(d, 4), std::string().rfind(std::string()));
|
||||||
EXPECT_EQ(e.rfind(d, 7), std::string().rfind(std::string()));
|
EXPECT_EQ(e.rfind(d, 7), std::string().rfind(std::string()));
|
||||||
EXPECT_EQ(d.rfind(e, 4), std::string().rfind(std::string()));
|
EXPECT_EQ(d.rfind(e, 4), std::string().rfind(std::string()));
|
||||||
|
@ -484,7 +484,7 @@ TEST(StringViewTest, STL2) {
|
||||||
EXPECT_EQ(f.rfind('\0', 12), 3);
|
EXPECT_EQ(f.rfind('\0', 12), 3);
|
||||||
EXPECT_EQ(f.rfind('3'), 2);
|
EXPECT_EQ(f.rfind('3'), 2);
|
||||||
EXPECT_EQ(f.rfind('5'), 5);
|
EXPECT_EQ(f.rfind('5'), 5);
|
||||||
// empty std::string nonsense
|
// empty string nonsense
|
||||||
EXPECT_EQ(d.rfind('o'), absl::string_view::npos);
|
EXPECT_EQ(d.rfind('o'), absl::string_view::npos);
|
||||||
EXPECT_EQ(e.rfind('o'), absl::string_view::npos);
|
EXPECT_EQ(e.rfind('o'), absl::string_view::npos);
|
||||||
EXPECT_EQ(d.rfind('o', 4), absl::string_view::npos);
|
EXPECT_EQ(d.rfind('o', 4), absl::string_view::npos);
|
||||||
|
@ -520,7 +520,7 @@ TEST(StringViewTest, STL2FindFirst) {
|
||||||
EXPECT_EQ(g.find_first_of(c), 0);
|
EXPECT_EQ(g.find_first_of(c), 0);
|
||||||
EXPECT_EQ(a.find_first_of(f), absl::string_view::npos);
|
EXPECT_EQ(a.find_first_of(f), absl::string_view::npos);
|
||||||
EXPECT_EQ(f.find_first_of(a), absl::string_view::npos);
|
EXPECT_EQ(f.find_first_of(a), absl::string_view::npos);
|
||||||
// empty std::string nonsense
|
// empty string nonsense
|
||||||
EXPECT_EQ(a.find_first_of(d), absl::string_view::npos);
|
EXPECT_EQ(a.find_first_of(d), absl::string_view::npos);
|
||||||
EXPECT_EQ(a.find_first_of(e), absl::string_view::npos);
|
EXPECT_EQ(a.find_first_of(e), absl::string_view::npos);
|
||||||
EXPECT_EQ(d.find_first_of(b), absl::string_view::npos);
|
EXPECT_EQ(d.find_first_of(b), absl::string_view::npos);
|
||||||
|
@ -538,7 +538,7 @@ TEST(StringViewTest, STL2FindFirst) {
|
||||||
EXPECT_EQ(a.find_first_not_of(f), 0);
|
EXPECT_EQ(a.find_first_not_of(f), 0);
|
||||||
EXPECT_EQ(a.find_first_not_of(d), 0);
|
EXPECT_EQ(a.find_first_not_of(d), 0);
|
||||||
EXPECT_EQ(a.find_first_not_of(e), 0);
|
EXPECT_EQ(a.find_first_not_of(e), 0);
|
||||||
// empty std::string nonsense
|
// empty string nonsense
|
||||||
EXPECT_EQ(a.find_first_not_of(d), 0);
|
EXPECT_EQ(a.find_first_not_of(d), 0);
|
||||||
EXPECT_EQ(a.find_first_not_of(e), 0);
|
EXPECT_EQ(a.find_first_not_of(e), 0);
|
||||||
EXPECT_EQ(a.find_first_not_of(d, 1), 1);
|
EXPECT_EQ(a.find_first_not_of(d, 1), 1);
|
||||||
|
@ -566,7 +566,7 @@ TEST(StringViewTest, STL2FindFirst) {
|
||||||
EXPECT_EQ(f.find_first_not_of('\0'), 0);
|
EXPECT_EQ(f.find_first_not_of('\0'), 0);
|
||||||
EXPECT_EQ(f.find_first_not_of('\0', 3), 4);
|
EXPECT_EQ(f.find_first_not_of('\0', 3), 4);
|
||||||
EXPECT_EQ(f.find_first_not_of('\0', 2), 2);
|
EXPECT_EQ(f.find_first_not_of('\0', 2), 2);
|
||||||
// empty std::string nonsense
|
// empty string nonsense
|
||||||
EXPECT_EQ(d.find_first_not_of('x'), absl::string_view::npos);
|
EXPECT_EQ(d.find_first_not_of('x'), absl::string_view::npos);
|
||||||
EXPECT_EQ(e.find_first_not_of('x'), absl::string_view::npos);
|
EXPECT_EQ(e.find_first_not_of('x'), absl::string_view::npos);
|
||||||
EXPECT_EQ(d.find_first_not_of('\0'), absl::string_view::npos);
|
EXPECT_EQ(d.find_first_not_of('\0'), absl::string_view::npos);
|
||||||
|
@ -606,7 +606,7 @@ TEST(StringViewTest, STL2FindLast) {
|
||||||
EXPECT_EQ(f.find_last_of(i, 5), 5);
|
EXPECT_EQ(f.find_last_of(i, 5), 5);
|
||||||
EXPECT_EQ(f.find_last_of(i, 6), 6);
|
EXPECT_EQ(f.find_last_of(i, 6), 6);
|
||||||
EXPECT_EQ(f.find_last_of(a, 4), absl::string_view::npos);
|
EXPECT_EQ(f.find_last_of(a, 4), absl::string_view::npos);
|
||||||
// empty std::string nonsense
|
// empty string nonsense
|
||||||
EXPECT_EQ(f.find_last_of(d), absl::string_view::npos);
|
EXPECT_EQ(f.find_last_of(d), absl::string_view::npos);
|
||||||
EXPECT_EQ(f.find_last_of(e), absl::string_view::npos);
|
EXPECT_EQ(f.find_last_of(e), absl::string_view::npos);
|
||||||
EXPECT_EQ(f.find_last_of(d, 4), absl::string_view::npos);
|
EXPECT_EQ(f.find_last_of(d, 4), absl::string_view::npos);
|
||||||
|
@ -632,7 +632,7 @@ TEST(StringViewTest, STL2FindLast) {
|
||||||
EXPECT_EQ(a.find_last_not_of(c, 24), 22);
|
EXPECT_EQ(a.find_last_not_of(c, 24), 22);
|
||||||
EXPECT_EQ(a.find_last_not_of(b, 3), 3);
|
EXPECT_EQ(a.find_last_not_of(b, 3), 3);
|
||||||
EXPECT_EQ(a.find_last_not_of(b, 2), absl::string_view::npos);
|
EXPECT_EQ(a.find_last_not_of(b, 2), absl::string_view::npos);
|
||||||
// empty std::string nonsense
|
// empty string nonsense
|
||||||
EXPECT_EQ(f.find_last_not_of(d), f.size()-1);
|
EXPECT_EQ(f.find_last_not_of(d), f.size()-1);
|
||||||
EXPECT_EQ(f.find_last_not_of(e), f.size()-1);
|
EXPECT_EQ(f.find_last_not_of(e), f.size()-1);
|
||||||
EXPECT_EQ(f.find_last_not_of(d, 4), 4);
|
EXPECT_EQ(f.find_last_not_of(d, 4), 4);
|
||||||
|
@ -656,7 +656,7 @@ TEST(StringViewTest, STL2FindLast) {
|
||||||
EXPECT_EQ(h.find_last_not_of('x', 2), 2);
|
EXPECT_EQ(h.find_last_not_of('x', 2), 2);
|
||||||
EXPECT_EQ(h.find_last_not_of('=', 2), absl::string_view::npos);
|
EXPECT_EQ(h.find_last_not_of('=', 2), absl::string_view::npos);
|
||||||
EXPECT_EQ(b.find_last_not_of('b', 1), 0);
|
EXPECT_EQ(b.find_last_not_of('b', 1), 0);
|
||||||
// empty std::string nonsense
|
// empty string nonsense
|
||||||
EXPECT_EQ(d.find_last_not_of('x'), absl::string_view::npos);
|
EXPECT_EQ(d.find_last_not_of('x'), absl::string_view::npos);
|
||||||
EXPECT_EQ(e.find_last_not_of('x'), absl::string_view::npos);
|
EXPECT_EQ(e.find_last_not_of('x'), absl::string_view::npos);
|
||||||
EXPECT_EQ(d.find_last_not_of('\0'), absl::string_view::npos);
|
EXPECT_EQ(d.find_last_not_of('\0'), absl::string_view::npos);
|
||||||
|
@ -678,7 +678,7 @@ TEST(StringViewTest, STL2Substr) {
|
||||||
EXPECT_EQ(a.substr(23, 99), c);
|
EXPECT_EQ(a.substr(23, 99), c);
|
||||||
EXPECT_EQ(a.substr(0), a);
|
EXPECT_EQ(a.substr(0), a);
|
||||||
EXPECT_EQ(a.substr(3, 2), "de");
|
EXPECT_EQ(a.substr(3, 2), "de");
|
||||||
// empty std::string nonsense
|
// empty string nonsense
|
||||||
EXPECT_EQ(d.substr(0, 99), e);
|
EXPECT_EQ(d.substr(0, 99), e);
|
||||||
// use of npos
|
// use of npos
|
||||||
EXPECT_EQ(a.substr(0, absl::string_view::npos), a);
|
EXPECT_EQ(a.substr(0, absl::string_view::npos), a);
|
||||||
|
@ -859,7 +859,7 @@ TEST(StringViewTest, NULLInput) {
|
||||||
EXPECT_EQ(s.size(), 0);
|
EXPECT_EQ(s.size(), 0);
|
||||||
|
|
||||||
// .ToString() on a absl::string_view with nullptr should produce the empty
|
// .ToString() on a absl::string_view with nullptr should produce the empty
|
||||||
// std::string.
|
// string.
|
||||||
EXPECT_EQ("", std::string(s));
|
EXPECT_EQ("", std::string(s));
|
||||||
#endif // ABSL_HAVE_STRING_VIEW_FROM_NULLPTR
|
#endif // ABSL_HAVE_STRING_VIEW_FROM_NULLPTR
|
||||||
}
|
}
|
||||||
|
@ -977,7 +977,7 @@ TEST(StringViewTest, ConstexprCompiles) {
|
||||||
|
|
||||||
#if defined(ABSL_USES_STD_STRING_VIEW)
|
#if defined(ABSL_USES_STD_STRING_VIEW)
|
||||||
// In libstdc++ (as of 7.2), `std::string_view::string_view(const char*)`
|
// In libstdc++ (as of 7.2), `std::string_view::string_view(const char*)`
|
||||||
// calls `std::char_traits<char>::length(const char*)` to get the std::string
|
// calls `std::char_traits<char>::length(const char*)` to get the string
|
||||||
// length, but it is not marked constexpr yet. See GCC bug:
|
// length, but it is not marked constexpr yet. See GCC bug:
|
||||||
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78156
|
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78156
|
||||||
// Also, there is a LWG issue that adds constexpr to length() which was just
|
// Also, there is a LWG issue that adds constexpr to length() which was just
|
||||||
|
@ -1180,7 +1180,7 @@ TEST(FindOneCharTest, EdgeCases) {
|
||||||
TEST(HugeStringView, TwoPointTwoGB) {
|
TEST(HugeStringView, TwoPointTwoGB) {
|
||||||
if (sizeof(size_t) <= 4 || RunningOnValgrind())
|
if (sizeof(size_t) <= 4 || RunningOnValgrind())
|
||||||
return;
|
return;
|
||||||
// Try a huge std::string piece.
|
// Try a huge string piece.
|
||||||
const size_t size = size_t{2200} * 1000 * 1000;
|
const size_t size = size_t{2200} * 1000 * 1000;
|
||||||
std::string s(size, 'a');
|
std::string s(size, 'a');
|
||||||
absl::string_view sp(s);
|
absl::string_view sp(s);
|
||||||
|
|
|
@ -36,7 +36,7 @@ void SubstituteAndAppendArray(std::string* output, absl::string_view format,
|
||||||
if (i + 1 >= format.size()) {
|
if (i + 1 >= format.size()) {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
ABSL_RAW_LOG(FATAL,
|
ABSL_RAW_LOG(FATAL,
|
||||||
"Invalid absl::Substitute() format std::string: \"%s\".",
|
"Invalid absl::Substitute() format string: \"%s\".",
|
||||||
absl::CEscape(format).c_str());
|
absl::CEscape(format).c_str());
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
|
@ -46,8 +46,8 @@ void SubstituteAndAppendArray(std::string* output, absl::string_view format,
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
ABSL_RAW_LOG(
|
ABSL_RAW_LOG(
|
||||||
FATAL,
|
FATAL,
|
||||||
"Invalid absl::Substitute() format std::string: asked for \"$"
|
"Invalid absl::Substitute() format string: asked for \"$"
|
||||||
"%d\", but only %d args were given. Full format std::string was: "
|
"%d\", but only %d args were given. Full format string was: "
|
||||||
"\"%s\".",
|
"\"%s\".",
|
||||||
index, static_cast<int>(num_args), absl::CEscape(format).c_str());
|
index, static_cast<int>(num_args), absl::CEscape(format).c_str());
|
||||||
#endif
|
#endif
|
||||||
|
@ -61,7 +61,7 @@ void SubstituteAndAppendArray(std::string* output, absl::string_view format,
|
||||||
} else {
|
} else {
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
ABSL_RAW_LOG(FATAL,
|
ABSL_RAW_LOG(FATAL,
|
||||||
"Invalid absl::Substitute() format std::string: \"%s\".",
|
"Invalid absl::Substitute() format string: \"%s\".",
|
||||||
absl::CEscape(format).c_str());
|
absl::CEscape(format).c_str());
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
|
@ -73,7 +73,7 @@ void SubstituteAndAppendArray(std::string* output, absl::string_view format,
|
||||||
|
|
||||||
if (size == 0) return;
|
if (size == 0) return;
|
||||||
|
|
||||||
// Build the std::string.
|
// Build the string.
|
||||||
size_t original_size = output->size();
|
size_t original_size = output->size();
|
||||||
strings_internal::STLStringResizeUninitialized(output, original_size + size);
|
strings_internal::STLStringResizeUninitialized(output, original_size + size);
|
||||||
char* target = &(*output)[original_size];
|
char* target = &(*output)[original_size];
|
||||||
|
|
|
@ -99,7 +99,7 @@ namespace substitute_internal {
|
||||||
// This class has implicit constructors.
|
// This class has implicit constructors.
|
||||||
class Arg {
|
class Arg {
|
||||||
public:
|
public:
|
||||||
// Overloads for std::string-y things
|
// Overloads for string-y things
|
||||||
//
|
//
|
||||||
// Explicitly overload `const char*` so the compiler doesn't cast to `bool`.
|
// Explicitly overload `const char*` so the compiler doesn't cast to `bool`.
|
||||||
Arg(const char* value) // NOLINT(runtime/explicit)
|
Arg(const char* value) // NOLINT(runtime/explicit)
|
||||||
|
@ -360,13 +360,13 @@ inline void SubstituteAndAppend(
|
||||||
void SubstituteAndAppend(std::string* output, const char* format)
|
void SubstituteAndAppend(std::string* output, const char* format)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 0,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 0,
|
||||||
"There were no substitution arguments "
|
"There were no substitution arguments "
|
||||||
"but this format std::string has a $[0-9] in it");
|
"but this format string has a $[0-9] in it");
|
||||||
|
|
||||||
void SubstituteAndAppend(std::string* output, const char* format,
|
void SubstituteAndAppend(std::string* output, const char* format,
|
||||||
const substitute_internal::Arg& a0)
|
const substitute_internal::Arg& a0)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 1,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 1,
|
||||||
"There was 1 substitution argument given, but "
|
"There was 1 substitution argument given, but "
|
||||||
"this format std::string is either missing its $0, or "
|
"this format string is either missing its $0, or "
|
||||||
"contains one of $1-$9");
|
"contains one of $1-$9");
|
||||||
|
|
||||||
void SubstituteAndAppend(std::string* output, const char* format,
|
void SubstituteAndAppend(std::string* output, const char* format,
|
||||||
|
@ -374,7 +374,7 @@ void SubstituteAndAppend(std::string* output, const char* format,
|
||||||
const substitute_internal::Arg& a1)
|
const substitute_internal::Arg& a1)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 3,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 3,
|
||||||
"There were 2 substitution arguments given, but "
|
"There were 2 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0/$1, or "
|
"this format string is either missing its $0/$1, or "
|
||||||
"contains one of $2-$9");
|
"contains one of $2-$9");
|
||||||
|
|
||||||
void SubstituteAndAppend(std::string* output, const char* format,
|
void SubstituteAndAppend(std::string* output, const char* format,
|
||||||
|
@ -383,7 +383,7 @@ void SubstituteAndAppend(std::string* output, const char* format,
|
||||||
const substitute_internal::Arg& a2)
|
const substitute_internal::Arg& a2)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 7,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 7,
|
||||||
"There were 3 substitution arguments given, but "
|
"There were 3 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0/$1/$2, or "
|
"this format string is either missing its $0/$1/$2, or "
|
||||||
"contains one of $3-$9");
|
"contains one of $3-$9");
|
||||||
|
|
||||||
void SubstituteAndAppend(std::string* output, const char* format,
|
void SubstituteAndAppend(std::string* output, const char* format,
|
||||||
|
@ -393,7 +393,7 @@ void SubstituteAndAppend(std::string* output, const char* format,
|
||||||
const substitute_internal::Arg& a3)
|
const substitute_internal::Arg& a3)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 15,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 15,
|
||||||
"There were 4 substitution arguments given, but "
|
"There were 4 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$3, or "
|
"this format string is either missing its $0-$3, or "
|
||||||
"contains one of $4-$9");
|
"contains one of $4-$9");
|
||||||
|
|
||||||
void SubstituteAndAppend(std::string* output, const char* format,
|
void SubstituteAndAppend(std::string* output, const char* format,
|
||||||
|
@ -404,7 +404,7 @@ void SubstituteAndAppend(std::string* output, const char* format,
|
||||||
const substitute_internal::Arg& a4)
|
const substitute_internal::Arg& a4)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 31,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 31,
|
||||||
"There were 5 substitution arguments given, but "
|
"There were 5 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$4, or "
|
"this format string is either missing its $0-$4, or "
|
||||||
"contains one of $5-$9");
|
"contains one of $5-$9");
|
||||||
|
|
||||||
void SubstituteAndAppend(std::string* output, const char* format,
|
void SubstituteAndAppend(std::string* output, const char* format,
|
||||||
|
@ -416,7 +416,7 @@ void SubstituteAndAppend(std::string* output, const char* format,
|
||||||
const substitute_internal::Arg& a5)
|
const substitute_internal::Arg& a5)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 63,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 63,
|
||||||
"There were 6 substitution arguments given, but "
|
"There were 6 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$5, or "
|
"this format string is either missing its $0-$5, or "
|
||||||
"contains one of $6-$9");
|
"contains one of $6-$9");
|
||||||
|
|
||||||
void SubstituteAndAppend(
|
void SubstituteAndAppend(
|
||||||
|
@ -426,7 +426,7 @@ void SubstituteAndAppend(
|
||||||
const substitute_internal::Arg& a5, const substitute_internal::Arg& a6)
|
const substitute_internal::Arg& a5, const substitute_internal::Arg& a6)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 127,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 127,
|
||||||
"There were 7 substitution arguments given, but "
|
"There were 7 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$6, or "
|
"this format string is either missing its $0-$6, or "
|
||||||
"contains one of $7-$9");
|
"contains one of $7-$9");
|
||||||
|
|
||||||
void SubstituteAndAppend(
|
void SubstituteAndAppend(
|
||||||
|
@ -437,7 +437,7 @@ void SubstituteAndAppend(
|
||||||
const substitute_internal::Arg& a7)
|
const substitute_internal::Arg& a7)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 255,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 255,
|
||||||
"There were 8 substitution arguments given, but "
|
"There were 8 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$7, or "
|
"this format string is either missing its $0-$7, or "
|
||||||
"contains one of $8-$9");
|
"contains one of $8-$9");
|
||||||
|
|
||||||
void SubstituteAndAppend(
|
void SubstituteAndAppend(
|
||||||
|
@ -449,7 +449,7 @@ void SubstituteAndAppend(
|
||||||
ABSL_BAD_CALL_IF(
|
ABSL_BAD_CALL_IF(
|
||||||
substitute_internal::PlaceholderBitmask(format) != 511,
|
substitute_internal::PlaceholderBitmask(format) != 511,
|
||||||
"There were 9 substitution arguments given, but "
|
"There were 9 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$8, or contains a $9");
|
"this format string is either missing its $0-$8, or contains a $9");
|
||||||
|
|
||||||
void SubstituteAndAppend(
|
void SubstituteAndAppend(
|
||||||
std::string* output, const char* format, const substitute_internal::Arg& a0,
|
std::string* output, const char* format, const substitute_internal::Arg& a0,
|
||||||
|
@ -460,7 +460,7 @@ void SubstituteAndAppend(
|
||||||
const substitute_internal::Arg& a9)
|
const substitute_internal::Arg& a9)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 1023,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 1023,
|
||||||
"There were 10 substitution arguments given, but this "
|
"There were 10 substitution arguments given, but this "
|
||||||
"format std::string doesn't contain all of $0 through $9");
|
"format string doesn't contain all of $0 through $9");
|
||||||
#endif // ABSL_BAD_CALL_IF
|
#endif // ABSL_BAD_CALL_IF
|
||||||
|
|
||||||
// Substitute()
|
// Substitute()
|
||||||
|
@ -586,19 +586,19 @@ ABSL_MUST_USE_RESULT inline std::string Substitute(
|
||||||
std::string Substitute(const char* format)
|
std::string Substitute(const char* format)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 0,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 0,
|
||||||
"There were no substitution arguments "
|
"There were no substitution arguments "
|
||||||
"but this format std::string has a $[0-9] in it");
|
"but this format string has a $[0-9] in it");
|
||||||
|
|
||||||
std::string Substitute(const char* format, const substitute_internal::Arg& a0)
|
std::string Substitute(const char* format, const substitute_internal::Arg& a0)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 1,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 1,
|
||||||
"There was 1 substitution argument given, but "
|
"There was 1 substitution argument given, but "
|
||||||
"this format std::string is either missing its $0, or "
|
"this format string is either missing its $0, or "
|
||||||
"contains one of $1-$9");
|
"contains one of $1-$9");
|
||||||
|
|
||||||
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
const substitute_internal::Arg& a1)
|
const substitute_internal::Arg& a1)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 3,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 3,
|
||||||
"There were 2 substitution arguments given, but "
|
"There were 2 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0/$1, or "
|
"this format string is either missing its $0/$1, or "
|
||||||
"contains one of $2-$9");
|
"contains one of $2-$9");
|
||||||
|
|
||||||
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
|
@ -606,7 +606,7 @@ std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
const substitute_internal::Arg& a2)
|
const substitute_internal::Arg& a2)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 7,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 7,
|
||||||
"There were 3 substitution arguments given, but "
|
"There were 3 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0/$1/$2, or "
|
"this format string is either missing its $0/$1/$2, or "
|
||||||
"contains one of $3-$9");
|
"contains one of $3-$9");
|
||||||
|
|
||||||
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
|
@ -615,7 +615,7 @@ std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
const substitute_internal::Arg& a3)
|
const substitute_internal::Arg& a3)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 15,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 15,
|
||||||
"There were 4 substitution arguments given, but "
|
"There were 4 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$3, or "
|
"this format string is either missing its $0-$3, or "
|
||||||
"contains one of $4-$9");
|
"contains one of $4-$9");
|
||||||
|
|
||||||
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
|
@ -625,7 +625,7 @@ std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
const substitute_internal::Arg& a4)
|
const substitute_internal::Arg& a4)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 31,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 31,
|
||||||
"There were 5 substitution arguments given, but "
|
"There were 5 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$4, or "
|
"this format string is either missing its $0-$4, or "
|
||||||
"contains one of $5-$9");
|
"contains one of $5-$9");
|
||||||
|
|
||||||
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
|
@ -636,7 +636,7 @@ std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
const substitute_internal::Arg& a5)
|
const substitute_internal::Arg& a5)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 63,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 63,
|
||||||
"There were 6 substitution arguments given, but "
|
"There were 6 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$5, or "
|
"this format string is either missing its $0-$5, or "
|
||||||
"contains one of $6-$9");
|
"contains one of $6-$9");
|
||||||
|
|
||||||
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
|
@ -648,7 +648,7 @@ std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
const substitute_internal::Arg& a6)
|
const substitute_internal::Arg& a6)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 127,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 127,
|
||||||
"There were 7 substitution arguments given, but "
|
"There were 7 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$6, or "
|
"this format string is either missing its $0-$6, or "
|
||||||
"contains one of $7-$9");
|
"contains one of $7-$9");
|
||||||
|
|
||||||
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
|
@ -661,7 +661,7 @@ std::string Substitute(const char* format, const substitute_internal::Arg& a0,
|
||||||
const substitute_internal::Arg& a7)
|
const substitute_internal::Arg& a7)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 255,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 255,
|
||||||
"There were 8 substitution arguments given, but "
|
"There were 8 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$7, or "
|
"this format string is either missing its $0-$7, or "
|
||||||
"contains one of $8-$9");
|
"contains one of $8-$9");
|
||||||
|
|
||||||
std::string Substitute(
|
std::string Substitute(
|
||||||
|
@ -673,7 +673,7 @@ std::string Substitute(
|
||||||
ABSL_BAD_CALL_IF(
|
ABSL_BAD_CALL_IF(
|
||||||
substitute_internal::PlaceholderBitmask(format) != 511,
|
substitute_internal::PlaceholderBitmask(format) != 511,
|
||||||
"There were 9 substitution arguments given, but "
|
"There were 9 substitution arguments given, but "
|
||||||
"this format std::string is either missing its $0-$8, or contains a $9");
|
"this format string is either missing its $0-$8, or contains a $9");
|
||||||
|
|
||||||
std::string Substitute(
|
std::string Substitute(
|
||||||
const char* format, const substitute_internal::Arg& a0,
|
const char* format, const substitute_internal::Arg& a0,
|
||||||
|
@ -684,7 +684,7 @@ std::string Substitute(
|
||||||
const substitute_internal::Arg& a9)
|
const substitute_internal::Arg& a9)
|
||||||
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 1023,
|
ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 1023,
|
||||||
"There were 10 substitution arguments given, but this "
|
"There were 10 substitution arguments given, but this "
|
||||||
"format std::string doesn't contain all of $0 through $9");
|
"format string doesn't contain all of $0 through $9");
|
||||||
#endif // ABSL_BAD_CALL_IF
|
#endif // ABSL_BAD_CALL_IF
|
||||||
|
|
||||||
ABSL_NAMESPACE_END
|
ABSL_NAMESPACE_END
|
||||||
|
|
|
@ -89,7 +89,7 @@ TEST(SubstituteTest, Substitute) {
|
||||||
str = absl::Substitute("$0", char_buf);
|
str = absl::Substitute("$0", char_buf);
|
||||||
EXPECT_EQ("print me too", str);
|
EXPECT_EQ("print me too", str);
|
||||||
|
|
||||||
// null char* is "doubly" special. Represented as the empty std::string.
|
// null char* is "doubly" special. Represented as the empty string.
|
||||||
char_p = nullptr;
|
char_p = nullptr;
|
||||||
str = absl::Substitute("$0", char_p);
|
str = absl::Substitute("$0", char_p);
|
||||||
EXPECT_EQ("", str);
|
EXPECT_EQ("", str);
|
||||||
|
@ -189,14 +189,14 @@ TEST(SubstituteTest, VectorBoolRef) {
|
||||||
TEST(SubstituteDeathTest, SubstituteDeath) {
|
TEST(SubstituteDeathTest, SubstituteDeath) {
|
||||||
EXPECT_DEBUG_DEATH(
|
EXPECT_DEBUG_DEATH(
|
||||||
static_cast<void>(absl::Substitute(absl::string_view("-$2"), "a", "b")),
|
static_cast<void>(absl::Substitute(absl::string_view("-$2"), "a", "b")),
|
||||||
"Invalid absl::Substitute\\(\\) format std::string: asked for \"\\$2\", "
|
"Invalid absl::Substitute\\(\\) format string: asked for \"\\$2\", "
|
||||||
"but only 2 args were given.");
|
"but only 2 args were given.");
|
||||||
EXPECT_DEBUG_DEATH(
|
EXPECT_DEBUG_DEATH(
|
||||||
static_cast<void>(absl::Substitute(absl::string_view("-$z-"))),
|
static_cast<void>(absl::Substitute(absl::string_view("-$z-"))),
|
||||||
"Invalid absl::Substitute\\(\\) format std::string: \"-\\$z-\"");
|
"Invalid absl::Substitute\\(\\) format string: \"-\\$z-\"");
|
||||||
EXPECT_DEBUG_DEATH(
|
EXPECT_DEBUG_DEATH(
|
||||||
static_cast<void>(absl::Substitute(absl::string_view("-$"))),
|
static_cast<void>(absl::Substitute(absl::string_view("-$"))),
|
||||||
"Invalid absl::Substitute\\(\\) format std::string: \"-\\$\"");
|
"Invalid absl::Substitute\\(\\) format string: \"-\\$\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // GTEST_HAS_DEATH_TEST
|
#endif // GTEST_HAS_DEATH_TEST
|
||||||
|
|
|
@ -299,7 +299,7 @@ static struct SynchEvent { // this is a trivial hash table for the events
|
||||||
bool log; // logging turned on
|
bool log; // logging turned on
|
||||||
|
|
||||||
// Constant after initialization
|
// Constant after initialization
|
||||||
char name[1]; // actually longer---NUL-terminated std::string
|
char name[1]; // actually longer---NUL-terminated string
|
||||||
} * synch_event[kNSynchEvent] ABSL_GUARDED_BY(synch_event_mu);
|
} * synch_event[kNSynchEvent] ABSL_GUARDED_BY(synch_event_mu);
|
||||||
|
|
||||||
// Ensure that the object at "addr" has a SynchEvent struct associated with it,
|
// Ensure that the object at "addr" has a SynchEvent struct associated with it,
|
||||||
|
|
|
@ -38,7 +38,7 @@ std::string FormatYearAnd(string_view fmt, CivilSecond cs) {
|
||||||
const CivilSecond ncs(NormalizeYear(cs.year()), cs.month(), cs.day(),
|
const CivilSecond ncs(NormalizeYear(cs.year()), cs.month(), cs.day(),
|
||||||
cs.hour(), cs.minute(), cs.second());
|
cs.hour(), cs.minute(), cs.second());
|
||||||
const TimeZone utc = UTCTimeZone();
|
const TimeZone utc = UTCTimeZone();
|
||||||
// TODO(absl-team): Avoid conversion of fmt std::string.
|
// TODO(absl-team): Avoid conversion of fmt string.
|
||||||
return StrCat(cs.year(),
|
return StrCat(cs.year(),
|
||||||
FormatTime(std::string(fmt), FromCivil(ncs, utc), utc));
|
FormatTime(std::string(fmt), FromCivil(ncs, utc), utc));
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ template <typename CivilT>
|
||||||
bool ParseYearAnd(string_view fmt, string_view s, CivilT* c) {
|
bool ParseYearAnd(string_view fmt, string_view s, CivilT* c) {
|
||||||
// Civil times support a larger year range than absl::Time, so we need to
|
// Civil times support a larger year range than absl::Time, so we need to
|
||||||
// parse the year separately, normalize it, then use absl::ParseTime on the
|
// parse the year separately, normalize it, then use absl::ParseTime on the
|
||||||
// normalized std::string.
|
// normalized string.
|
||||||
const std::string ss = std::string(s); // TODO(absl-team): Avoid conversion.
|
const std::string ss = std::string(s); // TODO(absl-team): Avoid conversion.
|
||||||
const char* const np = ss.c_str();
|
const char* const np = ss.c_str();
|
||||||
char* endp;
|
char* endp;
|
||||||
|
@ -82,7 +82,7 @@ bool ParseAs(string_view s, CivilT2* c) {
|
||||||
|
|
||||||
template <typename CivilT>
|
template <typename CivilT>
|
||||||
bool ParseLenient(string_view s, CivilT* c) {
|
bool ParseLenient(string_view s, CivilT* c) {
|
||||||
// A fastpath for when the given std::string data parses exactly into the given
|
// A fastpath for when the given string data parses exactly into the given
|
||||||
// type T (e.g., s="YYYY-MM-DD" and CivilT=CivilDay).
|
// type T (e.g., s="YYYY-MM-DD" and CivilT=CivilDay).
|
||||||
if (ParseCivilTime(s, c)) return true;
|
if (ParseCivilTime(s, c)) return true;
|
||||||
// Try parsing as each of the 6 types, trying the most common types first
|
// Try parsing as each of the 6 types, trying the most common types first
|
||||||
|
|
|
@ -874,12 +874,12 @@ bool ParseDuration(const std::string& dur_string, Duration* d) {
|
||||||
++start;
|
++start;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can't parse a duration from an empty std::string.
|
// Can't parse a duration from an empty string.
|
||||||
if (*start == '\0') {
|
if (*start == '\0') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special case for a std::string of "0".
|
// Special case for a string of "0".
|
||||||
if (*start == '0' && *(start + 1) == '\0') {
|
if (*start == '0' && *(start + 1) == '\0') {
|
||||||
*d = ZeroDuration();
|
*d = ZeroDuration();
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -173,7 +173,7 @@ TEST(ParseTime, WithTimeZone) {
|
||||||
absl::Time t;
|
absl::Time t;
|
||||||
std::string e;
|
std::string e;
|
||||||
|
|
||||||
// We can parse a std::string without a UTC offset if we supply a timezone.
|
// We can parse a string without a UTC offset if we supply a timezone.
|
||||||
EXPECT_TRUE(
|
EXPECT_TRUE(
|
||||||
absl::ParseTime("%Y-%m-%d %H:%M:%S", "2013-06-28 19:08:09", tz, &t, &e))
|
absl::ParseTime("%Y-%m-%d %H:%M:%S", "2013-06-28 19:08:09", tz, &t, &e))
|
||||||
<< e;
|
<< e;
|
||||||
|
@ -327,7 +327,7 @@ TEST(ParseTime, InfiniteTime) {
|
||||||
EXPECT_TRUE(absl::ParseTime("%H:%M blah", " infinite-past ", &t, &err));
|
EXPECT_TRUE(absl::ParseTime("%H:%M blah", " infinite-past ", &t, &err));
|
||||||
EXPECT_EQ(absl::InfinitePast(), t);
|
EXPECT_EQ(absl::InfinitePast(), t);
|
||||||
|
|
||||||
// "infinite-future" as literal std::string
|
// "infinite-future" as literal string
|
||||||
absl::TimeZone tz = absl::UTCTimeZone();
|
absl::TimeZone tz = absl::UTCTimeZone();
|
||||||
EXPECT_TRUE(absl::ParseTime("infinite-future %H:%M", "infinite-future 03:04",
|
EXPECT_TRUE(absl::ParseTime("infinite-future %H:%M", "infinite-future 03:04",
|
||||||
&t, &err));
|
&t, &err));
|
||||||
|
@ -335,7 +335,7 @@ TEST(ParseTime, InfiniteTime) {
|
||||||
EXPECT_EQ(3, tz.At(t).cs.hour());
|
EXPECT_EQ(3, tz.At(t).cs.hour());
|
||||||
EXPECT_EQ(4, tz.At(t).cs.minute());
|
EXPECT_EQ(4, tz.At(t).cs.minute());
|
||||||
|
|
||||||
// "infinite-past" as literal std::string
|
// "infinite-past" as literal string
|
||||||
EXPECT_TRUE(
|
EXPECT_TRUE(
|
||||||
absl::ParseTime("infinite-past %H:%M", "infinite-past 03:04", &t, &err));
|
absl::ParseTime("infinite-past %H:%M", "infinite-past 03:04", &t, &err));
|
||||||
EXPECT_NE(absl::InfinitePast(), t);
|
EXPECT_NE(absl::InfinitePast(), t);
|
||||||
|
|
|
@ -209,7 +209,7 @@ class time_zone {
|
||||||
// version() and description() provide additional information about the
|
// version() and description() provide additional information about the
|
||||||
// time zone. The content of each of the returned strings is unspecified,
|
// time zone. The content of each of the returned strings is unspecified,
|
||||||
// however, when the IANA Time Zone Database is the underlying data source
|
// however, when the IANA Time Zone Database is the underlying data source
|
||||||
// the version() std::string will be in the familar form (e.g, "2018e") or
|
// the version() string will be in the familar form (e.g, "2018e") or
|
||||||
// empty when unavailable.
|
// empty when unavailable.
|
||||||
//
|
//
|
||||||
// Note: These functions are for informational or testing purposes only.
|
// Note: These functions are for informational or testing purposes only.
|
||||||
|
|
|
@ -37,7 +37,7 @@ class ZoneInfoSource {
|
||||||
|
|
||||||
// Until the zoneinfo data supports versioning information, we provide
|
// Until the zoneinfo data supports versioning information, we provide
|
||||||
// a way for a ZoneInfoSource to indicate it out-of-band. The default
|
// a way for a ZoneInfoSource to indicate it out-of-band. The default
|
||||||
// implementation returns an empty std::string.
|
// implementation returns an empty string.
|
||||||
virtual std::string Version() const;
|
virtual std::string Version() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -189,7 +189,7 @@ void FormatTM(std::string* out, const std::string& fmt, const std::tm& tm) {
|
||||||
// strftime(3) returns the number of characters placed in the output
|
// strftime(3) returns the number of characters placed in the output
|
||||||
// array (which may be 0 characters). It also returns 0 to indicate
|
// array (which may be 0 characters). It also returns 0 to indicate
|
||||||
// an error, like the array wasn't large enough. To accommodate this,
|
// an error, like the array wasn't large enough. To accommodate this,
|
||||||
// the following code grows the buffer size from 2x the format std::string
|
// the following code grows the buffer size from 2x the format string
|
||||||
// length up to 32x.
|
// length up to 32x.
|
||||||
for (std::size_t i = 2; i != 32; i *= 2) {
|
for (std::size_t i = 2; i != 32; i *= 2) {
|
||||||
std::size_t buf_size = fmt.size() * i;
|
std::size_t buf_size = fmt.size() * i;
|
||||||
|
@ -839,7 +839,7 @@ bool parse(const std::string& format, const std::string& input,
|
||||||
// Skip any remaining whitespace.
|
// Skip any remaining whitespace.
|
||||||
while (std::isspace(*data)) ++data;
|
while (std::isspace(*data)) ++data;
|
||||||
|
|
||||||
// parse() must consume the entire input std::string.
|
// parse() must consume the entire input string.
|
||||||
if (*data != '\0') {
|
if (*data != '\0') {
|
||||||
if (err != nullptr) *err = "Illegal trailing data in input string";
|
if (err != nullptr) *err = "Illegal trailing data in input string";
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -767,7 +767,7 @@ TEST(Parse, WithTimeZone) {
|
||||||
EXPECT_TRUE(load_time_zone("America/Los_Angeles", &tz));
|
EXPECT_TRUE(load_time_zone("America/Los_Angeles", &tz));
|
||||||
time_point<chrono::nanoseconds> tp;
|
time_point<chrono::nanoseconds> tp;
|
||||||
|
|
||||||
// We can parse a std::string without a UTC offset if we supply a timezone.
|
// We can parse a string without a UTC offset if we supply a timezone.
|
||||||
EXPECT_TRUE(parse("%Y-%m-%d %H:%M:%S", "2013-06-28 19:08:09", tz, &tp));
|
EXPECT_TRUE(parse("%Y-%m-%d %H:%M:%S", "2013-06-28 19:08:09", tz, &tp));
|
||||||
ExpectTime(tp, tz, 2013, 6, 28, 19, 8, 9, -7 * 60 * 60, true, "PDT");
|
ExpectTime(tp, tz, 2013, 6, 28, 19, 8, 9, -7 * 60 * 60, true, "PDT");
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ class time_zone::Impl {
|
||||||
return zone_->PrevTransition(tp, trans);
|
return zone_->PrevTransition(tp, trans);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns an implementation-defined version std::string for this time zone.
|
// Returns an implementation-defined version string for this time zone.
|
||||||
std::string Version() const { return zone_->Version(); }
|
std::string Version() const { return zone_->Version(); }
|
||||||
|
|
||||||
// Returns an implementation-defined description of this time zone.
|
// Returns an implementation-defined description of this time zone.
|
||||||
|
|
|
@ -506,7 +506,7 @@ bool TimeZoneInfo::Load(const std::string& name, ZoneInfoSource* zip) {
|
||||||
|
|
||||||
// If we did not find version information during the standard loading
|
// If we did not find version information during the standard loading
|
||||||
// process (as of tzh_version '3' that is unsupported), then ask the
|
// process (as of tzh_version '3' that is unsupported), then ask the
|
||||||
// ZoneInfoSource for any out-of-bound version std::string it may be privy to.
|
// ZoneInfoSource for any out-of-bound version string it may be privy to.
|
||||||
if (version_.empty()) {
|
if (version_.empty()) {
|
||||||
version_ = zip->Version();
|
version_ = zip->Version();
|
||||||
}
|
}
|
||||||
|
|
|
@ -749,7 +749,7 @@ TEST(TimeZone, Failures) {
|
||||||
EXPECT_EQ(chrono::system_clock::from_time_t(0),
|
EXPECT_EQ(chrono::system_clock::from_time_t(0),
|
||||||
convert(civil_second(1970, 1, 1, 0, 0, 0), tz)); // UTC
|
convert(civil_second(1970, 1, 1, 0, 0, 0), tz)); // UTC
|
||||||
|
|
||||||
// Loading an empty std::string timezone should fail.
|
// Loading an empty string timezone should fail.
|
||||||
tz = LoadZone("America/Los_Angeles");
|
tz = LoadZone("America/Los_Angeles");
|
||||||
EXPECT_FALSE(load_time_zone("", &tz));
|
EXPECT_FALSE(load_time_zone("", &tz));
|
||||||
EXPECT_EQ(chrono::system_clock::from_time_t(0),
|
EXPECT_EQ(chrono::system_clock::from_time_t(0),
|
||||||
|
|
|
@ -83,13 +83,13 @@ struct tzhead {
|
||||||
** If tzh_version is '2' or greater, the above is followed by a second instance
|
** If tzh_version is '2' or greater, the above is followed by a second instance
|
||||||
** of tzhead and a second instance of the data in which each coded transition
|
** of tzhead and a second instance of the data in which each coded transition
|
||||||
** time uses 8 rather than 4 chars,
|
** time uses 8 rather than 4 chars,
|
||||||
** then a POSIX-TZ-environment-variable-style std::string for use in handling
|
** then a POSIX-TZ-environment-variable-style string for use in handling
|
||||||
** instants after the last transition time stored in the file
|
** instants after the last transition time stored in the file
|
||||||
** (with nothing between the newlines if there is no POSIX representation for
|
** (with nothing between the newlines if there is no POSIX representation for
|
||||||
** such instants).
|
** such instants).
|
||||||
**
|
**
|
||||||
** If tz_version is '3' or greater, the above is extended as follows.
|
** If tz_version is '3' or greater, the above is extended as follows.
|
||||||
** First, the POSIX TZ std::string's hour offset may range from -167
|
** First, the POSIX TZ string's hour offset may range from -167
|
||||||
** through 167 as compared to the POSIX-required 0 through 24.
|
** through 167 as compared to the POSIX-required 0 through 24.
|
||||||
** Second, its DST start time may be January 1 at 00:00 and its stop
|
** Second, its DST start time may be January 1 at 00:00 and its stop
|
||||||
** time December 31 at 24:00 plus the difference between DST and
|
** time December 31 at 24:00 plus the difference between DST and
|
||||||
|
|
|
@ -88,7 +88,7 @@ TEST(TimeZone, Failures) {
|
||||||
EXPECT_FALSE(LoadTimeZone("Invalid/TimeZone", &tz));
|
EXPECT_FALSE(LoadTimeZone("Invalid/TimeZone", &tz));
|
||||||
EXPECT_EQ(absl::UTCTimeZone(), tz); // guaranteed fallback to UTC
|
EXPECT_EQ(absl::UTCTimeZone(), tz); // guaranteed fallback to UTC
|
||||||
|
|
||||||
// Loading an empty std::string timezone should fail.
|
// Loading an empty string timezone should fail.
|
||||||
tz = absl::time_internal::LoadTimeZone("America/Los_Angeles");
|
tz = absl::time_internal::LoadTimeZone("America/Los_Angeles");
|
||||||
EXPECT_FALSE(LoadTimeZone("", &tz));
|
EXPECT_FALSE(LoadTimeZone("", &tz));
|
||||||
EXPECT_EQ(absl::UTCTimeZone(), tz); // guaranteed fallback to UTC
|
EXPECT_EQ(absl::UTCTimeZone(), tz); // guaranteed fallback to UTC
|
||||||
|
|
|
@ -679,7 +679,7 @@ TEST(VariantTest, TestSelfAssignment) {
|
||||||
object.operator=(object);
|
object.operator=(object);
|
||||||
EXPECT_EQ(0, counter);
|
EXPECT_EQ(0, counter);
|
||||||
|
|
||||||
// A std::string long enough that it's likely to defeat any inline representation
|
// A string long enough that it's likely to defeat any inline representation
|
||||||
// optimization.
|
// optimization.
|
||||||
const std::string long_str(128, 'a');
|
const std::string long_str(128, 'a');
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue