46 lines
1.4 KiB
C++
46 lines
1.4 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--;
|
|
}
|
|
}
|
|
|
|
|