21#include "pw_bytes/span.h"
22#include "pw_checksum/crc16_ccitt.h"
23#include "pw_preprocessor/compiler.h"
24#include "pw_span/span.h"
25#include "pw_status/status.h"
26#include "pw_stream/stream.h"
46 volatile size_t& size,
47 volatile uint16_t& checksum)
48 : buffer_(buffer), size_(size), checksum_(checksum) {}
54 if (limit == LimitType::kWrite) {
55 return buffer_.size_bytes() - size_;
61 volatile size_t& size_;
62 volatile uint16_t& checksum_;
92template <
size_t kMaxSizeBytes>
122 ByteSpan(
const_cast<std::byte*
>(buffer_), kMaxSizeBytes),
127 size_t size()
const {
134 const std::byte* data()
const {
return const_cast<std::byte*
>(buffer_); }
138 checksum_ = checksum::Crc16Ccitt::kInitialValue;
141 bool has_value()
const {
142 if (size_ > kMaxSizeBytes || size_ == 0) {
147 return checksum_ == checksum::Crc16Ccitt::Calculate(
ConstByteSpan(
148 const_cast<std::byte*
>(buffer_), size_));
153 volatile uint16_t checksum_;
154 volatile size_t size_;
155 volatile std::byte buffer_[kMaxSizeBytes];
Definition: persistent_buffer.h:93
Definition: persistent_buffer.h:37
size_t ConservativeLimit(LimitType limit) const override
Definition: persistent_buffer.h:53
Status DoWrite(ConstByteSpan data) override
Virtual Write() function implemented by derived classes.
#define PW_MODIFY_DIAGNOSTICS_POP()
Definition: compiler.h:194
#define PW_MODIFY_DIAGNOSTIC(kind, option)
Definition: compiler.h:203
#define PW_MODIFY_DIAGNOSTIC_GCC(kind, option)
Definition: compiler.h:211
#define PW_MODIFY_DIAGNOSTICS_PUSH()
Definition: compiler.h:189
Persistent RAM utilities and containers.
Definition: persistent.h:28