class Cord
Defined at line 171 of file ../../third_party/abseil-cpp/absl/strings/cord.h
Cord
A Cord is a sequence of characters, designed to be more efficient than a
`std::string` in certain circumstances: namely, large string data that needs
to change over its lifetime or shared, especially when such data is shared
across API boundaries.
A Cord stores its character data in a structure that allows efficient prepend
and append operations. This makes a Cord useful for large string data sent
over in a wire format that may need to be prepended or appended at some point
during the data exchange (e.g. HTTP, protocol buffers). For example, a
Cord is useful for storing an HTTP request, and prepending an HTTP header to
such a request.
Cords should not be used for storing general string data, however. They
require overhead to construct and are slower than strings for random access.
The Cord API provides the following common API operations:
* Create or assign Cords out of existing string data, memory, or other Cords
* Append and prepend data to an existing Cord
* Create new Sub-Cords from existing Cord data
* Swap Cord data and compare Cord equality
* Write out Cord data by constructing a `std::string`
Additionally, the API provides iterator utilities to iterate through Cord
data via chunks or character bytes.
Public Methods
void Cord ()
Creates an empty Cord.
Defined at line 1287 of file ../../third_party/abseil-cpp/absl/strings/cord.h
void Cord (const Cord & src)
Creates a Cord from an existing Cord. Cord is copyable and efficiently
movable. The moved-from state is valid but unspecified.
Defined at line 1315 of file ../../third_party/abseil-cpp/absl/strings/cord.h
void Cord (Cord && src)
Defined at line 1317 of file ../../third_party/abseil-cpp/absl/strings/cord.h
Cord & operator= (const Cord & x)
Defined at line 1301 of file ../../third_party/abseil-cpp/absl/strings/cord.h
Cord & operator= (Cord && x)
Defined at line 1323 of file ../../third_party/abseil-cpp/absl/strings/cord.h
void Cord (absl::string_view src)
Creates a Cord from a `src` string. This constructor is marked explicit to
prevent implicit Cord constructions from arguments convertible to an
`absl::string_view`.
Defined at line 1289 of file ../../third_party/abseil-cpp/absl/strings/cord.h
Cord & operator= (absl::string_view src)
template <typename T, EnableIfString<T> = 0>
void Cord (T && src)
Creates a Cord from a `std::string
&
&
` rvalue. These constructors are
templated to avoid ambiguities for types that are convertible to both
`absl::string_view` and `std::string`, such as `const char*`.
void ~Cord ()
Cord::~Cord()
Destructs the Cord.
Defined at line 207 of file ../../third_party/abseil-cpp/absl/strings/cord.h
template <typename T, EnableIfString<T> = 0>
Cord & operator= (T && src)
Defined at line 1307 of file ../../third_party/abseil-cpp/absl/strings/cord.h
void Clear ()
Cord::Clear()
Releases the Cord data. Any nodes that share data with other Cords, if
applicable, will have their reference counts reduced by 1.
void Append (const Cord & src)
Cord::Append()
Appends data to the Cord, which may come from another Cord or other string
data.
void Append (Cord && src)
void Append (absl::string_view src)
Defined at line 1381 of file ../../third_party/abseil-cpp/absl/strings/cord.h
template <typename T, EnableIfString<T> = 0>
void Append (T && src)
void Append (CordBuffer buffer)
Appends `buffer` to this cord, unless `buffer` has a zero length in which
case this method has no effect on this cord instance.
This method is guaranteed to consume `buffer`.
Defined at line 1389 of file ../../third_party/abseil-cpp/absl/strings/cord.h
CordBuffer GetAppendBuffer (size_t capacity, size_t min_capacity)
Returns a CordBuffer, re-using potential existing capacity in this cord.
Cord instances may have additional unused capacity in the last (or first)
nodes of the underlying tree to facilitate amortized growth. This method
allows applications to explicitly use this spare capacity if available,
or create a new CordBuffer instance otherwise.
If this cord has a final non-shared node with at least `min_capacity`
available, then this method will return that buffer including its data
contents. I.e.; the returned buffer will have a non-zero length, and
a capacity of at least `buffer.length + min_capacity`. Otherwise, this
method will return `CordBuffer::CreateWithDefaultLimit(capacity)`.
Below an example of using GetAppendBuffer. Notice that in this example we
use `GetAppendBuffer()` only on the first iteration. As we know nothing
about any initial extra capacity in `cord`, we may be able to use the extra
capacity. But as we add new buffers with fully utilized contents after that
we avoid calling `GetAppendBuffer()` on subsequent iterations: while this
works fine, it results in an unnecessary inspection of cord contents:
void AppendRandomDataToCord(absl::Cord
&cord
, size_t n) {
bool first = true;
while (n > 0) {
CordBuffer buffer = first ? cord.GetAppendBuffer(n)
: CordBuffer::CreateWithDefaultLimit(n);
absl::Span
<char
> data = buffer.available_up_to(n);
FillRandomValues(data.data(), data.size());
buffer.IncreaseLengthBy(data.size());
cord.Append(std::move(buffer));
n -= data.size();
first = false;
}
}
Defined at line 1409 of file ../../third_party/abseil-cpp/absl/strings/cord.h
CordBuffer GetCustomAppendBuffer (size_t block_size, size_t capacity, size_t min_capacity)
Returns a CordBuffer, re-using potential existing capacity in this cord.
This function is identical to `GetAppendBuffer`, except that in the case
where a new `CordBuffer` is allocated, it is allocated using the provided
custom limit instead of the default limit. `GetAppendBuffer` will default
to `CordBuffer::CreateWithDefaultLimit(capacity)` whereas this method
will default to `CordBuffer::CreateWithCustomLimit(block_size, capacity)`.
This method is equivalent to `GetAppendBuffer` if `block_size` is zero.
See the documentation for `CreateWithCustomLimit` for more details on the
restrictions and legal values for `block_size`.
Defined at line 1414 of file ../../third_party/abseil-cpp/absl/strings/cord.h
void Prepend (const Cord & src)
Cord::Prepend()
Prepends data to the Cord, which may come from another Cord or other string
data.
void Prepend (absl::string_view src)
Defined at line 1385 of file ../../third_party/abseil-cpp/absl/strings/cord.h
template <typename T, EnableIfString<T> = 0>
void Prepend (T && src)
void Prepend (CordBuffer buffer)
Prepends `buffer` to this cord, unless `buffer` has a zero length in which
case this method has no effect on this cord instance.
This method is guaranteed to consume `buffer`.
Defined at line 1399 of file ../../third_party/abseil-cpp/absl/strings/cord.h
void RemovePrefix (size_t n)
Cord::RemovePrefix()
Removes the first `n` bytes of a Cord.
void RemoveSuffix (size_t n)
Cord Subcord (size_t pos, size_t new_size)
Cord::Subcord()
Returns a new Cord representing the subrange [pos, pos + new_size) of
*this. If pos >= size(), the result is empty(). If
(pos + new_size) >= size(), the result is the subrange [pos, size()).
void swap (Cord & other)
Cord::swap()
Swaps the contents of the Cord with `other`.
Defined at line 1319 of file ../../third_party/abseil-cpp/absl/strings/cord.h
size_t size ()
Cord::size()
Returns the size of the Cord.
Defined at line 1330 of file ../../third_party/abseil-cpp/absl/strings/cord.h
bool empty ()
Cord::empty()
Determines whether the given Cord is empty, returning `true` if so.
Defined at line 1335 of file ../../third_party/abseil-cpp/absl/strings/cord.h
size_t EstimatedMemoryUsage (CordMemoryAccounting accounting_method)
Cord::EstimatedMemoryUsage()
Returns the *approximate* number of bytes held by this cord.
See CordMemoryAccounting for more information on the accounting method.
Defined at line 1337 of file ../../third_party/abseil-cpp/absl/strings/cord.h
int Compare (absl::string_view rhs)
Cord::Compare()
Compares 'this' Cord with rhs. This function and its relatives treat Cords
as sequences of unsigned bytes. The comparison is a straightforward
lexicographic comparison. `Cord::Compare()` returns values as follows:
-1 'this' Cord is smaller
0 two Cords are equal
1 'this' Cord is larger
int Compare (const Cord & rhs)
Defined at line 1427 of file ../../third_party/abseil-cpp/absl/strings/cord.h
bool StartsWith (const Cord & rhs)
Cord::StartsWith()
Determines whether the Cord starts with the passed string data `rhs`.
Defined at line 1436 of file ../../third_party/abseil-cpp/absl/strings/cord.h
bool StartsWith (absl::string_view rhs)
Defined at line 1443 of file ../../third_party/abseil-cpp/absl/strings/cord.h
bool EndsWith (absl::string_view rhs)
Cord::EndsWith()
Determines whether the Cord ends with the passed string data `rhs`.
bool EndsWith (const Cord & rhs)
bool Contains (absl::string_view rhs)
Cord::Contains()
Determines whether the Cord contains the passed string data `rhs`.
bool Contains (const Cord & rhs)
std::string operator basic_string ()
Cord::operator std::string()
Converts a Cord into a `std::string()`. This operator is marked explicit to
prevent unintended Cord usage in functions that take a string.
ChunkIterator chunk_begin ()
Cord::chunk_begin()
Returns an iterator to the first chunk of the `Cord`.
Generally, prefer using `Cord::Chunks()` within a range-based for loop for
iterating over the chunks of a Cord. This method may be useful for getting
a `ChunkIterator` where range-based for-loops are not useful.
Example:
absl::Cord::ChunkIterator FindAsChunk(const absl::Cord
&
c,
absl::string_view s) {
return std::find(c.chunk_begin(), c.chunk_end(), s);
}
Defined at line 1559 of file ../../third_party/abseil-cpp/absl/strings/cord.h
ChunkIterator chunk_end ()
Cord::chunk_end()
Returns an iterator one increment past the last chunk of the `Cord`.
Generally, prefer using `Cord::Chunks()` within a range-based for loop for
iterating over the chunks of a Cord. This method may be useful for getting
a `ChunkIterator` where range-based for-loops may not be available.
Defined at line 1563 of file ../../third_party/abseil-cpp/absl/strings/cord.h
ChunkRange Chunks ()
Cord::Chunks()
Returns a `Cord::ChunkRange` for iterating over the chunks of a `Cord` with
a range-based for-loop. For most iteration tasks on a Cord, use
`Cord::Chunks()` to retrieve this iterator.
Example:
void ProcessChunks(const Cord
&
cord) {
for (absl::string_view chunk : cord.Chunks()) { ... }
}
Note that the ordinary caveats of temporary lifetime extension apply:
void Process() {
for (absl::string_view chunk : CordFactory().Chunks()) {
// The temporary Cord returned by CordFactory has been destroyed!
}
}
Defined at line 1573 of file ../../third_party/abseil-cpp/absl/strings/cord.h
Cord AdvanceAndRead (absl::Nonnull<CharIterator *> it, size_t n_bytes)
Cord::AdvanceAndRead()
Advances the `Cord::CharIterator` by `n_bytes` and returns the bytes
advanced as a separate `Cord`. `n_bytes` must be less than or equal to the
number of bytes within the Cord; otherwise, behavior is undefined. It is
valid to pass `char_end()` and `0`.
Defined at line 1606 of file ../../third_party/abseil-cpp/absl/strings/cord.h
void Advance (absl::Nonnull<CharIterator *> it, size_t n_bytes)
Cord::Advance()
Advances the `Cord::CharIterator` by `n_bytes`. `n_bytes` must be less than
or equal to the number of bytes remaining within the Cord; otherwise,
behavior is undefined. It is valid to pass `char_end()` and `0`.
Defined at line 1612 of file ../../third_party/abseil-cpp/absl/strings/cord.h
absl::string_view ChunkRemaining (const CharIterator & it)
Cord::ChunkRemaining()
Returns the longest contiguous view starting at the iterator's position.
`it` must be dereferenceable.
Defined at line 1617 of file ../../third_party/abseil-cpp/absl/strings/cord.h
CharIterator char_begin ()
Cord::char_begin()
Returns an iterator to the first character of the `Cord`.
Generally, prefer using `Cord::Chars()` within a range-based for loop for
iterating over the chunks of a Cord. This method may be useful for getting
a `CharIterator` where range-based for-loops may not be available.
Defined at line 1621 of file ../../third_party/abseil-cpp/absl/strings/cord.h
CharIterator char_end ()
Cord::char_end()
Returns an iterator to one past the last character of the `Cord`.
Generally, prefer using `Cord::Chars()` within a range-based for loop for
iterating over the chunks of a Cord. This method may be useful for getting
a `CharIterator` where range-based for-loops are not useful.
Defined at line 1625 of file ../../third_party/abseil-cpp/absl/strings/cord.h
CharRange Chars ()
Cord::Chars()
Returns a `Cord::CharRange` for iterating over the characters of a `Cord`
with a range-based for-loop. For most character-based iteration tasks on a
Cord, use `Cord::Chars()` to retrieve this iterator.
Example:
void ProcessCord(const Cord
&
cord) {
for (char c : cord.Chars()) { ... }
}
Note that the ordinary caveats of temporary lifetime extension apply:
void Process() {
for (char c : CordFactory().Chars()) {
// The temporary Cord returned by CordFactory has been destroyed!
}
}
Defined at line 1635 of file ../../third_party/abseil-cpp/absl/strings/cord.h
char operator[] (size_t i)
Cord::operator[]
Gets the "i"th character of the Cord and returns it, provided that
0
<
= i
<
Cord.size().
NOTE: This routine is reasonably efficient. It is roughly
logarithmic based on the number of chunks that make up the cord. Still,
if you need to iterate over the contents of a cord, you should
use a CharIterator/ChunkIterator rather than call operator[] or Get()
repeatedly in a loop.
absl::optional<absl::string_view> TryFlat ()
Cord::TryFlat()
If this cord's representation is a single flat array, returns a
string_view referencing that array. Otherwise returns nullopt.
Defined at line 1356 of file ../../third_party/abseil-cpp/absl/strings/cord.h
absl::string_view Flatten ()
Cord::Flatten()
Flattens the cord into a single array and returns a view of the data.
If the cord was already flat, the contents are not modified.
Defined at line 1368 of file ../../third_party/abseil-cpp/absl/strings/cord.h
CharIterator Find (absl::string_view needle)
Cord::Find()
Returns an iterator to the first occurrance of the substring `needle`.
If the substring `needle` does not occur, `Cord::char_end()` is returned.
CharIterator Find (const absl::Cord & needle)
void SetExpectedChecksum (uint32_t crc)
Cord::SetExpectedChecksum()
Stores a checksum value with this non-empty cord instance, for later
retrieval.
The expected checksum is a number stored out-of-band, alongside the data.
It is preserved across copies and assignments, but any mutations to a cord
will cause it to lose its expected checksum.
The expected checksum is not part of a Cord's value, and does not affect
operations such as equality or hashing.
This field is intended to store a CRC32C checksum for later validation, to
help support end-to-end checksum workflows. However, the Cord API itself
does no CRC validation, and assigns no meaning to this number.
This call has no effect if this cord is empty.
absl::optional<uint32_t> ExpectedChecksum ()
Returns this cord's expected checksum, if it has one. Otherwise, returns
nullopt.
template <typename T>
void Cord (strings_internal::StringConstant<T> )
NOLINTNEXTLINE(google-explicit-constructor)
Defined at line 1293 of file ../../third_party/abseil-cpp/absl/strings/cord.h
Records
Friends
class CrcCord
template <typename ResultType, typename RHS>
ResultType Cord (const Cord & lhs, const RHS & rhs, size_t size_to_compare)
absl::Nullable<const CordzInfo *> Cord (const Cord & cord)
bool Cord (const Cord & lhs, absl::string_view rhs)
bool Cord (const Cord & lhs, const Cord & rhs)
class CordTestPeer
template <typename H>
H Cord (H hash_state, const absl::Cord & c)
template <typename Sink>
void Cord (Sink & sink, const absl::Cord & cord)
void Cord (absl::Nonnull<absl::Cord *> cord, absl::string_view part)
void Cord (const Cord & src, absl::Nonnull<std::string *> dst)
void Cord (Cord & x, Cord & y)
template <typename Releaser>
Cord Cord (absl::string_view dataReleaser && releaser)