00001
00002
00003
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
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