RadioSvegliaGBE
AlarmData.h
Go to the documentation of this file.
1 #pragma once
2 
20 #pragma region INCLUSIONS
21 // Classe per sfruttare la sincronizzazione online dell'ora corrente per il corretto funzionamento della sveglia
22 /*
23 Classe di autori 'Grandieri Andrea', 'Barsotti Mirko', 'Erba Lorenzo' per la sincronizzazione online dell'ora corrente.
24 Verr� utilizzata anche per il corretto funzionamento della sveglia.
25 */
26 #include "Clock.h"
27 #pragma endregion INCLUSIONS
28 
29 // Namespace di protezione dalle inclusioni multiple con nominazione uguale
30 /*
31 I valori constexpr, come spiegato appena sopra, equivalgono alla direttiva '#define'. Questo pu� creare problemi nel momento in cui un singolo file viene incluso
32 in una gerarchia di molti pi� file, dove si potrebbe riscontrare la presenza di constexpr appartenenti a file diversi ma con gli stessi nomi! Questa ripetitivit� dei nomi deriva
33 dagli standard di nominazione. Per evitare, quindi, conflitti di multipla definizione, andremo ad utilizzare un 'namespace', che, come dice il nome, fornisce uno SPAZIO per i NOMI del nostro
34 file in cui il 'namespace' � stato dichiarato ed implementato.
35 Mantieniamo comunque la specificazione 'static', per evitare errori di linker in caso di inclusioni multiple di questa unit� di traslazione [file].
36 */
45 namespace AlarmData__file
46 {
47  // Espressione costante (equivalente della direttiva '#define') per la definizione del valore '_initvalue'.
48  // Questo valore rappresenta il valore assegnato agli attributi 'm_Hour', 'm_Minute' durante la fase di costruzione
49  // attraverso il costruttore di default.
50  // All'attributo 'm_State' verr� assegnato il valore booleano default 'false'.
52  static constexpr auto _initvalue = 0;
53 
54  // Espressione costante rappresentante il valore massimo che pu� essere attribuito all'attributo 'm_Hour' della classe "AlarmData" --> _24HOURS
56  static constexpr auto _24HOURS_hourlimiter = 23;
57  // Espressione costante rappresentante il valore massimo che pu� essere attribuito all'attributo 'm_Hour' della classe "AlarmData" --> _12HOURS
59  static constexpr auto _12HOURS_hourlimiter = 12;
60 
61  // Espressione costante rappresentante il valore massimo che pu� essere attribuito all'attributo 'm_Minute' della classe "AlarmData" --> _12HOURS / _24HOURS
63  static constexpr auto _minutelimiter = 59;
64 
65  // Valore costante per la formattazione "elegante" del formato --> 12h
67  static constexpr auto _ElegantAdj /*Adjustment*/ = 10;
68 
69  // Espressione costante rappresentante un valore di controllo per l'accettazione della stringa nel metodo 'set_SliderValue' della classe "Slider"
71  static constexpr auto _length_short = 5;
72 
73  // Espressione costante rappresentante un valore di controllo per l'accettazione della stringa nel metodo 'set_SliderValue' della classe "Slider"
75  static constexpr auto _length_long = 7;
76 
77  // Espressione costante rappresentante un valore di controllo per l'accettazione della stringa nel metodo 'set_SliderValue' della classe "Slider"
80  static constexpr auto _characteratpositiontwo = ':';
81 
82  // Valore costante che viene ritornato in caso di invalidità riscontrata nell'oggetto durante il dereferenziamento
83  // per la chiamata dei metodi.
84  // Il valore invalido utilizzato è un valore impossibile, cioè che non potrebbe essere mai restituito naturalmente.+
86  static constexpr int _invalidvalue = -1;
87 }
88 
97 class AlarmData
98 {
99  /*Enumerazioni*/
100  /*
101  Una enumerazione permette una gestione pi� intelligente degli "switcher" forniti all'utente finale.
102  Tramite nomi significativi, si gestiscono gli "switcher" appunto con dei nomi, utilizzati per mascherare i valori di enumerazione meno significativi per l'utente.
103  Anche qua si applica la staticit� descritta successivamente. Una classe di enumarazione � automaticamente statica.
104  */
114 public:
115  enum class AlarmState
116  {
117  ONLINE,
118  OFFLINE
119  };
120 
121  /*Attributi*/
122 private:
123  // Variabile per contenere l'ora impostata per il trigger della sveglia formato --> 'hh'
124  /*
125  Questa variabile conterr� il valore dell'ora impostata per il trigger della sveglia.
126  Conterr� l'informazione riguardante solamente l'ORA 'h'.
127  Il tipo della variabile � 'unsigned int' perch� non avrebbe senso ammettere anche valori negativi, non essendo possibili.
128  */
130  unsigned int m_Hour;
131 
132  // Variabile per contenere l'ora impostata per il trigger della sveglia formato --> 'mm'
133  /*
134  Questa variabile conterr� il valore dell'ora impostata per il trigger della sveglia.
135  Conterr� l'informazioni rigurdante solamente i MINUTI 'm'.
136  Il tipo della variabile � 'unsigned int' perch� non avrebbe senso ammettere anche valori negativi, non essendo possibili.
137  */
139  unsigned int m_Minute;
140 
141  // Variabile per contenere il periodo dell'ora (solo per 12h)
145 
146  // Variabile per contenere il formato dell'ora (dal punto di vista della medesima classe AlarmData
150 
151  // Variabile per segnalare lo stato della sveglia
155 
156  /*Costruttori e Distruttori*/
157 public:
158  // Costruttore default
159  /*
160  Il costruttore di default di questa classe inizializza un oggetto di classe "AlarmData" che rappresenta una sveglia.
161  Inizialmente i valori degli attributi sono impostati al valore della constexpr '_initvalue'.
162  Possono esistere contemporaneamente pi� istanze di questa classe, ognuna rappresentante una sveglia diversa.
163  Nonostante ci�, bisogna prestare attenzione alla concorrenza di chiamata per i metodi della classe "Clock"
164  */
174  AlarmData();
175 
176  // Distruttore
177  /*
178  Il distruttore di questa classe semplicemente dealloca l'oggetto interessato. Questo provocher� la perdita di tutte le informazioni annesse.
179  Per sicurezza, prima dell'effettiva deallocazione, la sveglia viene impostata su stato 'false'. Durante questa fase non potr� pi� entrare in fase di trigger.
180  */
189  ~AlarmData();
190 
191  /*Value Setters*/
192 public:
193  // Permette l'impostazione dell'ora per il trigger della sveglia
194  // set_Time (1)
217  bool set_Time(const unsigned int& t_Hour, const unsigned int& t_Minute, const Clock::TimePeriod& t_Period = Clock::TimePeriod::NOT_USED);
218 
219  //set_Time (2)
244  bool set_Time(const String& t_Value, const Clock::TimePeriod& t_Period = Clock::TimePeriod::NOT_USED);
245 
246  // Permette l'impostazione dello stato della sveglia
247  /*
248  Questo metodo permette di impostare lo stato della sveglia tramite il valore dell'attributo 'm_State'.
249  Questo metodo restituisce un valore booleano per indicare se il valore fornito come parametro 't_State' ha provocato o meno un cambiamento nel valore
250  precedente di 'm_State'. Quindi, si avr� in ritorno il valore 'false' se il 't_State' risulter� uguale a 'm_State'.
251  */
265  bool set_State(const AlarmState& t_State);
266 
267  /*Metodi*/
268 public:
269  // Restituisce, in tipo 'String' [stringa], l'ora impostata per il trigger della sveglia
282  String get_SetTime();
283 
284  // Controlla se la sveglia � in trigger oppure no al momento della chiamata del medesimo metodo
285  /*
286  Questo metodo informa se la sveglia � in trigger oppure no al momento della sua chiamata.
287  Questo significa che questo metodo NON esegue alcuna operazione di effettivo trigger della sveglia, ma informa se c'� nel momento della chiamata.
288  In questo modo, nel caso la sveglia sia in trigger, si potr� procedere con l'implementazione (manuale, dell'utente) delle operazioni desiderate da e
289  eseguire.
290  Restituisce:
291  - 'true' --> sveglia in trigger nel momento della chiamata
292  - 'false' --> sveglia non in trigger nel momento della chiamata
293  */
307  bool Check();
308 
309  // Aggiorna il formato dell'ora dal punto di vista di AlarmData
322  bool UpdateFormat();
323 
324  /*Invalidator*/
325  /*
326  L'invalidatore consiste in quel valore che viene ritornato ogni qualvolta una chiamata da parte dell'utente ai metodi non produce il risultato atteso.
327  E' importante specificare che, l'invalidatore, pur essendo costante, non deve essere dichiarato come 'constexpr' perchè NON deve seguire le regole di
328  comportamento della direttiva '#define'. Il compilatore NON deve sostituire il nome dell'attributo con un valore numerico costante --> i.e. RVALUE!!
329  L'invalidatore deve essere un vero e proprio attributo della classe, che però non deve mai appartenere ad uno specifico oggetto. Per questo deve essere sempre
330  specificato come statico. Ovviamente, avrà una locazione nel Data Segment, sarà quindi globale ma statico (valido sono in questa unità di traslazione (file)) e utilizzabile
331  solamente nell'ambito della classe di dichiarazione.
332  */
333  /*Attributo*/
334 private:
335  // Valore costante che viene ritornato in caso di invalidità riscontrata nell'oggetto durante il dereferenziamento
336  // per la chiamata dei metodi.
337  // Il valore invalido utilizzato è un valore impossibile, cioè che non potrebbe essere mai restituito naturalmente.
339  static const int m_CoreInvalidator;
340 
341  /*getter*/
342 public:
343  // Metodo per il ritorno del valore dell'Invalidatore. Verrà ritornata una referenza [reference --> '&'] costante, in modo tale da ottimizzare il processo e,
344  // allo stesso tempo evitare modifiche inappropriate.
345  /*
346  Un'altra particolarità di questo metodo sta nel fatto che è definita come 'inline'. Questa keyword comunica al compilatore, ovunque trovi una chiamata
347  a questo metodo, di NON effettuare una vera e propria chiamata, ma di sostituire la porzione del codice per la chiamata con il BODY del metodo (la implementazione stessa).
348  Questa tecnica risulta molto utile per funzioni che effettuano pochissime operazioni e sono sottoposte a frequenti chiamate.
349  Anche qua, per via della staticità, viene applicata la gestione analizzata prima.
350  */
351  /*L'invalidatore del CORE (questa unità di traslazione [file]) prende il nome di 'CoreInvalidator' (i.e. 'invalidatore del nucleo').
352  Questo è reso necessario per l'identificazione della differenza tra invalidatore del WRAPPER e invalidatore del CORE.
353  Come riportato nel brief del WRAPPER, l'unico invalidatore al quale l'utente deve aver accesso è quello del WRAPPER 'Invalidator'.
354  L'invalidatore del CORE 'CoreInvalidator' è necessario solamente per la gestione dell'invalidatore del WRAPPER 'Invalidator' che dipende in parte (non in ogni caso, ma solo in alcuni)
355  dall'invalidatore del CORE 'CoreInvalidator'. L'invalidatore del CORE non deve essere disponibile all'utente.*/
366  static inline const int& get_CoreInvalidator();
367 };
368 
369 // Dichiarazione delle variabili GLOBALI STATICHE
370 // Risiederanno nel Data Segment
373 
AlarmData__file::_length_short
static constexpr auto _length_short
Definition: AlarmData.h:71
Clock::TimeFormat
TimeFormat
Enumerazione per la gestione del formato di visualizzazione dell'ora corrente.
Definition: Clock.h:165
Clock::TimePeriod
TimePeriod
Enumerazione per la gestione del periodo durante la visualizzazione dell'ora corrente.
Definition: Clock.h:182
AlarmData::get_CoreInvalidator
static const int & get_CoreInvalidator()
Permette di ottenere l'invalidatore del nucleo della classe.
Definition: AlarmData.cpp:333
AlarmData__file::_ElegantAdj
static constexpr auto _ElegantAdj
Definition: AlarmData.h:67
AlarmData::AlarmData
AlarmData()
Costruttore di default della classe AlarmData.
Definition: AlarmData.cpp:15
AlarmData::m_Hour
unsigned int m_Hour
Definition: AlarmData.h:130
AlarmData::AlarmState::OFFLINE
AlarmData::get_SetTime
String get_SetTime()
Restituisce il valore dell'ora impostata per il trigger della sveglia.
Definition: AlarmData.cpp:164
AlarmData::Check
bool Check()
Restituisce se la sveglia � in trigger al momento della chiamata del metodo stesso oppure no.
Definition: AlarmData.cpp:233
AlarmData__file::_minutelimiter
static constexpr auto _minutelimiter
Definition: AlarmData.h:63
AlarmData__file::_characteratpositiontwo
static constexpr auto _characteratpositiontwo
Definition: AlarmData.h:80
AlarmData::~AlarmData
~AlarmData()
Distruttore della classe AlarmData.
Definition: AlarmData.cpp:36
AlarmData__file::_invalidvalue
static constexpr int _invalidvalue
Definition: AlarmData.h:86
AlarmData::m_Minute
unsigned int m_Minute
Definition: AlarmData.h:139
AlarmData__file::_initvalue
static constexpr auto _initvalue
Definition: AlarmData.h:52
AlarmData::set_State
bool set_State(const AlarmState &t_State)
Permette di impostare lo stato della sveglia.
Definition: AlarmData.cpp:150
AlarmData::AlarmState::ONLINE
AlarmData::m_Period
Clock::TimePeriod m_Period
Definition: AlarmData.h:144
AlarmData::m_State
AlarmState m_State
Definition: AlarmData.h:154
Clock::TimePeriod::NOT_USED
Clock.h
AlarmData::m_Format
Clock::TimeFormat m_Format
Definition: AlarmData.h:149
AlarmData::UpdateFormat
bool UpdateFormat()
Aggiorna il formato dell'ora corrente dal punto di vista di AlarmData.
Definition: AlarmData.cpp:277
AlarmData__file::_24HOURS_hourlimiter
static constexpr auto _24HOURS_hourlimiter
Definition: AlarmData.h:56
AlarmData::m_CoreInvalidator
static const int m_CoreInvalidator
Definition: AlarmData.h:339
AlarmData
Classe di definizione dell'oggetto per la funzione 'sveglia'.
Definition: AlarmData.h:97
AlarmData__file::_length_long
static constexpr auto _length_long
Definition: AlarmData.h:75
AlarmData::AlarmState
AlarmState
Enumerazione per la gestione dello stato della sveglia.
Definition: AlarmData.h:115
AlarmData__file::_12HOURS_hourlimiter
static constexpr auto _12HOURS_hourlimiter
Definition: AlarmData.h:59
AlarmData__file
Spazio dei nomi riferito al file AlarmData.h.
AlarmData::set_Time
bool set_Time(const unsigned int &t_Hour, const unsigned int &t_Minute, const Clock::TimePeriod &t_Period=Clock::TimePeriod::NOT_USED)
Permette di impostare il valore dell'ora per il trigger della sveglia.
Definition: AlarmData.cpp:48