On 11/14/07, Marc Lehmann <[EMAIL PROTECTED]> wrote:
> On Tue, Nov 13, 2007 at 02:09:58AM +0100, Chris Brody <[EMAIL PROTECTED]> 
> wrote:
> > I've been trying the same test program with and without
> > EV_MULTIPLICITY=1. This program compiles and runs properly with
> > EV_MULTIPLICITY=0, but does not build if EV_MULTIPLICITY=1. I am
> > getting the following error:
>
> Yeah, of course, we are fighting an uphill battle: I don't use multiplicity
> anywhere, and its nevertheless the default mode *g*
I had another idea, for your automake to generate both "normal"
(default EV_MULTIPLICITY=1) versions of the ev(ent) libraries and
EV_MULTIPLICITY=0 versions of the ev(ent) libraries.

In addition, if the evbuffer part were also in a separate library from
the ev(ent) library/ies, then we would have fewer library versions to
manage...

> Thanks for the test program!
I believe credit belongs to the authors of both the eventxx & libevent
projects...

> For multiplicity and C++, I chose to have the same prototype, excluding
> the loop, because the loop is already stored in the watcher that is being
> passed.
>
> As such, this is the correct prototype:
>
>        void meth (ev::sig &w, int )
>
> This also relieves you from having to store the loop, you could simply
> take it from the watcher:
>
>   ev::ev_unloop(l, EVUNLOOP_ONE);
>   =>
>   ev::ev_unloop(w.loop, EVUNLOOP_ONE);
Yes!

> (You could convince me to include it, but since the current ev++.h
> practically enforces a strong marriage between watcher and loop, this
> seems excessive. Its a trade-off between similarity to C and C++-ness).
No.

I had yet another idea, to allow someone to declare a "classical"
C-callback, just like you find in event.h and eventxx. I think this
would make it much quicker use ev++ in an existing libevent-based
application without the event.h layer. Perhaps in subclass(es)... I
can propose a patch.

> Here is your test program modified to do the expected thing (guessing what
> expected is ... :)
>
>   http://data.plan9.de/y.C
I just built with and without EV_MULTIPLICITY=0 on Linux (64) and ran
with success.

Now that the callback has been fixed, we can fix the namespace by two
options, both tested with & without EV_MULTIPLICITY=0:

Option 1:

$ diff -u y.C y1.C
--- y.C 2007-11-14 12:48:52.000000000 +0100
+++ y1.C        2007-11-14 13:05:38.000000000 +0100
@@ -3,10 +3,6 @@

 #include "ev++.h"

-#if EV_MULTIPLICITY
-using namespace ev;
-#endif
-
 struct handler
 {
         int i;

Option 2:

$ diff -u y.C y2.C
--- y.C 2007-11-14 12:48:52.000000000 +0100
+++ y2.C        2007-11-14 13:04:13.000000000 +0100
@@ -3,9 +3,7 @@

 #include "ev++.h"

-#if EV_MULTIPLICITY
 using namespace ev;
-#endif

 struct handler
 {
@@ -13,7 +11,7 @@

         handler(): i(0) {}

-        void meth (ev::sig &w, int )
+        void meth (sig &w, int )
         {
                 std::cout << ++i << " interrupts, ";
                 if (i < 5) std::cout << "keep going...\n";
@@ -22,9 +20,9 @@
                         std::cout << "done!\n";

 #if EV_MULTIPLICITY
-                        ev::ev_unloop(w.loop, EVUNLOOP_ONE);
+                        ev_unloop(w.loop, EVUNLOOP_ONE);
 #else
-                        ev::ev_unloop(EVUNLOOP_ONE);
+                        ev_unloop(EVUNLOOP_ONE);
 #endif
                 }
         }
@@ -32,17 +30,17 @@

 int main()
 {
-        ev::ev_default_loop(EVFLAG_AUTO);
+        ev_default_loop(EVFLAG_AUTO);

         handler h;

-        ev::sig mysig(&h, &handler::meth);
+        sig mysig(&h, &handler::meth);
         mysig.start(SIGINT);

 #if EV_MULTIPLICITY
-        ev::ev_loop(ev::ev_default_loop(0), 0);
+        ev_loop(ev_default_loop(0), 0);
 #else
-        ev::ev_loop(0);
+        ev_loop(0);
 #endif

         return 0;
_______________________________________________
Libevent-users mailing list
Libevent-users@monkey.org
http://monkeymail.org/mailman/listinfo/libevent-users

Reply via email to