RadioSvegliaGBE
AlarmData.cpp
Go to the documentation of this file.
1 
11 // Inclusione <automatica> dell'header che si sta implementando
12 #include "AlarmData.h"
13 
14 // Implementazione del costruttore dei default della categoria 'Costruttori e Distruttori'
16 // inizializzazione ai valori di default della 'constexpr' [_initvalue]
17 // inizializzazione 'm_State' al valore 'AlarmState::OFFLINE'
18 // Utilizzo di una INITIALIZER LIST per ottimizzazione
19  : m_Hour(AlarmData__file::_initvalue), m_Minute(AlarmData__file::_initvalue), m_Format(Clock::get_Format()), m_State(AlarmState::OFFLINE)
20 {
21  switch (m_Format)
22  {
24  m_Period = Clock::TimePeriod::AM; // per 00:00 am di default
25  break;
28  break;
29  case Clock::TimeFormat::INVALID_REFERENCE: // indicherebbe un errore nella classe Clock
31  break;
32  }
33 }
34 
35 // Implementazione del distruttore della categoria 'Costruttori e Distruttori'
37 {
38  // Solo per una gestione pi� sicura, verr� impostato su 'AlarmState::OFFLINE' il valore dell'attributo 'm_State'.
39  // Questo principalmente per evitare la deallocazione dell'oggetto rappresentante la sveglia proprio durante il suo stato di trigger.
40 
42 
43  // Deallocazione dell'oggetto con la perdit� di tutte le informazioni ad esso associate.
44 }
45 
46 // Implementazione del metodo 'set_Time' della categoria 'Value Setters'
47 // set_Time (1)
48 bool AlarmData::set_Time(const unsigned int& t_Hour, const unsigned int& t_Minute, const Clock::TimePeriod& t_Period /* = Clock::TimePeriod::NOT_USED */)
49 {
50  // Prima dell'assegnamento, effettuo dei controlli sulla validit� dei parametri
51  // Specializzazione in base al formato dell'ora --> 12h / 24h
52  switch (m_Format)
53  {
55  // Valori invalidi. Non effettuo alcuna operazione
57  return false;
58 
60  return false;
61 
62  if (t_Hour == AlarmData__file::_initvalue && t_Period == Clock::TimePeriod::PM)
63  return false;
64 
65  if (t_Period == Clock::TimePeriod::NOT_USED)
66  return false;
67 
68  // Valori validi. Effettuo assegnazione
69  m_Hour = t_Hour;
70  m_Minute = t_Minute;
71  m_Period = t_Period;
72 
73  return true;
74  break;
75 
78  // Valori invalidi. Non effettuo alcuna operazione
79  return false;
80  else
81  {
82  // Valori validi. Effettuo assegnazione
83  m_Hour = t_Hour;
84  m_Minute = t_Minute;
86 
87  return true;
88  }
89  break;
90 
91  case Clock::TimeFormat::INVALID_REFERENCE: // indicherebbe un errore nella classe Clock
92  return false;
93  break;
94  }
95 }
96 
97 // set_Time (2)
98 bool AlarmData::set_Time(const String& t_Value, const Clock::TimePeriod& t_Period /* = Clock::TimePeriod::NOT_USED */)
99 {
100  // Controlli preventivi sulla stringa
101  /*hh:mm period (facoltativo)*/
102  if (t_Value.length() != AlarmData__file::_length_short && t_Value.length() != AlarmData__file::_length_long)
103  return false;
104 
106  return false;
107 
108  unsigned int l_Hour = ((String(t_Value[0]).toInt() * 10) + String(t_Value[1]).toInt());
109  unsigned int l_Minute = ((String(t_Value[3]).toInt() * 10) + String(t_Value[4]).toInt());
110 
111  switch (m_Format)
112  {
115  return false;
116  else
117  {
118  if (t_Period == Clock::TimePeriod::NOT_USED)
119  return false;
120 
122  return false;
123 
124  if (l_Hour == AlarmData__file::_initvalue && t_Period == Clock::TimePeriod::PM)
125  return false;
126 
127  m_Hour = l_Hour;
128  m_Minute = l_Minute;
129  m_Period = t_Period;
130 
131  return true;
132  }
133  break;
136  return false;
137  else
138  {
139  m_Hour = l_Hour;
140  m_Minute = l_Minute;
142 
143  return true;
144  }
145  break;
146  }
147 }
148 
149 // Implementazione del metodo 'set_State' della categoria 'Value Setters'
150 bool AlarmData::set_State(const AlarmState& t_State)
151 {
152  // Prima dell'assegnamento, effettuo un controllo per verificare la effettiva necessit� dell'assegnamento
153  if (t_State == m_State)
154  // Operazione di assegnamento non necessaria
155  return false;
156 
157  // Operazione di assegnamento necessaria
158  m_State = t_State;
159 
160  return true;
161 }
162 
163 // Implementazione del metodo 'get_SetTime' della categoria 'Metodi'
165 {
166  // Creo una variabile locale allo STACK FRAME di questo metodo <-- [reference '&'] non disponibile in ritorno
167  // Questa variabile verr� utilizzata per la rappresentazione del valore nel formato 'hh:mm'.
168  // Il valore restituito sar� del tipo 'String' [stringa]
169  String l_SetTime = "";
170 
171  // Specializzazione in base al formato dell'ora --> 12h / 24h
172  switch (m_Format)
173  {
175  // Ottengo il valore in 'hh'
176  // 'Elegant Adjustment' "Regolazione Elegante" della stringa in ritorno per il valore dell'ora impostata per il trigger della sveglia
177  // Aggiunge uno zero '0' inziale per compensare un eventuale mancanza di seconda cifra (per i valori minori di '_ElegantAdj' (i.e. '10'))
179  l_SetTime = l_SetTime + "0";
180 
181  l_SetTime = l_SetTime + String(m_Hour) + ":";
182 
183  // Ottengo il valore in 'mm'
184  // 'Elegant Adjustment' "Regolazione Elegante" della stringa in ritorno per il valore dell'ora impostata per il trigger della sveglia
185  // Aggiunge uno zero '0' inziale per compensare un eventuale mancanza di seconda cifra (per i valori minori di '_ElegantAdj' (i.e. '10'))
187  l_SetTime = l_SetTime + "0";
188 
189  l_SetTime = l_SetTime + String(m_Minute);
190 
191  // Ottengo il periodo
192  switch (m_Period)
193  {
195  l_SetTime = l_SetTime + "am";
196  break;
197 
199  l_SetTime = l_SetTime + "pm";
200  break;
201  }
202  break;
203 
205  // Ottengo il valore in 'hh'
206  // 'Elegant Adjustment' "Regolazione Elegante" della stringa in ritorno per il valore dell'ora impostata per il trigger della sveglia
207  // Aggiunge uno zero '0' inziale per compensare un eventuale mancanza di seconda cifra (per i valori minori di '_ElegantAdj' (i.e. '10'))
209  l_SetTime = l_SetTime + "0";
210 
211  l_SetTime = l_SetTime + String(m_Hour) + ":";
212 
213  // Ottengo il valore in 'mm'
214  // 'Elegant Adjustment' "Regolazione Elegante" della stringa in ritorno per il valore dell'ora impostata per il trigger della sveglia
215  // Aggiunge uno zero '0' inziale per compensare un eventuale mancanza di seconda cifra (per i valori minori di '_ElegantAdj' (i.e. '10'))
217  l_SetTime = l_SetTime + "0";
218 
219  l_SetTime = l_SetTime + String(m_Minute);
220 
221  break;
222 
223  case Clock::TimeFormat::INVALID_REFERENCE: // indicherebbe un errore nella classe Clock
224  return String(m_CoreInvalidator);
225  break;
226  }
227 
228  // Ritorno la 'String' [stringa] equivalente
229  return l_SetTime;
230 }
231 
232 // Implementazione del metodo 'Check' della categoria 'Metodi'
234 {
235  // Effettuo un controllo sugli attributi 'm_Hour' e 'm_Minute'
237  // La sveglia non � attiva, quindi � automaticamente non in trigger
238  return false;
239 
240  // Confronto i valori degli attributi 'm_Hour' e 'm_Minute' con i valori in ritorno dai metodi della classe "Clock"
241  // Non � necessario predisporre un controllo per gli eventuali invalidatori in ritorno dai metodi della classe "Clock".
242  /*
243  Questo perch� l'invalidatore, per la natura del suo tipo, rappresenta un valore impossibile, che quindi � e sar� sempre e sempre
244  diverso da possibili valori validi. La classe "AlarmData", nel metodo 'set_Time' implementa di gi� controlli di validit� per gli attributi
245  'm_Hour' e 'm_Minute', che quindi conterranno solo valori validi, automaticamente diversi dal valore dell'invalidatore.
246  Quindi, grazie al controllo in 'set_Time' e grazie alla natura dell'invalidatore stesso, non abbiamo bisogno di conoscerne il valore: il
247  metodo 'Check' di questa classe ritorner� comunque un valore booleano 'false'.
248  */
249  // Specializzazione in base al formato dell'ora --> 12h / 24h
250  switch (m_Format)
251  {
254  // Comunico che la sveglia � in trigger
255  return true;
256  else
257  // Comunico che la sveglia non � in trigger
258  return false;
259  break;
260 
263  // Comunico che la sveglia � in trigger
264  return true;
265  else
266  // Comunico che la sveglia non � in trigger
267  return false;
268  break;
269 
270  case Clock::TimeFormat::INVALID_REFERENCE: // indicherebbe un errore nella classe Clock
271  return false;
272  break;
273  }
274 }
275 
276 // Implementazione del metodo 'UpdateFormat' della categoria 'Metodi'
278 {
279  // Controllo se l'operazione � effettivamente necessaria
280  if (m_Format == Clock::get_Format())
281  // Operazione non necessaria
282  return false;
283 
284  // Operazione necessaria
285  // Assegnamento
287 
288  switch (m_Format)
289  {
291  {
292  auto l_Supporter = m_Hour;
293  // Proveniamo da 24 ore
294  if (l_Supporter > Clock__file::_Period)
295  {
297 
298  m_Hour = l_Supporter - Clock__file::_Period;
299  }
300  else
301  {
303  m_Hour = l_Supporter;
304  }
305  return true;
306  break;
307  }
308 
310  // Proveniamo da 12 ore
311  switch (m_Period)
312  {
314  break;
315 
318  break;
319  }
320 
322  return true;
323  break;
324 
325  case Clock::TimeFormat::INVALID_REFERENCE: // indicherebbe un errore nella classe Clock
326  return false;
327  break;
328  }
329 }
330 
331 // Implementazione del metodo 'get_Invalidator' della categoria 'getter -> Invalidator'
332 /*La specificazione 'inline' rappresenta una grossa ottimizzazione!!*/
334 {
335  // Ritorno il valore dell'attributo 'm_Invalidator'. Per evitare la copia durante la fase di ritorno, ritorno l'attributo
336  // originale [referenza --> reference '&']. L'attributo è già costante, questo evita modifiche non autorizzate.
337  return m_CoreInvalidator;
338 }
339 
AlarmData__file::_length_short
static constexpr auto _length_short
Definition: AlarmData.h:71
Clock::TimeFormat::_12HOURS
Clock::TimePeriod::PM
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
Clock::TimePeriod::AM
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
Clock::get_Hours
static int get_Hours()
Permette di ottenere il valore dell'ora sincronizzata online. Il formato è: 'h/hh'.
Definition: Clock.cpp:346
AlarmData::get_SetTime
String get_SetTime()
Restituisce il valore dell'ora impostata per il trigger della sveglia.
Definition: AlarmData.cpp:164
Clock::get_Minutes
static int get_Minutes()
Permette di ottenere il valore dell'ora sincronizzata online. Il formato è: 'm/mm'.
Definition: Clock.cpp:404
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
Clock
Classe per la gestione della sincronizzazione online dell'ora corrente.
Definition: Clock.h:119
Clock::get_Period
static const TimePeriod get_Period()
Permette di ottenere il valore del periodo corrente.
Definition: Clock.cpp:732
AlarmData__file::_characteratpositiontwo
static constexpr auto _characteratpositiontwo
Definition: AlarmData.h:80
Clock::get_Format
static const TimeFormat get_Format()
Permette di ottenere il valore del formato corrente dell'ora.
Definition: Clock.cpp:746
AlarmData::~AlarmData
~AlarmData()
Distruttore della classe AlarmData.
Definition: AlarmData.cpp:36
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::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__file::_Period
static constexpr auto _Period
Definition: Clock.h:77
Clock::TimeFormat::INVALID_REFERENCE
AlarmData.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__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
Clock::TimeFormat::_24HOURS