19#include "pw_status/status.h"
60 static constexpr StatusWithSize DeadlineExceeded(
size_t size = 0) {
69 static constexpr StatusWithSize PermissionDenied(
size_t size = 0) {
75 static constexpr StatusWithSize ResourceExhausted(
size_t size = 0) {
78 static constexpr StatusWithSize FailedPrecondition(
size_t size = 0) {
106 template <typename T, typename = std::enable_if_t<std::is_integral<T>::value>>
113 :
StatusWithSize((static_cast<size_t>(status.code()) << kStatusShift) |
129 new_status = new_status_with_size.status();
131 new_status = status();
133 size_t new_size = size() + new_status_with_size.
size();
146 [[nodiscard]]
constexpr size_t size()
const {
return size_ & kSizeMask; }
149 [[nodiscard]]
static constexpr size_t max_size() {
return kSizeMask; }
152 [[nodiscard]]
constexpr bool ok()
const {
153 return (size_ & kStatusMask) == 0u;
161 [[nodiscard]]
constexpr Status status()
const {
162 return static_cast<Status::Code
>((size_ & kStatusMask) >> kStatusShift);
166 [[nodiscard]]
constexpr bool IsCancelled()
const {
167 return status().IsCancelled();
169 [[nodiscard]]
constexpr bool IsUnknown()
const {
170 return status().IsUnknown();
172 [[nodiscard]]
constexpr bool IsInvalidArgument()
const {
173 return status().IsInvalidArgument();
175 [[nodiscard]]
constexpr bool IsDeadlineExceeded()
const {
176 return status().IsDeadlineExceeded();
178 [[nodiscard]]
constexpr bool IsNotFound()
const {
179 return status().IsNotFound();
181 [[nodiscard]]
constexpr bool IsAlreadyExists()
const {
182 return status().IsAlreadyExists();
184 [[nodiscard]]
constexpr bool IsPermissionDenied()
const {
185 return status().IsPermissionDenied();
187 [[nodiscard]]
constexpr bool IsResourceExhausted()
const {
188 return status().IsResourceExhausted();
190 [[nodiscard]]
constexpr bool IsFailedPrecondition()
const {
191 return status().IsFailedPrecondition();
193 [[nodiscard]]
constexpr bool IsAborted()
const {
194 return status().IsAborted();
196 [[nodiscard]]
constexpr bool IsOutOfRange()
const {
197 return status().IsOutOfRange();
199 [[nodiscard]]
constexpr bool IsUnimplemented()
const {
200 return status().IsUnimplemented();
202 [[nodiscard]]
constexpr bool IsInternal()
const {
203 return status().IsInternal();
205 [[nodiscard]]
constexpr bool IsUnavailable()
const {
206 return status().IsUnavailable();
208 [[nodiscard]]
constexpr bool IsDataLoss()
const {
209 return status().IsDataLoss();
211 [[nodiscard]]
constexpr bool IsUnauthenticated()
const {
212 return status().IsUnauthenticated();
216 static constexpr size_t kStatusBits = 5;
217 static constexpr size_t kSizeMask = ~static_cast<size_t>(0) >> kStatusBits;
218 static constexpr size_t kStatusMask = ~kSizeMask;
219 static constexpr size_t kStatusShift =
sizeof(size_t) * 8 - kStatusBits;
226constexpr Status ConvertToStatus(StatusWithSize status_with_size) {
227 return status_with_size.status();
230constexpr size_t ConvertToValue(StatusWithSize status_with_size) {
231 return status_with_size.size();
234constexpr StatusWithSize ConvertToStatusWithSize(Status status) {
235 return StatusWithSize(status, 0);
238constexpr StatusWithSize ConvertToStatusWithSize(
239 StatusWithSize status_with_size) {
240 return status_with_size;
Definition: status_with_size.h:49
constexpr void IgnoreError() const
Definition: status_with_size.h:159
constexpr StatusWithSize(Status status, size_t size)
Creates a StatusWithSize with the provided status and size.
Definition: status_with_size.h:112
static constexpr size_t max_size()
The maximum valid value for size.
Definition: status_with_size.h:149
constexpr void UpdateAndAdd(StatusWithSize new_status_with_size)
Definition: status_with_size.h:126
constexpr void ZeroIfNotOk()
Zeroes the size if the status is not OK.
Definition: status_with_size.h:138
constexpr StatusWithSize()
Creates a StatusWithSize with status OK and a size of 0.
Definition: status_with_size.h:101
constexpr StatusWithSize(T size)
Definition: status_with_size.h:107
constexpr bool ok() const
True if status() == OkStatus().
Definition: status_with_size.h:152
constexpr size_t size() const
Definition: status_with_size.h:146
Provides basic helpers for reading and writing UTF-8 encoded strings.
Definition: alignment.h:27