Value:class NAME { \
public: \
TIMETYPE mPrevTrigger; \
TIMETYPE mPeriod; \
\
NAME() { reset(); mPeriod = 1; }; \
NAME(TIMETYPE period) { reset(); setPeriod(period); }; \
void setPeriod( TIMETYPE period) { mPeriod = period; }; \
TIMETYPE getTime() { return (TIMETYPE)(TIMEGETTER()); }; \
TIMETYPE getPeriod() { return mPeriod; }; \
TIMETYPE getElapsed() { return getTime() - mPrevTrigger; } \
TIMETYPE getRemaining() { return mPeriod - getElapsed(); } \
TIMETYPE getLastTriggerTime() { return mPrevTrigger; } \
bool ready() { \
bool isReady = (getElapsed() >= mPeriod); \
if( isReady ) { reset(); } \
return isReady; \
} \
void reset() { mPrevTrigger = getTime(); }; \
void trigger() { mPrevTrigger = getTime() - mPeriod; }; \
\
operator bool() { return ready(); } \
};
fl::UIButton trigger("Trigger")
Preprocessor-based class "template" for CEveryNTime, used with EVERY_N_TIME timekeepers.
Classes to implement EVERY_N_MILLIS, EVERY_N_SECONDS, EVERY_N_MINUTES, EVERY_N_HOURS, and EVERY_N_BSECONDS.
Definition at line 762 of file lib8tion.h.
762#define INSTANTIATE_EVERY_N_TIME_PERIODS(NAME,TIMETYPE,TIMEGETTER) \
763class NAME { \
764public: \
765 TIMETYPE mPrevTrigger; \
766 TIMETYPE mPeriod; \
767 \
768 NAME() { reset(); mPeriod = 1; }; \
769 NAME(TIMETYPE period) { reset(); setPeriod(period); }; \
770 void setPeriod( TIMETYPE period) { mPeriod = period; }; \
771 TIMETYPE getTime() { return (TIMETYPE)(TIMEGETTER()); }; \
772 TIMETYPE getPeriod() { return mPeriod; }; \
773 TIMETYPE getElapsed() { return getTime() - mPrevTrigger; } \
774 TIMETYPE getRemaining() { return mPeriod - getElapsed(); } \
775 TIMETYPE getLastTriggerTime() { return mPrevTrigger; } \
776 bool ready() { \
777 bool isReady = (getElapsed() >= mPeriod); \
778 if( isReady ) { reset(); } \
779 return isReady; \
780 } \
781 void reset() { mPrevTrigger = getTime(); }; \
782 void trigger() { mPrevTrigger = getTime() - mPeriod; }; \
783 \
784 operator bool() { return ready(); } \
785};