summaryrefslogtreecommitdiff
path: root/ev++.h
diff options
context:
space:
mode:
Diffstat (limited to 'ev++.h')
-rw-r--r--ev++.h40
1 files changed, 32 insertions, 8 deletions
diff --git a/ev++.h b/ev++.h
index d1dc21a..a5ef402 100644
--- a/ev++.h
+++ b/ev++.h
@@ -72,6 +72,7 @@ namespace ev {
CHECK = EV_CHECK,
PREPARE = EV_PREPARE,
FORK = EV_FORK,
+ ASYNC = EV_ASYNC,
EMBED = EV_EMBED,
ERROR = EV_ERROR,
};
@@ -563,13 +564,13 @@ namespace ev {
#if EV_MULTIPLICITY
#define EV_CONSTRUCT(cppstem,cstem) \
- (EV_PX = get_default_loop ()) throw () \
+ (EV_PX = get_default_loop ()) throw () \
: base<ev_ ## cstem, cppstem> (EV_A) \
{ \
}
#else
#define EV_CONSTRUCT(cppstem,cstem) \
- () throw () \
+ () throw () \
{ \
}
#endif
@@ -580,19 +581,19 @@ namespace ev {
\
struct cppstem : base<ev_ ## cstem, cppstem> \
{ \
- void start () throw () \
+ void start () throw () \
{ \
ev_ ## cstem ## _start (EV_A_ static_cast<ev_ ## cstem *>(this)); \
} \
\
- void stop () throw () \
+ void stop () throw () \
{ \
ev_ ## cstem ## _stop (EV_A_ static_cast<ev_ ## cstem *>(this)); \
} \
\
cppstem EV_CONSTRUCT(cppstem,cstem) \
\
- ~cppstem () throw () \
+ ~cppstem () throw () \
{ \
stop (); \
} \
@@ -603,7 +604,7 @@ namespace ev {
\
cppstem (const cppstem &o); \
\
- cppstem & operator =(const cppstem &o); \
+ cppstem &operator =(const cppstem &o); \
\
public:
@@ -748,10 +749,17 @@ namespace ev {
#if EV_EMBED_ENABLE
EV_BEGIN_WATCHER (embed, embed)
- void start (struct ev_loop *embedded_loop) throw ()
+ void set (struct ev_loop *embedded_loop) throw ()
{
- stop ();
+ int active = is_active ();
+ if (active) stop ();
ev_embed_set (static_cast<ev_embed *>(this), embedded_loop);
+ if (active) start ();
+ }
+
+ void start (struct ev_loop *embedded_loop) throw ()
+ {
+ set (embedded_loop);
start ();
}
@@ -768,6 +776,22 @@ namespace ev {
EV_END_WATCHER (fork, fork)
#endif
+ #if EV_ASYNC_ENABLE
+ EV_BEGIN_WATCHER (async, async)
+ void set () throw () { }
+
+ void send () throw ()
+ {
+ ev_async_send (EV_A_ static_cast<ev_async *>(this));
+ }
+
+ bool async_pending () throw ()
+ {
+ return ev_async_pending (static_cast<ev_async *>(this));
+ }
+ EV_END_WATCHER (async, async)
+ #endif
+
#undef EV_PX
#undef EV_PX_
#undef EV_CONSTRUCT