summaryrefslogtreecommitdiff
path: root/absl/status
diff options
context:
space:
mode:
authorGravatar Abseil Team <absl-team@google.com>2021-04-09 08:51:11 -0700
committerGravatar Dino Radaković <dinor@google.com>2021-04-13 16:33:48 +0000
commitb97a1ecda869ca8754d467a56c50275cebfeb328 (patch)
treecfb45ecb84e81c1e1fb54937538fccd8ed63401d /absl/status
parent3b4a16abad2c2ddc494371cc39a2946e36d35d11 (diff)
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
Diffstat (limited to 'absl/status')
-rw-r--r--absl/status/internal/status_internal.h4
-rw-r--r--absl/status/status.cc22
2 files changed, 9 insertions, 17 deletions
diff --git a/absl/status/internal/status_internal.h b/absl/status/internal/status_internal.h
index 99a2d964..ccafd702 100644
--- a/absl/status/internal/status_internal.h
+++ b/absl/status/internal/status_internal.h
@@ -47,11 +47,11 @@ using Payloads = absl::InlinedVector<Payload, 1>;
// Reference-counted representation of Status data.
struct StatusRep {
- StatusRep(absl::StatusCode code, std::string message,
+ StatusRep(absl::StatusCode code, absl::string_view message,
std::unique_ptr<status_internal::Payloads> payloads)
: ref(int32_t{1}),
code(code),
- message(std::move(message)),
+ message(message),
payloads(std::move(payloads)) {}
std::atomic<int32_t> ref;
diff --git a/absl/status/status.cc b/absl/status/status.cc
index 51a0d268..5a5cd5c2 100644
--- a/absl/status/status.cc
+++ b/absl/status/status.cc
@@ -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)
: rep_(CodeToInlinedRep(code)) {
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() {
ABSL_RAW_CHECK(!ok(), "PrepareToModify shouldn't be called on OK status.");
if (IsInlined(rep_)) {
- rep_ =
- NewRep(static_cast<absl::StatusCode>(raw_code()), absl::string_view(),
- nullptr);
+ rep_ = PointerToRep(new status_internal::StatusRep(
+ static_cast<absl::StatusCode>(raw_code()), absl::string_view(),
+ nullptr));
return;
}
@@ -251,8 +242,9 @@ void Status::PrepareToModify() {
if (rep->payloads) {
payloads = absl::make_unique<status_internal::Payloads>(*rep->payloads);
}
- rep_ = NewRep(rep->code, message(),
- std::move(payloads));
+ status_internal::StatusRep* const new_rep = new status_internal::StatusRep(
+ rep->code, message(), std::move(payloads));
+ rep_ = PointerToRep(new_rep);
UnrefNonInlined(rep_i);
}
}