#ifndef NOTA_H
#define NOTA_H
/*==============================================================================
CLASSI NOTA E SCALA, di Aldo Carpanelli, maggio 2016
Questo file riguarda DUE classi principali, la classe NOTA e la classe SCALA,
piu' due classi "ausiliarie" vuote, per la segnalazione degli errori, NOTA_Err e
SCALA_Err.
==============================================================================*/
#include "stdio.h"
// ===> CLASSI NOTA_Err e NOTA <================================================
class NOTA_Err{};
class NOTA {
public:
NOTA() { Imposta( 3, 0, 0 ); }
NOTA( char ottava, char nota, char alterazione )
{ if( !Imposta(ottava,nota,alterazione) ) throw NOTA_Err(); }
NOTA( char midi ) { if( !Imposta(midi) ) throw NOTA_Err(); }
bool Imposta( char ottava, char nota, char alterazione );
bool Imposta( char midi );
char Ottava() { return o; }
char Nota() { return n; }
char Alterazione() { return a; }
char Midi();
bool NotaValida();
const char *Str();
const NOTA& operator ++(); // prefissa
const NOTA operator ++(int); // postfissa
const NOTA& operator --(); // prefissa
const NOTA operator --(int); // postfissa
NOTA& operator +=( int n );
NOTA& operator -=( int n );
const NOTA operator +( int n );
const NOTA operator -( int n );
bool operator==(const NOTA& right);
bool operator!=(const NOTA& right);
bool operator<(const NOTA& right);
bool operator>(const NOTA& right);
protected:
private:
char o; // ottava
char n; // nota
char a; // alterazione
char f; // "filler", inutilizzato
};
// ===> CLASSI SCALA_Err e SCALA <==============================================
class SCALA_Err{};
class SCALA{
public:
SCALA();
SCALA( char nota, char alterazione, char schema[7] );
SCALA( char midi, char schema[7] );
bool Imposta( char nota, char alterazione, char schema[7] );
bool Imposta( char midi, char schema[7] );
NOTA Grado( int grado ) { return g[grado%7]; }
char GradoMidi( int grado ) { return g[grado%7].Midi(); }
void Triade( int grado, NOTA *nn );
const char *Str();
protected:
private:
NOTA g[7];
};
// ===> FUNZIONI NON MEMBRO <===================================================
bool DatiValidi( char ottava, char nota, char alterazione );
void OttavaVisibile( bool ottavaVisibile );
#endif // NOTA_H