Enhance NVSStorageHandler with filtering capabilities and update constructor to accept namespace

This commit is contained in:
GW_MC
2026-01-19 12:55:12 +08:00
parent 01c36669cf
commit 18ac21e257
4 changed files with 164 additions and 12 deletions

View File

@@ -5,17 +5,61 @@
class NVSStorageHandler : public KVStorageHandler {
public:
NVSStorageHandler() = default;
NVSStorageHandler(
const char* name_space
);
~NVSStorageHandler() override;
void init(const EventGroupHandle_t& system_event_group) override;
void put(const char*& key, const char*& value) override;
void put(const char* const& key, const char* const& value) override;
char* get(const char*& key) const override;
char* get(const char* const& key) const override;
esp_err_t process_all(KeyValueProcessor processor, void* arg) const override;
esp_err_t process_filtered(const char* const& key_prefix, KeyValueProcessor processor, void* arg) const override;
esp_err_t process_filtered(FilterFunc filter_func, KeyValueProcessor processor, void* arg) const override;
void remove(const char*& key) override;
void remove(const char* const& key) override;
private:
NVSIteratorGuard create_iterator() const;
nvs_handle_t nvsHandle = 0;
const char* name_space;
};
struct NVSIteratorGuard {
public:
~NVSIteratorGuard() {
if (iterator) {
nvs_release_iterator(iterator);
}
}
const nvs_iterator_t const& get_iterator() const {
return iterator;
}
void advance_iter() {
if (iterator) {
// advance the iterator and update the internal state
esp_err_t err = nvs_entry_next(&iterator);
if (err != ESP_OK) {
error = err;
iterator = nullptr;
}
}
}
esp_err_t get_error() const {
return error;
}
bool is_valid() const {
return iterator != nullptr && error == ESP_OK;
}
friend class NVSStorageHandler;
private:
NVSIteratorGuard(nvs_iterator_t it
, esp_err_t err
) : iterator(it), error(err) { }
nvs_iterator_t iterator;
esp_err_t error;
};