LCOV - code coverage report
Current view: top level - src/Selectors - Selectable.hpp (source / functions) Hit Total Coverage
Test: 3a807a259ebe0769dd942f7f612dca5273937539 Lines: 7 7 100.0 %
Date: 2024-03-24 17:16:54 Functions: 15 16 93.8 %
Legend: Lines: hit not hit

          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

Generated by: LCOV version 1.15