1#ifndef MCC_INTERVAL_INTERVAL_QUALITY_H
2#define MCC_INTERVAL_INTERVAL_QUALITY_H
4#include <MCC_BuildSettings.h>
30class IntervalQuality {
36 static constexpr uint8_t InvalidValue = 0xFF;
43 ?
static_cast<uint8_t
>(
44 (
static_cast<uint8_t
>(kind) << 3) |
static_cast<uint8_t
>(count))
55 static constexpr IntervalQuality
Perfect() noexcept {
60 static constexpr IntervalQuality
Major() noexcept {
65 static constexpr IntervalQuality
Minor() noexcept {
73 static constexpr IntervalQuality
Augmented(int32_t count = 1) noexcept {
81 static constexpr IntervalQuality
Diminished(int32_t count = 1) noexcept {
86 constexpr bool IsValid() const noexcept {
return _value != InvalidValue; }
95 : IntervalQualityKind::Perfect;
102 constexpr uint8_t
Count() const noexcept {
103 return IsValid() ?
static_cast<uint8_t
>(_value & 0x07) : 0;
110 MCC_CONSTEXPR14 IntervalQuality
Inverted() const noexcept {
115 case IntervalQualityKind::Major:
117 case IntervalQualityKind::Minor:
119 case IntervalQualityKind::Augmented:
121 case IntervalQualityKind::Diminished:
123 case IntervalQualityKind::Perfect:
130 friend constexpr bool operator==(IntervalQuality a, IntervalQuality b)
noexcept {
131 return a._value == b._value;
Interval quality: perfect, major, minor, or augmented/diminished repeated one to four times (SPEC-INT...
Definition IntervalQuality.h:30
static constexpr IntervalQuality Augmented(int32_t count=1) noexcept
Returns the quality augmented count times; a count outside [1, 4] is invalid (SPEC-INT-4).
Definition IntervalQuality.h:73
friend constexpr bool operator==(IntervalQuality a, IntervalQuality b) noexcept
Equality; all invalid qualities are equal (SPEC-ERR-6).
Definition IntervalQuality.h:130
static constexpr IntervalQuality Minor() noexcept
Returns the minor quality.
Definition IntervalQuality.h:65
constexpr bool IsValid() const noexcept
Returns true unless this is the invalid quality.
Definition IntervalQuality.h:86
constexpr uint8_t Count() const noexcept
Returns how many times the quality is augmented or diminished, 1 for perfect, major and minor,...
Definition IntervalQuality.h:102
static constexpr IntervalQuality Invalid() noexcept
Returns the invalid quality.
Definition IntervalQuality.h:52
static constexpr uint8_t MaximumCount
Largest augmented or diminished repetition count.
Definition IntervalQuality.h:33
static constexpr IntervalQuality Perfect() noexcept
Returns the perfect quality.
Definition IntervalQuality.h:55
constexpr IntervalQualityKind Kind() const noexcept
Returns the kind, or Perfect for the invalid quality (SPEC-ERR-7).
Definition IntervalQuality.h:92
constexpr IntervalQuality() noexcept
Creates the invalid quality (SPEC-ERR-2).
Definition IntervalQuality.h:49
static constexpr IntervalQuality Diminished(int32_t count=1) noexcept
Returns the quality diminished count times; a count outside [1, 4] is invalid (SPEC-INT-4).
Definition IntervalQuality.h:81
static constexpr IntervalQuality Major() noexcept
Returns the major quality.
Definition IntervalQuality.h:60
MCC_CONSTEXPR14 IntervalQuality Inverted() const noexcept
Returns the quality of the inverted interval: major and minor, and augmented and diminished,...
Definition IntervalQuality.h:110
IntervalQualityKind
Kind of an interval quality.
Definition IntervalQuality.h:14
Music Composition Core public namespace.
Definition Version.h:4