Export of internal Abseil changes

--
9bd9d083a21d1436816dc842a80d4339aa49a24b by Abseil Team <absl-team@google.com>:

Inline Status::NewRep, pass `message` via string_view in StatusRep ctor

PiperOrigin-RevId: 367641069

--
9cebe53e8f1717f82394501fd9f4bc70d2051b33 by Benjamin Barenblat <bbaren@google.com>:

Fix typo in CordRepRing error message

PiperOrigin-RevId: 367481280
GitOrigin-RevId: 9bd9d083a21d1436816dc842a80d4339aa49a24b
Change-Id: Ie2c51bf6f46abed5c2317ceee30bd2bb59502f8e
pull/946/head
Abseil Team 4 years ago committed by Dino Radaković
parent 3b4a16abad
commit b97a1ecda8
  1. 4
      absl/status/internal/status_internal.h
  2. 22
      absl/status/status.cc
  3. 2
      absl/strings/internal/cord_rep_ring.cc

@ -47,11 +47,11 @@ using Payloads = absl::InlinedVector<Payload, 1>;
// Reference-counted representation of Status data. // Reference-counted representation of Status data.
struct StatusRep { struct StatusRep {
StatusRep(absl::StatusCode code, std::string message, StatusRep(absl::StatusCode code, absl::string_view message,
std::unique_ptr<status_internal::Payloads> payloads) std::unique_ptr<status_internal::Payloads> payloads)
: ref(int32_t{1}), : ref(int32_t{1}),
code(code), code(code),
message(std::move(message)), message(message),
payloads(std::move(payloads)) {} payloads(std::move(payloads)) {}
std::atomic<int32_t> ref; std::atomic<int32_t> ref;

@ -207,19 +207,10 @@ void Status::UnrefNonInlined(uintptr_t rep) {
} }
} }
uintptr_t Status::NewRep(
absl::StatusCode code, absl::string_view msg,
std::unique_ptr<status_internal::Payloads> payloads) {
status_internal::StatusRep* rep = new status_internal::StatusRep(
code, std::string(msg.data(), msg.size()),
std::move(payloads));
return PointerToRep(rep);
}
Status::Status(absl::StatusCode code, absl::string_view msg) Status::Status(absl::StatusCode code, absl::string_view msg)
: rep_(CodeToInlinedRep(code)) { : rep_(CodeToInlinedRep(code)) {
if (code != absl::StatusCode::kOk && !msg.empty()) { if (code != absl::StatusCode::kOk && !msg.empty()) {
rep_ = NewRep(code, msg, nullptr); rep_ = PointerToRep(new status_internal::StatusRep(code, msg, nullptr));
} }
} }
@ -238,9 +229,9 @@ absl::StatusCode Status::code() const {
void Status::PrepareToModify() { void Status::PrepareToModify() {
ABSL_RAW_CHECK(!ok(), "PrepareToModify shouldn't be called on OK status."); ABSL_RAW_CHECK(!ok(), "PrepareToModify shouldn't be called on OK status.");
if (IsInlined(rep_)) { if (IsInlined(rep_)) {
rep_ = rep_ = PointerToRep(new status_internal::StatusRep(
NewRep(static_cast<absl::StatusCode>(raw_code()), absl::string_view(), static_cast<absl::StatusCode>(raw_code()), absl::string_view(),
nullptr); nullptr));
return; return;
} }
@ -251,8 +242,9 @@ void Status::PrepareToModify() {
if (rep->payloads) { if (rep->payloads) {
payloads = absl::make_unique<status_internal::Payloads>(*rep->payloads); payloads = absl::make_unique<status_internal::Payloads>(*rep->payloads);
} }
rep_ = NewRep(rep->code, message(), status_internal::StatusRep* const new_rep = new status_internal::StatusRep(
std::move(payloads)); rep->code, message(), std::move(payloads));
rep_ = PointerToRep(new_rep);
UnrefNonInlined(rep_i); UnrefNonInlined(rep_i);
} }
} }

@ -301,7 +301,7 @@ bool CordRepRing::IsValid(std::ostream& output) const {
if (offset >= child->length || entry_length > child->length - offset) { if (offset >= child->length || entry_length > child->length - offset) {
output << "entry[" << head << "] has offset " << offset output << "entry[" << head << "] has offset " << offset
<< " and entry length " << entry_length << " and entry length " << entry_length
<< " which are outside of the childs length of " << child->length; << " which are outside of the child's length of " << child->length;
return false; return false;
} }

Loading…
Cancel
Save