roo_prefs
API Documentation for roo_prefs
Loading...
Searching...
No Matches
preferences_store.cpp
Go to the documentation of this file.
2
3namespace roo_prefs {
4
5bool PreferencesStore::begin(const char* collection_name, bool read_only) {
6 return prefs_.begin(collection_name, read_only);
7}
8
9void PreferencesStore::end() { prefs_.end(); }
10
11bool PreferencesStore::isKey(const char* key) { return prefs_.isKey(key); }
12
14 return prefs_.remove(key) ? ClearResult::kOk : ClearResult::kError;
15}
16
17WriteResult PreferencesStore::writeBytes(const char* key, const void* val,
18 size_t len) {
19 return (prefs_.putBytes(key, val, len) > 0) ? WriteResult::kOk
21}
22
23WriteResult PreferencesStore::writeObjectInternal(const char* key,
24 const void* val,
25 size_t size) {
26 return writeBytes(key, val, size);
27}
28
29WriteResult PreferencesStore::writeBool(const char* key, bool val) {
30 return (prefs_.putBool(key, val) > 0) ? WriteResult::kOk
32}
33
34WriteResult PreferencesStore::writeU8(const char* key, uint8_t val) {
35 return (prefs_.putUChar(key, val) > 0) ? WriteResult::kOk
37}
38
39WriteResult PreferencesStore::writeI8(const char* key, int8_t val) {
40 return (prefs_.putChar(key, val) > 0) ? WriteResult::kOk
42}
43
44WriteResult PreferencesStore::writeU16(const char* key, uint16_t val) {
45 return (prefs_.putUShort(key, val) > 0) ? WriteResult::kOk
47}
48
49WriteResult PreferencesStore::writeI16(const char* key, int16_t val) {
50 return (prefs_.putShort(key, val) > 0) ? WriteResult::kOk
52}
53
54WriteResult PreferencesStore::writeU32(const char* key, uint32_t val) {
55 return (prefs_.putULong(key, val) > 0) ? WriteResult::kOk
57}
58
59WriteResult PreferencesStore::writeI32(const char* key, int32_t val) {
60 return (prefs_.putLong(key, val) > 0) ? WriteResult::kOk
62}
63
64WriteResult PreferencesStore::writeU64(const char* key, uint64_t val) {
65 return (prefs_.putULong64(key, val) > 0) ? WriteResult::kOk
67}
68
69WriteResult PreferencesStore::writeI64(const char* key, int64_t val) {
70 return (prefs_.putLong64(key, val) > 0) ? WriteResult::kOk
72}
73
74WriteResult PreferencesStore::writeFloat(const char* key, float val) {
75 return (prefs_.putFloat(key, val) > 0) ? WriteResult::kOk
77}
78
79WriteResult PreferencesStore::writeDouble(const char* key, double val) {
80 return (prefs_.putDouble(key, val) > 0) ? WriteResult::kOk
82}
83
85 roo::string_view val) {
86 return (prefs_.putBytes(key, val.data(), val.size()) > 0)
89}
90
91ReadResult PreferencesStore::readObjectInternal(const char* key, void* val,
92 size_t size) {
93 PreferenceType type = prefs_.getType(key);
94 if (type == PT_INVALID) return ReadResult::kNotFound;
95 if (type != PT_BLOB) return ReadResult::kWrongType;
96 if (prefs_.getBytesLength(key) != size) {
98 }
99 if (prefs_.getBytes(key, val, size) != size) {
100 return ReadResult::kError;
101 }
102 return ReadResult::kOk;
103}
104
105ReadResult PreferencesStore::readBool(const char* key, bool& val) {
106 PreferenceType type = prefs_.getType(key);
107 if (type == PT_INVALID) return ReadResult::kNotFound;
108 if (type != PT_U8) return ReadResult::kWrongType;
109 bool v1 = prefs_.getBool(key, false);
110 bool v2 = prefs_.getBool(key, true);
111 if (v1 != v2) {
112 return ReadResult::kError;
113 }
114 val = v1;
115 return ReadResult::kOk;
116}
117
118ReadResult PreferencesStore::readU8(const char* key, uint8_t& val) {
119 PreferenceType type = prefs_.getType(key);
120 if (type == PT_INVALID) return ReadResult::kNotFound;
121 if (type != PT_U8) return ReadResult::kWrongType;
122 constexpr uint8_t magic = 0xDF;
123 uint8_t result = prefs_.getUChar(key, magic);
124 if (result == magic) {
125 constexpr uint8_t magic2 = 0x12;
126 if (prefs_.getUChar(key, magic2) != result) return ReadResult::kError;
127 }
128 val = result;
129 return ReadResult::kOk;
130}
131
132ReadResult PreferencesStore::readI8(const char* key, int8_t& val) {
133 PreferenceType type = prefs_.getType(key);
134 if (type == PT_INVALID) return ReadResult::kNotFound;
135 if (type != PT_I8) return ReadResult::kWrongType;
136 constexpr int8_t magic = 0xDF;
137 int8_t result = prefs_.getChar(key, magic);
138 if (result == magic) {
139 constexpr int8_t magic2 = 0x12;
140 if (prefs_.getChar(key, magic2) != result) return ReadResult::kError;
141 }
142 val = result;
143 return ReadResult::kOk;
144}
145
146ReadResult PreferencesStore::readU16(const char* key, uint16_t& val) {
147 PreferenceType type = prefs_.getType(key);
148 if (type == PT_INVALID) return ReadResult::kNotFound;
149 if (type != PT_U16) return ReadResult::kWrongType;
150 constexpr uint16_t magic = 0xDFB1;
151 uint16_t result = prefs_.getUShort(key, magic);
152 if (result == magic) {
153 constexpr uint16_t magic2 = 0x1223;
154 if (prefs_.getUShort(key, magic2) != result) return ReadResult::kError;
155 }
156 val = result;
157 return ReadResult::kOk;
158}
159
160ReadResult PreferencesStore::readI16(const char* key, int16_t& val) {
161 PreferenceType type = prefs_.getType(key);
162 if (type == PT_INVALID) return ReadResult::kNotFound;
163 if (type != PT_I16) return ReadResult::kWrongType;
164 constexpr int16_t magic = 0xDFB1;
165 int16_t result = prefs_.getShort(key, magic);
166 if (result == magic) {
167 constexpr int16_t magic2 = 0x1223;
168 if (prefs_.getShort(key, magic2) != result) return ReadResult::kError;
169 }
170 val = result;
171 return ReadResult::kOk;
172}
173
174ReadResult PreferencesStore::readU32(const char* key, uint32_t& val) {
175 PreferenceType type = prefs_.getType(key);
176 if (type == PT_INVALID) return ReadResult::kNotFound;
177 if (type != PT_U32) return ReadResult::kWrongType;
178 constexpr uint32_t magic = 0xDFB1BEEF;
179 uint32_t result = prefs_.getULong(key, magic);
180 if (result == magic) {
181 constexpr uint32_t magic2 = 0x12345678;
182 if (prefs_.getULong(key, magic2) != result) return ReadResult::kError;
183 }
184 val = result;
185 return ReadResult::kOk;
186}
187
188ReadResult PreferencesStore::readI32(const char* key, int32_t& val) {
189 PreferenceType type = prefs_.getType(key);
190 if (type == PT_INVALID) return ReadResult::kNotFound;
191 if (type != PT_I32) return ReadResult::kWrongType;
192 constexpr int32_t magic = 0xDFB1BEEF;
193 int32_t result = prefs_.getLong(key, magic);
194 if (result == magic) {
195 constexpr int32_t magic2 = 0x12345678;
196 if (prefs_.getLong(key, magic2) != result) return ReadResult::kError;
197 }
198 val = result;
199 return ReadResult::kOk;
200}
201
202ReadResult PreferencesStore::readU64(const char* key, uint64_t& val) {
203 PreferenceType type = prefs_.getType(key);
204 if (type == PT_INVALID) return ReadResult::kNotFound;
205 if (type != PT_U64) return ReadResult::kWrongType;
206 constexpr uint64_t magic = 0x3E3E1254DFB1BEEFLL;
207 uint64_t result = prefs_.getULong64(key, magic);
208 if (result == magic) {
209 constexpr uint64_t magic2 = 0x1234567812345678LL;
210 if (prefs_.getULong64(key, magic2) != result) return ReadResult::kError;
211 }
212 val = result;
213 return ReadResult::kOk;
214}
215
216ReadResult PreferencesStore::readI64(const char* key, int64_t& val) {
217 PreferenceType type = prefs_.getType(key);
218 if (type == PT_INVALID) return ReadResult::kNotFound;
219 if (type != PT_I64) return ReadResult::kWrongType;
220 constexpr int64_t magic = 0x3E3E1254DFB1BEEF;
221 int64_t result = prefs_.getLong64(key, magic);
222 if (result == magic) {
223 constexpr int64_t magic2 = 0x1234567812345678LL;
224 if (prefs_.getLong64(key, magic2) != result) return ReadResult::kError;
225 }
226 val = result;
227 return ReadResult::kOk;
228}
229
230ReadResult PreferencesStore::readFloat(const char* key, float& val) {
231 PreferenceType type = prefs_.getType(key);
232 if (type == PT_INVALID) return ReadResult::kNotFound;
233 if (type != PT_BLOB) return ReadResult::kWrongType;
234 constexpr float magic = -0.123456;
235 float result = prefs_.getFloat(key, magic);
236 if (result == magic) {
237 constexpr float magic2 = 1.54e10;
238 if (prefs_.getFloat(key, magic2) != result) return ReadResult::kError;
239 }
240 val = result;
241 return ReadResult::kOk;
242}
243
244ReadResult PreferencesStore::readDouble(const char* key, double& val) {
245 PreferenceType type = prefs_.getType(key);
246 if (type == PT_INVALID) return ReadResult::kNotFound;
247 if (type != PT_BLOB) return ReadResult::kWrongType;
248 constexpr double magic = -0.123456;
249 double result = prefs_.getDouble(key, magic);
250 if (result == magic) {
251 constexpr double magic2 = 1.54e10;
252 if (prefs_.getDouble(key, magic2) != result) return ReadResult::kError;
253 }
254 val = result;
255 return ReadResult::kOk;
256}
257
258ReadResult PreferencesStore::readString(const char* key, std::string& val) {
259 PreferenceType type = prefs_.getType(key);
260 if (type == PT_INVALID) return ReadResult::kNotFound;
261 if (type != PT_BLOB) return ReadResult::kWrongType;
262 size_t size = prefs_.getBytesLength(key);
263 if (size == 0) {
264 val.clear();
265 return ReadResult::kOk;
266 }
267 auto buf = std::unique_ptr<char[]>(new char[size]);
268 if (prefs_.getBytes(key, &buf[0], size) == size) {
269 val = std::string(&buf[0], size);
270 return ReadResult::kOk;
271 }
272 return ReadResult::kError;
273}
274
275ReadResult PreferencesStore::readBytes(const char* key, void* val,
276 size_t max_len, size_t* out_len) {
277 PreferenceType type = prefs_.getType(key);
278 if (type == PT_INVALID) return ReadResult::kNotFound;
279 if (type != PT_BLOB) return ReadResult::kWrongType;
280 size_t size = prefs_.getBytesLength(key);
281 if (out_len != nullptr) *out_len = size;
282 if (size == 0) return ReadResult::kOk;
283 if (size > max_len) return ReadResult::kError;
284 if (prefs_.getBytes(key, val, size) == size) {
285 return ReadResult::kOk;
286 }
287 return ReadResult::kError;
288}
289
290ReadResult PreferencesStore::readBytesLength(const char* key, size_t* out_len) {
291 PreferenceType type = prefs_.getType(key);
292 if (type == PT_INVALID) return ReadResult::kNotFound;
293 if (type != PT_BLOB) return ReadResult::kWrongType;
294 size_t size = prefs_.getBytesLength(key);
295 if (size == 0) return ReadResult::kError;
296 if (out_len != nullptr) *out_len = size;
297 return ReadResult::kOk;
298}
299
300} // namespace roo_prefs
WriteResult writeU8(const char *key, uint8_t val)
ReadResult readBytesLength(const char *key, size_t *out_len)
WriteResult writeBool(const char *key, bool val)
WriteResult writeI8(const char *key, int8_t val)
ReadResult readDouble(const char *key, double &val)
WriteResult writeFloat(const char *key, float val)
ReadResult readI32(const char *key, int32_t &val)
WriteResult writeI32(const char *key, int32_t val)
ReadResult readU8(const char *key, uint8_t &val)
WriteResult writeI16(const char *key, int16_t val)
ReadResult readI8(const char *key, int8_t &val)
WriteResult writeU32(const char *key, uint32_t val)
WriteResult writeString(const char *key, roo::string_view val)
WriteResult writeBytes(const char *key, const void *val, size_t len)
ReadResult readI16(const char *key, int16_t &val)
ReadResult readBool(const char *key, bool &val)
ReadResult readU64(const char *key, uint64_t &val)
WriteResult writeDouble(const char *key, double val)
ReadResult readU32(const char *key, uint32_t &val)
ReadResult readI64(const char *key, int64_t &val)
ClearResult clear(const char *key)
ReadResult readFloat(const char *key, float &val)
WriteResult writeU64(const char *key, uint64_t val)
ReadResult readBytes(const char *key, void *val, size_t max_len, size_t *out_len)
ReadResult readU16(const char *key, uint16_t &val)
ReadResult readString(const char *key, std::string &val)
WriteResult writeI64(const char *key, int64_t val)
WriteResult writeU16(const char *key, uint16_t val)
Similar to Pref<T>, but does not immediately store written data in persistent storage....
Definition collection.h:6
ReadResult
Result of reading a value from storage.
Definition status.h:8
ClearResult
Result of clearing a value from storage.
Definition status.h:14
WriteResult
Result of writing a value to storage.
Definition status.h:11