?? methoddispatch.h
字號:
/*///////////////////////////////////////////////////////////////////////////////////
線程管理
包括線程池管理
線程隊列管理
線程封裝
李亦
2006.6.15
/*///////////////////////////////////////////////////////////////////////////////////
#ifndef _METHODDISPATCH_H_
#define _METHODDISPATCH_H_
#ifndef _TVECTOR_H_
#include "core/tVector.h"
#endif
#ifndef _BITSTREAM_H_
#include "core/BitStream.h"
#endif
//namespace RPGServer
//{
/// Base class for FunctorDecl template classes. The Functor objects
/// store the parameters and member function pointer for the invocation
/// of some class member function. Functor is used in TNL by the
/// RPC mechanism, the journaling system and the ThreadQueue to store
/// a function for later transmission and dispatch, either to a remote
/// host, a journal file, or another thread in the process.
struct Functor
{
/// Construct the Functor.
Functor() {}
/// Destruct the Functor.
virtual ~Functor() {}
/// Reads this Functor from a BitStream.
//virtual void read(BitStream &stream) = 0;
/// Writes this Functor to a BitStream.
//virtual void write(BitStream &stream) = 0;
/// Dispatch the function represented by the Functor.
virtual void dispatch(void *t) = 0;
};
/// FunctorDecl template class. This class is specialized based on the
/// member function call signature of the method it represents. Other
/// specializations hold specific member function pointers and slots
/// for each of the function arguments.
template <class T>
struct FunctorDecl : public Functor
{
FunctorDecl() {}
void set() {}
//void read(BitStream &stream) {}
//void write(BitStream &stream) {}
void dispatch(void *t) { }
};
template <class T>
struct FunctorDecl<void (T::*)()> : public Functor {
typedef void (T::*FuncPtr)();
FuncPtr ptr;
FunctorDecl(FuncPtr p) : ptr(p) {}
void set() {}
//void read(BitStream &stream) {}
//void write(BitStream &stream) {}
void dispatch(void *t) { ((T *)t->*ptr)(); }
};
template <class T, class A>
struct FunctorDecl<void (T::*)(A)> : public Functor
{
typedef void (T::*FuncPtr)(A);
FuncPtr ptr; A a;
FunctorDecl(FuncPtr p) : ptr(p) {}
void set(A &_a) { a = _a; }
//void read(BitStream &stream) { Types::read(stream, &a); }
//void write(BitStream &stream) { Types::write(stream, a); }
void dispatch(void *t) { (((T *)t)->*ptr)(a); }
};
template <class T, class A, class B>
struct FunctorDecl<void (T::*)(A,B)>: public Functor {
typedef void (T::*FuncPtr)(A,B);
FuncPtr ptr; A a; B b;
FunctorDecl(FuncPtr p) : ptr(p) {}
void set(A &_a, B &_b) { a = _a; b = _b;}
//void read(BitStream &stream) { Types::read(stream, &a); Types::read(stream, &b); }
//void write(BitStream &stream) { Types::write(stream, a); Types::write(stream, b); }
void dispatch(void *t) { (((T *)t)->*ptr)(a, b); }
};
template <class T, class A, class B, class C>
struct FunctorDecl<void (T::*)(A,B,C)>: public Functor {
typedef void (T::*FuncPtr)(A,B,C);
FuncPtr ptr; A a; B b; C c;
FunctorDecl(FuncPtr p) : ptr(p) {}
void set(A &_a, B &_b, C &_c) { a = _a; b = _b; c = _c;}
//void read(BitStream &stream) { Types::read(stream, &a); Types::read(stream, &b); Types::read(stream, &c); }
//void write(BitStream &stream) { Types::write(stream, a); Types::write(stream, b); Types::write(stream, c); }
void dispatch(void *t) { (((T *)t)->*ptr)(a, b, c); }
};
template <class T, class A, class B, class C, class D>
struct FunctorDecl<void (T::*)(A,B,C,D)>: public Functor {
typedef void (T::*FuncPtr)(A,B,C,D);
FuncPtr ptr; A a; B b; C c; D d;
FunctorDecl(FuncPtr p) : ptr(p) {}
void set(A &_a, B &_b, C &_c, D &_d) { a = _a; b = _b; c = _c; d = _d; }
//void read(BitStream &stream) { Types::read(stream, &a); Types::read(stream, &b); Types::read(stream, &c); Types::read(stream, &d); }
//void write(BitStream &stream) { Types::write(stream, a); Types::write(stream, b); Types::write(stream, c); Types::write(stream, d); }
void dispatch(void *t) { (((T *)t)->*ptr)(a, b, c, d); }
};
template <class T, class A, class B, class C, class D, class E>
struct FunctorDecl<void (T::*)(A,B,C,D,E)>: public Functor {
typedef void (T::*FuncPtr)(A,B,C,D,E);
FuncPtr ptr; A a; B b; C c; D d; E e;
FunctorDecl(FuncPtr p) : ptr(p) {}
void set(A &_a, B &_b, C &_c, D &_d, E &_e) { a = _a; b = _b; c = _c; d = _d; e = _e; }
//void read(BitStream &stream) { Types::read(stream, &a); Types::read(stream, &b); Types::read(stream, &c); Types::read(stream, &d); Types::read(stream, &e); }
//void write(BitStream &stream) { Types::write(stream, a); Types::write(stream, b); Types::write(stream, c); Types::write(stream, d); Types::write(stream, e); }
void dispatch(void *t) { (((T *)t)->*ptr)(a, b, c, d, e); }
};
template <class T, class A, class B, class C, class D, class E, class F>
struct FunctorDecl<void (T::*)(A,B,C,D,E,F)>: public Functor {
typedef void (T::*FuncPtr)(A,B,C,D,E,F);
FuncPtr ptr; A a; B b; C c; D d; E e; F f;
FunctorDecl(FuncPtr p) : ptr(p) {}
void set(A &_a, B &_b, C &_c, D &_d, E &_e, F &_f) { a = _a; b = _b; c = _c; d = _d; e = _e; f = _f; }
//void read(BitStream &stream) { Types::read(stream, &a); Types::read(stream, &b); Types::read(stream, &c); Types::read(stream, &d); Types::read(stream, &e); Types::read(stream, &f); }
//void write(BitStream &stream) { Types::write(stream, a); Types::write(stream, b); Types::write(stream, c); Types::write(stream, d); Types::write(stream, e); Types::write(stream, f); }
void dispatch(void *t) { (((T *)t)->*ptr)(a, b, c, d, e, f); }
};
template <class T, class A, class B, class C, class D, class E, class F, class G>
struct FunctorDecl<void (T::*)(A,B,C,D,E,F,G)>: public Functor {
typedef void (T::*FuncPtr)(A,B,C,D,E,F,G);
FuncPtr ptr; A a; B b; C c; D d; E e; F f; G g;
FunctorDecl(FuncPtr p) : ptr(p) {}
void set(A &_a, B &_b, C &_c, D &_d, E &_e, F &_f, G &_g) { a = _a; b = _b; c = _c; d = _d; e = _e; f = _f; g = _g; }
//void read(BitStream &stream) { Types::read(stream, &a); Types::read(stream, &b); Types::read(stream, &c); Types::read(stream, &d); Types::read(stream, &e); Types::read(stream, &f); Types::read(stream, &g); }
//void write(BitStream &stream) { Types::write(stream, a); Types::write(stream, b); Types::write(stream, c); Types::write(stream, d); Types::write(stream, e); Types::write(stream, f); Types::write(stream, g); }
void dispatch(void *t) { (((T *)t)->*ptr)(a, b, c, d, e, f, g); }
};
template <class T, class A, class B, class C, class D, class E, class F, class G, class H>
struct FunctorDecl<void (T::*)(A,B,C,D,E,F,G,H)>: public Functor {
typedef void (T::*FuncPtr)(A,B,C,D,E,F,G,H);
FuncPtr ptr; A a; B b; C c; D d; E e; F f; G g; H h;
FunctorDecl(FuncPtr p) : ptr(p) {}
void set(A &_a, B &_b, C &_c, D &_d, E &_e, F &_f, G &_g, H &_h) { a = _a; b = _b; c = _c; d = _d; e = _e; f = _f; g = _g; h = _h; }
//void read(BitStream &stream) { Types::read(stream, &a); Types::read(stream, &b); Types::read(stream, &c); Types::read(stream, &d); Types::read(stream, &e); Types::read(stream, &f); Types::read(stream, &g); Types::read(stream, &h); }
//void write(BitStream &stream) { Types::write(stream, a); Types::write(stream, b); Types::write(stream, c); Types::write(stream, d); Types::write(stream, e); Types::write(stream, f); Types::write(stream, g); Types::write(stream, h); }
void dispatch(void *t) { (((T *)t)->*ptr)(a, b, c, d, e, f, g, h); }
};
template <class T, class A, class B, class C, class D, class E, class F, class G, class H, class I>
struct FunctorDecl<void (T::*)(A,B,C,D,E,F,G,H,I)>: public Functor {
typedef void (T::*FuncPtr)(A,B,C,D,E,F,G,H,I);
FuncPtr ptr; A a; B b; C c; D d; E e; F f; G g; H h; I i;
FunctorDecl(FuncPtr p) : ptr(p) {}
void set(A &_a, B &_b, C &_c, D &_d, E &_e, F &_f, G &_g, H &_h, I &_i) { a = _a; b = _b; c = _c; d = _d; e = _e; f = _f; g = _g; h = _h; i = _i; }
//void read(BitStream &stream) { Types::read(stream, &a); Types::read(stream, &b); Types::read(stream, &c); Types::read(stream, &d); Types::read(stream, &e); Types::read(stream, &f); Types::read(stream, &g); Types::read(stream, &h); Types::read(stream, &i); }
//void write(BitStream &stream) { Types::write(stream, a); Types::write(stream, b); Types::write(stream, c); Types::write(stream, d); Types::write(stream, e); Types::write(stream, f); Types::write(stream, g); Types::write(stream, h); Types::write(stream, i); }
void dispatch(void *t) { (((T *)t)->*ptr)(a, b, c, d, e, f, g, h, i); }
};
template <class T, class A, class B, class C, class D, class E, class F, class G, class H, class I, class J>
struct FunctorDecl<void (T::*)(A,B,C,D,E,F,G,H,I,J)>: public Functor {
typedef void (T::*FuncPtr)(A,B,C,D,E,F,G,H,I,J);
FuncPtr ptr; A a; B b; C c; D d; E e; F f; G g; H h; I i; J j;
FunctorDecl(FuncPtr p) : ptr(p) {}
void set(A &_a, B &_b, C &_c, D &_d, E &_e, F &_f, G &_g, H &_h, I &_i, J &_j) { a = _a; b = _b; c = _c; d = _d; e = _e; f = _f; g = _g; h = _h; i = _i; j = _j; }
//void read(BitStream &stream) { Types::read(stream, &a); Types::read(stream, &b); Types::read(stream, &c); Types::read(stream, &d); Types::read(stream, &e); Types::read(stream, &f); Types::read(stream, &g); Types::read(stream, &h); Types::read(stream, &i); Types::read(stream, &j); }
//void write(BitStream &stream) { Types::write(stream, a); Types::write(stream, b); Types::write(stream, c); Types::write(stream, d); Types::write(stream, e); Types::write(stream, f); Types::write(stream, g); Types::write(stream, h); Types::write(stream, i); Types::write(stream, j); }
void dispatch(void *t) { (((T *)t)->*ptr)(a, b, c, d, e, f, g, h, i, j); }
};
//};//namespace RPGServer
#endif //_METHODDISPATCH_H_
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -