46 lines
1.8 KiB
C++
46 lines
1.8 KiB
C++
|
|
/*
|
|||
|
|
* ReversCounter.cpp
|
|||
|
|
*
|
|||
|
|
* Created on: 19 мая 2021 г.
|
|||
|
|
* Author: sozonov
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#include "ReversCounter.hh"
|
|||
|
|
|
|||
|
|
ReversCounter::ReversCounter(unsigned int _dir, unsigned int _mod, unsigned int _r_v) :
|
|||
|
|
direction(_dir==0 ? ReversCounter::Increment : ReversCounter::Decrement), module( _mod ), reset_value( _r_v ),
|
|||
|
|
counter( _r_v ) {}
|
|||
|
|
|
|||
|
|
//Метод сброса значения счётчика
|
|||
|
|
//При вызове данного метода значение счётчика сбрасывается на значение заданое в настроках
|
|||
|
|
void ReversCounter::reset() {
|
|||
|
|
counter = reset_value;
|
|||
|
|
}
|
|||
|
|
//Метод вызываемый при переходе через границы
|
|||
|
|
//В зависимости от направления счётчик либо принимает значение 0 либо module
|
|||
|
|
void ReversCounter::border_crossing() {}
|
|||
|
|
|
|||
|
|
//todo: В файлах кода обычно комментариев нет - код должен быть понятным итак.
|
|||
|
|
//Метод счёта
|
|||
|
|
//При пересечении границ вызываем соттветствующий метод
|
|||
|
|
void ReversCounter::count() {
|
|||
|
|
//todo: Это либо switch:case, либо разные реализации модуля.
|
|||
|
|
if(direction==Increment) {
|
|||
|
|
if (counter == module) {
|
|||
|
|
counter = 0; //обнуляем счётчик при достижении значения границы
|
|||
|
|
border_crossing();
|
|||
|
|
} else
|
|||
|
|
counter++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
else if(direction==Decrement){
|
|||
|
|
if (counter == 0) {
|
|||
|
|
counter = module; //при уменьшении счётчика до нуля, делаем его равным верхней границе
|
|||
|
|
border_crossing();
|
|||
|
|
} else
|
|||
|
|
counter--;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|