Line data Source code
1 : #pragma once
2 :
3 : #include <AH/Error/Error.hpp>
4 : #include <AH/STL/type_traits>
5 : #include <Def/Def.hpp>
6 : #include <stdint.h>
7 :
8 : BEGIN_CS_NAMESPACE
9 :
10 : template <setting_t N> // TODO: check bounds here?
11 : class Selectable {
12 : protected:
13 38 : Selectable(setting_t initialSelection = 0)
14 38 : : initialSelection(initialSelection) {}
15 :
16 : public:
17 : virtual void select(setting_t setting) = 0;
18 :
19 96 : static setting_t validateSetting(setting_t setting) {
20 : static_assert(std::is_unsigned<setting_t>::value,
21 : "Error: setting_t should be an unsigned integer type.");
22 96 : if (setting >= N) {
23 1 : ERROR(F("Error: Setting ")
24 : << setting
25 : << F(" is not less than the number of settings (") << N
26 : << ')',
27 : 0xFFFE);
28 : return N - 1;
29 : }
30 95 : return setting;
31 : }
32 :
33 9 : setting_t getInitialSelection() const { return initialSelection; }
34 :
35 : void setInitialSelection(setting_t initialSelection) {
36 : this->initialSelection = validateSetting(initialSelection);
37 : }
38 :
39 : private:
40 : setting_t initialSelection;
41 : };
42 :
43 : END_CS_NAMESPACE
|