19#include "pw_status/status.h"
62 static constexpr StatusWithSize DeadlineExceeded(
size_t size = 0) {
71 static constexpr StatusWithSize PermissionDenied(
size_t size = 0) {
77 static constexpr StatusWithSize ResourceExhausted(
size_t size = 0) {
80 static constexpr StatusWithSize FailedPrecondition(
size_t size = 0) {
108 template <typename T, typename = std::enable_if_t<std::is_integral<T>::value>>
115 :
StatusWithSize((static_cast<size_t>(status.code()) << kStatusShift) |
131 new_status = new_status_with_size.status();
133 new_status = status();
135 size_t new_size = size() + new_status_with_size.
size();
148 [[nodiscard]]
constexpr size_t size()
const {
return size_ & kSizeMask; }
151 [[nodiscard]]
static constexpr size_t max_size() {
return kSizeMask; }
154 [[nodiscard]]
constexpr bool ok()
const {
155 return (size_ & kStatusMask) == 0u;
163 [[nodiscard]]
constexpr Status status()
const {
164 return static_cast<Status::Code>((size_ & kStatusMask) >> kStatusShift);
168 [[nodiscard]]
constexpr bool IsCancelled()
const {
171 [[nodiscard]]
constexpr bool IsUnknown()
const {
172 return status().IsUnknown();
174 [[nodiscard]]
constexpr bool IsInvalidArgument()
const {
175 return status().IsInvalidArgument();
177 [[nodiscard]]
constexpr bool IsDeadlineExceeded()
const {
178 return status().IsDeadlineExceeded();
180 [[nodiscard]]
constexpr bool IsNotFound()
const {
181 return status().IsNotFound();
183 [[nodiscard]]
constexpr bool IsAlreadyExists()
const {
184 return status().IsAlreadyExists();
186 [[nodiscard]]
constexpr bool IsPermissionDenied()
const {
187 return status().IsPermissionDenied();
189 [[nodiscard]]
constexpr bool IsResourceExhausted()
const {
190 return status().IsResourceExhausted();
192 [[nodiscard]]
constexpr bool IsFailedPrecondition()
const {
193 return status().IsFailedPrecondition();
195 [[nodiscard]]
constexpr bool IsAborted()
const {
196 return status().IsAborted();
198 [[nodiscard]]
constexpr bool IsOutOfRange()
const {
199 return status().IsOutOfRange();
201 [[nodiscard]]
constexpr bool IsUnimplemented()
const {
202 return status().IsUnimplemented();
204 [[nodiscard]]
constexpr bool IsInternal()
const {
205 return status().IsInternal();
207 [[nodiscard]]
constexpr bool IsUnavailable()
const {
208 return status().IsUnavailable();
210 [[nodiscard]]
constexpr bool IsDataLoss()
const {
211 return status().IsDataLoss();
213 [[nodiscard]]
constexpr bool IsUnauthenticated()
const {
214 return status().IsUnauthenticated();
218 static constexpr size_t kStatusBits = 5;
219 static constexpr size_t kSizeMask = ~static_cast<size_t>(0) >> kStatusBits;
220 static constexpr size_t kStatusMask = ~kSizeMask;
221 static constexpr size_t kStatusShift =
sizeof(size_t) * 8 - kStatusBits;
230constexpr Status ConvertToStatus(StatusWithSize status_with_size) {
231 return status_with_size.status();
234constexpr size_t ConvertToValue(StatusWithSize status_with_size) {
235 return status_with_size.size();
238constexpr StatusWithSize ConvertToStatusWithSize(Status status) {
239 return StatusWithSize(status, 0);
242constexpr StatusWithSize ConvertToStatusWithSize(
243 StatusWithSize status_with_size) {
244 return status_with_size;
constexpr bool IsCancelled() const
Definition: status.h:349
Definition: status_with_size.h:51
constexpr void IgnoreError() const
Definition: status_with_size.h:161
constexpr StatusWithSize(Status status, size_t size)
Creates a StatusWithSize with the provided status and size.
Definition: status_with_size.h:114
static constexpr size_t max_size()
The maximum valid value for size.
Definition: status_with_size.h:151
constexpr void UpdateAndAdd(StatusWithSize new_status_with_size)
Definition: status_with_size.h:128
constexpr void ZeroIfNotOk()
Zeroes the size if the status is not OK.
Definition: status_with_size.h:140
constexpr StatusWithSize()
Creates a StatusWithSize with status OK and a size of 0.
Definition: status_with_size.h:103
constexpr StatusWithSize(T size)
Definition: status_with_size.h:109
constexpr bool ok() const
True if status() == OkStatus().
Definition: status_with_size.h:154
constexpr size_t size() const
Definition: status_with_size.h:148
pw_Status
C API for status codes. In C++, use the pw::Status class instead.
Definition: status.h:40
The Pigweed namespace.
Definition: alignment.h:27