Select one of the symbols to view example projects that use it.
 
Outline
#define compressed_enum_table_h
#include <cstdint>
#include <cassert>
#include <type_traits>
#include "nvs_internal.h"
#include "esp_err.h"
CompressedEnumTable
Files
loading...
SourceVuESP-IDF Framework and ExamplesESP-IDFcomponents/nvs_flash/src/compressed_enum_table.hpp
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 *//* ... */ #ifndef compressed_enum_table_h #define compressed_enum_table_h #include <cstdint> #include <cassert> #include <type_traits> #include "nvs_internal.h" #include "esp_err.h"5 includes template<typename Tenum, size_t Nbits, size_t Nitems> class CompressedEnumTable { public: uint32_t* data() { return mData; }{...} const uint32_t* data() const { return mData; }{...} esp_err_t get(size_t index, Tenum *retval) const { NVS_ASSERT_OR_RETURN(index < Nitems, ESP_FAIL); size_t wordIndex = index / ITEMS_PER_WORD; size_t offset = (index % ITEMS_PER_WORD) * Nbits; *retval = static_cast<Tenum>((mData[wordIndex] >> offset) & VALUE_MASK); return ESP_OK; }{...} esp_err_t set(size_t index, Tenum val) { NVS_ASSERT_OR_RETURN(index < Nitems, ESP_FAIL); size_t wordIndex = index / ITEMS_PER_WORD; size_t offset = (index % ITEMS_PER_WORD) * Nbits; uint32_t v = static_cast<uint32_t>(val) << offset; mData[wordIndex] = (mData[wordIndex] & ~(VALUE_MASK << offset)) | v; return ESP_OK; }{...} static constexpr size_t getWordIndex(size_t index) { return index / ITEMS_PER_WORD; }{ ... } static constexpr size_t byteSize() { return WORD_COUNT * 4; }{ ... } static constexpr size_t count() { return Nitems; }{ ... } ... protected: static_assert(32 % Nbits == 0, "Nbits must divide 32"); static const size_t ITEMS_PER_WORD = 32 / Nbits; static const size_t WORD_COUNT = ( Nbits * Nitems + 31 ) / 32; static const uint32_t VALUE_MASK = (1 << Nbits) - 1; uint32_t mData[WORD_COUNT];... }{ ... }; /* ... */ #endif /* compressed_enum_table_h */
Details