wvcallbacklist.h

00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  *
00005  */
00006 #ifndef __WVCALLBACKLIST_H
00007 #define __WVCALLBACKLIST_H
00008 
00009 
00010 #include <wvhashtable.h>
00011 
00012 
00013 template<class InnerCallback>
00014 class WvCallbackList
00015 {
00016 private:
00017     typedef typename InnerCallback::Parm1 P1;
00018     typedef typename InnerCallback::Parm2 P2;
00019     typedef typename InnerCallback::Parm3 P3;
00020     typedef typename InnerCallback::Parm4 P4;
00021     typedef typename InnerCallback::Parm5 P5;
00022     typedef typename InnerCallback::Parm6 P6;
00023     typedef typename InnerCallback::Parm7 P7;
00024     typedef typename InnerCallback::Parm8 P8;
00025     WvMap<void*, InnerCallback> list;
00026 
00027     /* The idea of copying this gives me a headache. */
00028     WvCallbackList(const WvCallbackList &);
00029     WvCallbackList& operator=(const WvCallbackList&);
00030 public:
00031     WvCallbackList():
00032         list(42)
00033     {
00034     }
00035     void add(const InnerCallback &cb, void *cookie)
00036     {
00037         assert(!list.exists(cookie));
00038         list.add(cookie, cb);
00039     }
00040     void del(void *cookie)
00041     {
00042         assert(list.exists(cookie));
00043         list.remove(cookie);
00044     }
00045     bool isempty() const
00046     {
00047         return list.isempty();
00048     }
00049     void operator()()
00050     {
00051         typename WvMap<void*, InnerCallback>::Iter i(list);
00052 
00053         for (i.rewind(); i.next(); )
00054             i().data();
00055     }
00056     void operator()(P1 p1)
00057     {
00058         typename WvMap<void*, InnerCallback>::Iter i(list);
00059 
00060         for (i.rewind(); i.next(); )
00061             i().data(p1);
00062     }
00063     void operator()(P1 p1, P2 p2)
00064     {
00065         typename WvMap<void*, InnerCallback>::Iter i(list);
00066 
00067         for (i.rewind(); i.next(); )
00068             i().data(p1, p2);
00069     }
00070     void operator()(P1 p1, P2 p2, P3 p3)
00071     {
00072         typename WvMap<void*, InnerCallback>::Iter i(list);
00073 
00074         for (i.rewind(); i.next(); )
00075             i().data(p1, p2, p3);
00076     }
00077     void operator()(P1 p1, P2 p2, P3 p3, P4 p4)
00078     {
00079         typename WvMap<void*, InnerCallback>::Iter i(list);
00080 
00081         for (i.rewind(); i.next(); )
00082             i().data(p1, p2, p3, p4);
00083     }
00084     void operator()(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5)
00085     {
00086         typename WvMap<void*, InnerCallback>::Iter i(list);
00087 
00088         for (i.rewind(); i.next(); )
00089             i().data(p1, p2, p3, p4, p5);
00090     }
00091     void operator()(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6)
00092     {
00093         typename WvMap<void*, InnerCallback>::Iter i(list);
00094 
00095         for (i.rewind(); i.next(); )
00096             i().data(p1, p2, p3, p4, p5, p6);
00097     }
00098     void operator()(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7)
00099     {
00100         typename WvMap<void*, InnerCallback>::Iter i(list);
00101 
00102         for (i.rewind(); i.next(); )
00103             i().data(p1, p2, p3, p4, p5, p6, p7);
00104     }
00105     void operator()(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6, P7 p7, P8 p8)
00106     {
00107         typename WvMap<void*, InnerCallback>::Iter i(list);
00108 
00109         for (i.rewind(); i.next(); )
00110             i().data(p1, p2, p3, p4, p5, p6, p7, p8);
00111     }
00112 };
00113 
00114 
00115 #endif /* __WVCALLBACKLIST_H */

Generated on Wed Jul 12 17:53:20 2006 for WvStreams by  doxygen 1.4.7