Control Surface  1.2.0
MIDI Control Surface library for Arduino
Cable.hpp
Go to the documentation of this file.
1 /* ✔ */
2 
3 #pragma once
4 
5 #include <stdint.h> // uint8_t
6 #include <Settings/NamespaceSettings.hpp>
7 
9 
13 class Cable {
14  public:
21  explicit constexpr Cable(uint8_t zeroBasedCable)
23 
29  constexpr uint8_t getRaw() const { return zeroBasedCable; }
30 
37  static constexpr Cable createCable(uint8_t oneBasedCable) {
38  return Cable{uint8_t(oneBasedCable - 1)};
39  }
40 
47  constexpr bool operator==(const Cable &rhs) const {
48  return this->zeroBasedCable == rhs.zeroBasedCable;
49  }
50 
57  Cable &operator+=(uint8_t rhs) {
58  this->zeroBasedCable += rhs;
59  return *this;
60  }
61 
68  Cable operator+(uint8_t rhs) const {
69  Cable copy = *this;
70  copy += rhs;
71  return copy;
72  }
73 
80  Cable &operator-=(uint8_t rhs) {
81  this->zeroBasedCable -= rhs;
82  return *this;
83  }
84 
91  Cable operator-(uint8_t rhs) const {
92  Cable copy = *this;
93  copy -= rhs;
94  return copy;
95  }
96 
97  private:
98  uint8_t zeroBasedCable : 4;
99 };
100 
107 constexpr Cable operator"" _cb(unsigned long long cb) {
108  return Cable::createCable(cb);
109 }
110 
111 constexpr Cable CABLE_1 = 1_cb;
112 constexpr Cable CABLE_2 = 2_cb;
113 constexpr Cable CABLE_3 = 3_cb;
114 constexpr Cable CABLE_4 = 4_cb;
115 constexpr Cable CABLE_5 = 5_cb;
116 constexpr Cable CABLE_6 = 6_cb;
117 constexpr Cable CABLE_7 = 7_cb;
118 constexpr Cable CABLE_8 = 8_cb;
119 constexpr Cable CABLE_9 = 9_cb;
120 constexpr Cable CABLE_10 = 10_cb;
121 constexpr Cable CABLE_11 = 11_cb;
122 constexpr Cable CABLE_12 = 12_cb;
123 constexpr Cable CABLE_13 = 13_cb;
124 constexpr Cable CABLE_14 = 14_cb;
125 constexpr Cable CABLE_15 = 15_cb;
126 constexpr Cable CABLE_16 = 16_cb;
127 
CABLE_1
constexpr Cable CABLE_1
Definition: Cable.hpp:111
Cable
A type-safe class for MIDI USB Cable numbers.
Definition: Cable.hpp:13
CABLE_3
constexpr Cable CABLE_3
Definition: Cable.hpp:113
CABLE_9
constexpr Cable CABLE_9
Definition: Cable.hpp:119
CABLE_16
constexpr Cable CABLE_16
Definition: Cable.hpp:126
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:9
Cable::operator==
constexpr bool operator==(const Cable &rhs) const
Check if two cables are the same.
Definition: Cable.hpp:47
CABLE_8
constexpr Cable CABLE_8
Definition: Cable.hpp:118
Cable::operator+
Cable operator+(uint8_t rhs) const
Add an offset to a cable.
Definition: Cable.hpp:68
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:10
CABLE_12
constexpr Cable CABLE_12
Definition: Cable.hpp:122
CABLE_5
constexpr Cable CABLE_5
Definition: Cable.hpp:115
Cable::operator-=
Cable & operator-=(uint8_t rhs)
Subtract an offset.
Definition: Cable.hpp:80
CABLE_2
constexpr Cable CABLE_2
Definition: Cable.hpp:112
CABLE_6
constexpr Cable CABLE_6
Definition: Cable.hpp:116
CABLE_11
constexpr Cable CABLE_11
Definition: Cable.hpp:121
Cable::Cable
constexpr Cable(uint8_t zeroBasedCable)
Create a MIDI Cable object.
Definition: Cable.hpp:21
CABLE_7
constexpr Cable CABLE_7
Definition: Cable.hpp:117
CABLE_15
constexpr Cable CABLE_15
Definition: Cable.hpp:125
Cable::operator-
Cable operator-(uint8_t rhs) const
Subtract an offset from a cable.
Definition: Cable.hpp:91
Cable::zeroBasedCable
uint8_t zeroBasedCable
Definition: Cable.hpp:98
CABLE_13
constexpr Cable CABLE_13
Definition: Cable.hpp:123
CABLE_14
constexpr Cable CABLE_14
Definition: Cable.hpp:124
Cable::getRaw
constexpr uint8_t getRaw() const
Get the cable as an integer.
Definition: Cable.hpp:29
CABLE_10
constexpr Cable CABLE_10
Definition: Cable.hpp:120
Cable::operator+=
Cable & operator+=(uint8_t rhs)
Add an offset.
Definition: Cable.hpp:57
Cable::createCable
static constexpr Cable createCable(uint8_t oneBasedCable)
Create a cable.
Definition: Cable.hpp:37
CABLE_4
constexpr Cable CABLE_4
Definition: Cable.hpp:114