diff options
author | Martijn Vels <mvels@google.com> | 2022-09-29 18:24:05 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2022-09-29 18:24:54 -0700 |
commit | 516c6266926723ba63affe5157c9d76a043f5665 (patch) | |
tree | f00fd8ec53abe2f15c502a97d6b9040a57a5481b | |
parent | 92bc0b6b68cd138aefeb94d566499f5bf14f859f (diff) |
Cleanup: implement PrependArray and PrependPrecise in terms of InlineData
This removes layout specific details from InlineData from cord.cc, making future platform specific internal layout changes easier to land.
PiperOrigin-RevId: 477870559
Change-Id: I26e428ef280d593ad321cf7875e05adcb1cb6438
-rw-r--r-- | absl/strings/cord.cc | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/absl/strings/cord.cc b/absl/strings/cord.cc index 523379e4..66f45fef 100644 --- a/absl/strings/cord.cc +++ b/absl/strings/cord.cc @@ -610,11 +610,11 @@ void Cord::PrependArray(absl::string_view src, MethodIdentifier method) { size_t cur_size = contents_.inline_size(); if (cur_size + src.size() <= InlineRep::kMaxInline) { // Use embedded storage. - char data[InlineRep::kMaxInline + 1] = {0}; - memcpy(data, src.data(), src.size()); - memcpy(data + src.size(), contents_.data(), cur_size); - memcpy(contents_.data_.as_chars(), data, InlineRep::kMaxInline + 1); - contents_.set_inline_size(cur_size + src.size()); + InlineData data; + memcpy(data.as_chars(), src.data(), src.size()); + memcpy(data.as_chars() + src.size(), contents_.data(), cur_size); + data.set_inline_size(cur_size + src.size()); + contents_.data_ = data; return; } } @@ -638,12 +638,12 @@ void Cord::PrependPrecise(absl::string_view src, MethodIdentifier method) { assert(!src.empty()); assert(src.size() <= cord_internal::kMaxFlatLength); if (contents_.remaining_inline_capacity() >= src.size()) { - const size_t inline_length = contents_.inline_size(); - char data[InlineRep::kMaxInline + 1] = {0}; - memcpy(data, src.data(), src.size()); - memcpy(data + src.size(), contents_.data(), inline_length); - memcpy(contents_.data_.as_chars(), data, InlineRep::kMaxInline + 1); - contents_.set_inline_size(inline_length + src.size()); + const size_t cur_size = contents_.inline_size(); + InlineData data; + memcpy(data.as_chars(), src.data(), src.size()); + memcpy(data.as_chars() + src.size(), contents_.data(), cur_size); + data.set_inline_size(cur_size + src.size()); + contents_.data_ = data; } else { contents_.PrependTree(CordRepFlat::Create(src), method); } |