Commit 822e3244 by Abseil Team Committed by Copybara-Service

Add `AbslStringify()` support to `absl::Cord`

PiperOrigin-RevId: 576149980
Change-Id: I0a7e3df7a01edc78ee5d15d8d8e82e7bbc5fc0f3
parent a6d9a9cd
...@@ -765,6 +765,14 @@ class Cord { ...@@ -765,6 +765,14 @@ class Cord {
cord->Append(part); cord->Append(part);
} }
// Support automatic stringification with absl::StrCat and absl::StrFormat.
template <typename Sink>
friend void AbslStringify(Sink& sink, const absl::Cord& cord) {
for (absl::string_view chunk : cord.Chunks()) {
sink.Append(chunk);
}
}
// Cord::SetExpectedChecksum() // Cord::SetExpectedChecksum()
// //
// Stores a checksum value with this non-empty cord instance, for later // Stores a checksum value with this non-empty cord instance, for later
......
...@@ -2656,6 +2656,13 @@ TEST_P(CordTest, Format) { ...@@ -2656,6 +2656,13 @@ TEST_P(CordTest, Format) {
EXPECT_EQ(c, "There were 0003 little pigs.And 1 bad wolf!"); EXPECT_EQ(c, "There were 0003 little pigs.And 1 bad wolf!");
} }
TEST_P(CordTest, Stringify) {
absl::Cord c =
absl::MakeFragmentedCord({"A ", "small ", "fragmented ", "Cord", "."});
MaybeHarden(c);
EXPECT_EQ(absl::StrCat(c), "A small fragmented Cord.");
}
TEST_P(CordTest, Hardening) { TEST_P(CordTest, Hardening) {
absl::Cord cord("hello"); absl::Cord cord("hello");
MaybeHarden(cord); MaybeHarden(cord);
......
...@@ -158,6 +158,7 @@ template <typename T> ...@@ -158,6 +158,7 @@ template <typename T>
auto FormatConvertImpl(const T& v, FormatConversionSpecImpl, auto FormatConvertImpl(const T& v, FormatConversionSpecImpl,
FormatSinkImpl* sink) FormatSinkImpl* sink)
-> std::enable_if_t<!std::is_enum<T>::value && -> std::enable_if_t<!std::is_enum<T>::value &&
!std::is_same<T, absl::Cord>::value &&
std::is_void<decltype(AbslStringify( std::is_void<decltype(AbslStringify(
std::declval<FormatSink&>(), v))>::value, std::declval<FormatSink&>(), v))>::value,
ArgConvertResult<FormatConversionCharSetInternal::v>> { ArgConvertResult<FormatConversionCharSetInternal::v>> {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment