CXX11 support for PITimer
git-svn-id: svn://db.shs.com.ru/pip@882 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -52,7 +52,8 @@
|
||||
|
||||
|
||||
_PITimerBase::_PITimerBase() {
|
||||
interval_ = deferred_delay = 0.;
|
||||
interval_ = 1000;
|
||||
deferred_delay = 0.;
|
||||
running_ = deferred_ = deferred_mode = false;
|
||||
tfunc = 0;
|
||||
parent = 0;
|
||||
@@ -481,14 +482,22 @@ PITimer::PITimer(TimerEvent slot, void * data, PITimer::TimerImplementation ti):
|
||||
}
|
||||
|
||||
|
||||
//PITimer::PITimer(const PITimer & other): PIObject() {
|
||||
// imp_mode = other.imp_mode;
|
||||
// initFirst();
|
||||
// data_t = other.data_t;
|
||||
// ret_func = other.ret_func;
|
||||
//}
|
||||
#ifdef PIP_CXX11_SUPPORT
|
||||
PITimer::PITimer(std::function<void ()> slot, PITimer::TimerImplementation ti) {
|
||||
imp_mode = ti;
|
||||
initFirst();
|
||||
ret_func = [slot](void *, int){slot();};
|
||||
}
|
||||
|
||||
|
||||
PITimer::PITimer(std::function<void (void *)> slot, void * data, PITimer::TimerImplementation ti) {
|
||||
imp_mode = ti;
|
||||
initFirst();
|
||||
data_t = data;
|
||||
ret_func = [slot](void *d, int){slot(d);};
|
||||
}
|
||||
#endif
|
||||
|
||||
PITimer::~PITimer() {
|
||||
destroy();
|
||||
}
|
||||
@@ -579,6 +588,7 @@ void PITimer::tickImp() {
|
||||
|
||||
|
||||
bool PITimer::start() {
|
||||
init();
|
||||
//piCout << this << "start" << imp;
|
||||
return imp->start();
|
||||
}
|
||||
|
||||
@@ -26,8 +26,11 @@
|
||||
#include "pithread.h"
|
||||
#include "pitime.h"
|
||||
|
||||
|
||||
typedef void (*TimerEvent)(void * , int );
|
||||
#ifdef PIP_CXX11_SUPPORT
|
||||
typedef std::function<void(void *, int)> TimerEvent;
|
||||
#else
|
||||
typedef void (*TimerEvent)(void *, int);
|
||||
#endif
|
||||
|
||||
class PITimer;
|
||||
|
||||
@@ -91,10 +94,16 @@ public:
|
||||
//! \brief Constructs timer with "ti" implementation
|
||||
explicit PITimer(TimerImplementation ti);
|
||||
|
||||
//! \brief Constructs timer with "slot" slot, "data" data and "ti" implementation
|
||||
//! \brief Constructs timer with "slot" slot void(void *,int), "data" data and "ti" implementation
|
||||
explicit PITimer(TimerEvent slot, void * data = 0, TimerImplementation ti = Thread);
|
||||
|
||||
// PITimer(const PITimer & other);
|
||||
|
||||
#ifdef PIP_CXX11_SUPPORT
|
||||
//! \brief Constructs timer with "slot" slot void(), and "ti" implementation
|
||||
explicit PITimer(std::function<void ()> slot, TimerImplementation ti = Thread);
|
||||
|
||||
//! \brief Constructs timer with "slot" slot void(void *), "data" data and "ti" implementation
|
||||
explicit PITimer(std::function<void (void *)> slot, void * data, TimerImplementation ti = Thread);
|
||||
#endif
|
||||
|
||||
virtual ~PITimer();
|
||||
|
||||
@@ -150,7 +159,15 @@ public:
|
||||
|
||||
//! \brief Set timer tick function
|
||||
void setSlot(TimerEvent slot) {ret_func = slot;}
|
||||
|
||||
|
||||
#ifdef PIP_CXX11_SUPPORT
|
||||
//! \brief Set timer tick function
|
||||
void setSlot(std::function<void ()> slot) {ret_func = [slot](void *, int){slot();};}
|
||||
|
||||
//! \brief Set timer tick function
|
||||
void setSlot(std::function<void (void *)> slot) {ret_func = [slot](void *d, int){slot(d);};}
|
||||
#endif
|
||||
|
||||
//! \brief Returns common data passed to tick functions
|
||||
void * data() const {return data_t;}
|
||||
|
||||
@@ -168,21 +185,18 @@ public:
|
||||
|
||||
//! \brief Add frequency delimiter \b delim with optional delimiter slot \b slot.
|
||||
void addDelimiter(int delim, TimerEvent slot = 0) {delims << Delimiter(slot, delim);}
|
||||
|
||||
#ifdef PIP_CXX11_SUPPORT
|
||||
//! \brief Add frequency delimiter \b delim with optional delimiter slot \b slot.
|
||||
void addDelimiter(int delim, std::function<void ()> slot) {delims << Delimiter([slot](void *, int){slot();}, delim);}
|
||||
|
||||
//! \brief Add frequency delimiter \b delim with optional delimiter slot \b slot.
|
||||
void addDelimiter(int delim, std::function<void (void *)> slot) {delims << Delimiter([slot](void *d, int){slot(d);}, delim);}
|
||||
#endif
|
||||
|
||||
//! \brief Remove all frequency delimiters \b delim.
|
||||
void removeDelimiter(int delim) {for (int i = 0; i < delims.size_s(); ++i) if (delims[i].delim == delim) {delims.remove(i); i--;}}
|
||||
|
||||
//! \brief Remove all frequency delimiters with slot \b slot.
|
||||
void removeDelimiter(TimerEvent slot) {for (int i = 0; i < delims.size_s(); ++i) if (delims[i].slot == slot) {delims.remove(i); i--;}}
|
||||
|
||||
//! \brief Remove all frequency delimiters \b delim with slot \b slot.
|
||||
void removeDelimiter(int delim, TimerEvent slot) {for (int i = 0; i < delims.size_s(); ++i) if (delims[i].slot == slot && delims[i].delim == delim) {delims.remove(i); i--;}}
|
||||
|
||||
void setDelimiterValue(int delim, int value) {for (int i = 0; i < delims.size_s(); ++i) if (delims[i].delim == delim) delims[i].tick = value;}
|
||||
void setDelimiterValue(TimerEvent slot, int value) {for (int i = 0; i < delims.size_s(); ++i) if (delims[i].slot == slot) delims[i].tick = value;}
|
||||
void setDelimiterValue(int delim, TimerEvent slot, int value) {for (int i = 0; i < delims.size_s(); ++i) if (delims[i].slot == slot && delims[i].delim == delim) delims[i].tick = value;}
|
||||
int delimiterValue(int delim) {for (int i = 0; i < delims.size_s(); ++i) if (delims[i].delim == delim) return delims[i].tick; return -1;}
|
||||
int delimiterValue(int delim, TimerEvent slot) {for (int i = 0; i < delims.size_s(); ++i) if (delims[i].slot == slot && delims[i].delim == delim) return delims[i].tick; return -1;}
|
||||
EVENT_HANDLER0(void, clearDelimiters) {delims.clear();}
|
||||
|
||||
EVENT2(tickEvent, void * , data_, int, delimiter)
|
||||
|
||||
Reference in New Issue
Block a user