summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root>2007-11-14 06:08:13 +0000
committerroot <root>2007-11-14 06:08:13 +0000
commit7bd6739edfe911fb4f237dd8ac638581af3f3fa4 (patch)
tree1da550a12abad7c21c295241d6dc5a414e342cfa
parent867da096eda8b4b89943c24bf02ee6a67f5b720e (diff)
use a static method as thunk, saving codesize and better hiding. didn't know this was possiblerel-0_9
-rw-r--r--ev++.h17
1 files changed, 8 insertions, 9 deletions
diff --git a/ev++.h b/ev++.h
index cff3c6a..82b65b9 100644
--- a/ev++.h
+++ b/ev++.h
@@ -95,13 +95,11 @@ namespace ev {
* so a macro solution was chosen */
#define EV_BEGIN_WATCHER(cppstem,cstem) \
\
- static void cb_ ## cppstem (EV_P_ struct ev_ ## cstem *w, int revents); \
- \
struct cppstem : ev_ ## cstem, callback<cppstem> \
{ \
EV_CONSTRUCT (cppstem) \
{ \
- ev_init (static_cast<ev_ ## cstem *>(this), cb_ ## cppstem); \
+ ev_init (static_cast<ev_ ## cstem *>(this), thunk); \
} \
\
bool is_active () const \
@@ -139,17 +137,18 @@ namespace ev {
cppstem (const cppstem &o) \
: callback<cppstem> (this, (void (cppstem::*)(cppstem &, int))0) \
{ /* disabled */ } \
+ \
void operator =(const cppstem &o) { /* disabled */ } \
\
+ static void thunk (EV_P_ struct ev_ ## cstem *w, int revents) \
+ { \
+ (*static_cast<cppstem *>(w))(revents); \
+ } \
+ \
public:
#define EV_END_WATCHER(cppstem,cstem) \
- }; \
- \
- static void cb_ ## cppstem (EV_P_ struct ev_ ## cstem *w, int revents) \
- { \
- (*static_cast<cppstem *>(w))(revents); \
- }
+ };
EV_BEGIN_WATCHER (io, io)
void set (int fd, int events)