Control Surface  1.1.1
MIDI Control Surface library for Arduino
Selectable.hpp
Go to the documentation of this file.
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 
9 
10 template <setting_t N> // TODO: check bounds here?
11 class Selectable {
12  protected:
15 
16  public:
17  virtual void select(setting_t setting) = 0;
18 
20  static_assert(std::is_unsigned<setting_t>::value,
21  "Error: setting_t should be an unsigned integer type.");
22  if (setting >= N) {
23  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  return setting;
31  }
32 
34 
36  this->initialSelection = validateSetting(initialSelection);
37  }
38 
39  private:
41 };
42 
Selectable::setInitialSelection
void setInitialSelection(setting_t initialSelection)
Definition: Selectable.hpp:35
Error.hpp
Selectable::getInitialSelection
setting_t getInitialSelection() const
Definition: Selectable.hpp:33
Def.hpp
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:9
Selectable
Definition: Selectable.hpp:11
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:10
Selectable::validateSetting
static setting_t validateSetting(setting_t setting)
Definition: Selectable.hpp:19
ERROR
#define ERROR(msg, errc)
Print the error message and error code, and stop the execution if FATAL_ERRORS are enabled.
Definition: Error.hpp:42
Selectable::Selectable
Selectable(setting_t initialSelection=0)
Definition: Selectable.hpp:13
Selectable::select
virtual void select(setting_t setting)=0
Selectable::initialSelection
setting_t initialSelection
Definition: Selectable.hpp:40
MIDI_Notes::F
constexpr int8_t F
Definition: Notes.hpp:23
setting_t
uint8_t setting_t
The type used for Selectors.
Definition: Def.hpp:50