Skip to content

Commit 633122c

Browse files
Defining KVStore interface
1 parent eed9683 commit 633122c

File tree

2 files changed

+717
-0
lines changed

2 files changed

+717
-0
lines changed

src/kvstore/kvstore.cpp

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
/*
2+
* This file is part of Arduino_KVStore.
3+
*
4+
* Copyright (c) 2024 Arduino SA
5+
*
6+
* This Source Code Form is subject to the terms of the Mozilla Public
7+
* License, v. 2.0. If a copy of the MPL was not distributed with this
8+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
9+
*/
10+
#include "kvstore.h"
11+
12+
template<typename T>
13+
typename KVStoreInterface::res_t KVStoreInterface::put(const key_t& key, T value) {
14+
return _put(key, (uint8_t*)&value, sizeof(value), getType(value));
15+
}
16+
17+
template<>
18+
typename KVStoreInterface::res_t KVStoreInterface::put<const char*>(const key_t& key, const char* value) {
19+
return _put(key, (uint8_t*)value, strlen(value), PT_STR);
20+
}
21+
22+
#ifdef ARDUINO
23+
template<>
24+
typename KVStoreInterface::res_t KVStoreInterface::put<String>(const key_t& key, String value) {
25+
return _put(key, (uint8_t*)value.c_str(), value.length(), PT_STR);
26+
}
27+
#endif // ARDUINO
28+
29+
template<typename T> // TODO this could be called when class is const
30+
KVStoreInterface::reference<T> KVStoreInterface::get(const key_t& key, const T def) {
31+
if(exists(key)) {
32+
T t;
33+
auto res = _get(key, (uint8_t*)&t, sizeof(t), getType(t));
34+
35+
if(res > 0) {
36+
return KVStoreInterface::reference<T>(key, t, *this);
37+
}
38+
}
39+
40+
return KVStoreInterface::reference<T>(key, def, *this);
41+
}
42+
43+
size_t KVStoreInterface::putChar(const key_t& key, const int8_t value) { return put(key, value); }
44+
size_t KVStoreInterface::putUChar(const key_t& key, const uint8_t value) { return put(key, value); }
45+
size_t KVStoreInterface::putShort(const key_t& key, const int16_t value) { return put(key, value); }
46+
size_t KVStoreInterface::putUShort(const key_t& key, const uint16_t value) { return put(key, value); }
47+
size_t KVStoreInterface::putInt(const key_t& key, const int32_t value) { return put(key, value); }
48+
size_t KVStoreInterface::putUInt(const key_t& key, const uint32_t value) { return put(key, value); }
49+
size_t KVStoreInterface::putLong(const key_t& key, const int32_t value) { return put(key, value); }
50+
size_t KVStoreInterface::putULong(const key_t& key, const uint32_t value) { return put(key, value); }
51+
size_t KVStoreInterface::putLong64(const key_t& key, const int64_t value) { return put(key, value); }
52+
size_t KVStoreInterface::putULong64(const key_t& key, const uint64_t value) { return put(key, value); }
53+
size_t KVStoreInterface::putFloat(const key_t& key, const float value) { return put(key, value); }
54+
size_t KVStoreInterface::putDouble(const key_t& key, const double value) { return put(key, value); }
55+
size_t KVStoreInterface::putBool(const key_t& key, const bool value) { return put(key, value); }
56+
size_t KVStoreInterface::putString(const key_t& key, const char * const value) { return put(key, value); }
57+
58+
#ifdef ARDUINO
59+
size_t KVStoreInterface::putString(const key_t& key, const String value) { return put(key, value); }
60+
#endif // ARDUINO
61+
62+
63+
int8_t KVStoreInterface::getChar(const key_t& key, const int8_t defaultValue) { return get(key, defaultValue); }
64+
uint8_t KVStoreInterface::getUChar(const key_t& key, const uint8_t defaultValue) { return get(key, defaultValue); }
65+
int16_t KVStoreInterface::getShort(const key_t& key, const int16_t defaultValue) { return get(key, defaultValue); }
66+
uint16_t KVStoreInterface::getUShort(const key_t& key, const uint16_t defaultValue) { return get(key, defaultValue); }
67+
int32_t KVStoreInterface::getInt(const key_t& key, const int32_t defaultValue) { return get(key, defaultValue); }
68+
uint32_t KVStoreInterface::getUInt(const key_t& key, const uint32_t defaultValue) { return get(key, defaultValue); }
69+
int32_t KVStoreInterface::getLong(const key_t& key, const int32_t defaultValue) { return get(key, defaultValue); }
70+
uint32_t KVStoreInterface::getULong(const key_t& key, const uint32_t defaultValue) { return get(key, defaultValue); }
71+
int64_t KVStoreInterface::getLong64(const key_t& key, const int64_t defaultValue) { return get(key, defaultValue); }
72+
uint64_t KVStoreInterface::getULong64(const key_t& key, const uint64_t defaultValue) { return get(key, defaultValue); }
73+
float KVStoreInterface::getFloat(const key_t& key, const float defaultValue) { return get(key, defaultValue); }
74+
double KVStoreInterface::getDouble(const key_t& key, const double defaultValue) { return get(key, defaultValue); }
75+
bool KVStoreInterface::getBool(const key_t& key, const bool defaultValue) { return get(key, defaultValue); }
76+
size_t KVStoreInterface::getString(const key_t& key, char* value, size_t maxLen) { return _get(key, (uint8_t*)value, maxLen, PT_STR); }
77+
78+
#ifdef ARDUINO
79+
String KVStoreInterface::getString(const key_t& key, const String defaultValue) {
80+
size_t len = getBytesLength(key);
81+
char *str = new char[len+1];
82+
83+
getString(key, str, len+1);
84+
str[len] = '\0';
85+
86+
String res(str);
87+
delete str;
88+
str = nullptr;
89+
90+
return res;
91+
}
92+
#endif // ARDUINO
93+
94+
typename KVStoreInterface::res_t KVStoreInterface::_put(const key_t& key, const uint8_t value[], size_t len, Type t) {
95+
(void) t;
96+
97+
return putBytes(key, value, len);
98+
}
99+
100+
typename KVStoreInterface::res_t KVStoreInterface::_get(const key_t& key, uint8_t value[], size_t len, Type t) {
101+
(void) t;
102+
103+
if(exists(key)) {
104+
res_t res=0;
105+
if(t == PT_STR) {
106+
res = getBytes(key, value, len-1);
107+
value[res] = '\0';
108+
} else {
109+
res = getBytes(key, value, len);
110+
}
111+
112+
return res;
113+
} else {
114+
return 0;
115+
}
116+
}

0 commit comments

Comments
 (0)