CMS 3D CMS Logo

MultiMethod.h File Reference

#include "classlib/utils/XTypeInfo.h"
#include "classlib/utils/PODVector.h"
#include "classlib/utils/Macros.h"

Go to the source code of this file.

Namespaces

namespace  lat

Classes

class  lat::MultiMethod
 Base class for multi-methods. More...
struct  lat::MultiMethod::Definition
 Actual data structure defining the multi-method. More...
struct  lat::MultiMethod::Entry
 A record of information chained into extended type information. More...
struct  lat::MultiMethod::EntryHunk
 A hunk of Entry objects. More...
struct  lat::MultiMethod::Member
 Description of a member belonging to the multi-method. More...
struct  lat::MultiMethod::Score
 Method scoring information. More...
struct  lat::MultiMethod::ScoreHunk
 A hunk of Score objects. More...
class  lat::MultiMethod_1_0< R, V1 >
class  lat::MultiMethod_1_1< R, V1, T1 >
class  lat::MultiMethod_1_2< R, V1, T1, T2 >
class  lat::MultiMethod_2_0< R, V1, V2 >
class  lat::MultiMethod_2_1< R, V1, V2, T1 >
class  lat::MultiMethod_2_2< R, V1, V2, T1, T2 >
class  lat::MultiMethod_3_0< R, V1, V2, V3 >
class  lat::MultiMethod_3_1< R, V1, V2, V3, T1 >
class  lat::MultiMethod_3_2< R, V1, V2, V3, T1, T2 >
class  lat::MultiMethodCarrier< NV, NNV, M, R, P >
 Magic class that carries information in its template arguments through MultiMethodStub into the MultiMethodMemberStub_x_y classes. More...
struct  lat::MultiMethodMember< M, P, F, D >
 Class that manages the registration of a multi-method member. More...
struct  lat::MultiMethodMemberStub_1_0< M, V1 >
struct  lat::MultiMethodMemberStub_1_1< M, V1 >
struct  lat::MultiMethodMemberStub_1_2< M, V1 >
struct  lat::MultiMethodMemberStub_2_0< M, V1, V2 >
struct  lat::MultiMethodMemberStub_2_1< M, V1, V2 >
struct  lat::MultiMethodMemberStub_2_2< M, V1, V2 >
struct  lat::MultiMethodMemberStub_3_0< M, V1, V2, V3 >
struct  lat::MultiMethodMemberStub_3_1< M, V1, V2, V3 >
struct  lat::MultiMethodMemberStub_3_2< M, V1, V2, V3 >

Defines

#define MMM_DECLARE(ret, name, proto)   ret mmm_##name proto
#define MMM_DECLARE_STUB(mscope, scope, name, proto, regsym)
#define MMM_DEFUN_FUNC(ret, mscope, name, proto)
#define MMM_DEFUN_METHOD(ret, mscope, scope, name, proto)
#define MMM_SYM(pre, line, post)   CLASSLIB_name3(pre,line,post)
#define MULTIMETHOD_ARGS_1_0(V1)   V1
#define MULTIMETHOD_ARGS_1_1(V1, A1)   V1, A1
#define MULTIMETHOD_ARGS_1_2(V1, A1, A2)   V1, A1, A2
#define MULTIMETHOD_ARGS_2_0(V1, V2)   V1, V2
#define MULTIMETHOD_ARGS_2_1(V1, V2, A1)   V1, V2, A1
#define MULTIMETHOD_ARGS_2_2(V1, V2, A1, A2)   V1, V2, A1, A2
#define MULTIMETHOD_ARGS_3_0(V1, V2, V3)   V1, V2, V3
#define MULTIMETHOD_ARGS_3_1(V1, V2, V3, A1)   V1, V2, V3, A1
#define MULTIMETHOD_ARGS_3_2(V1, V2, V3, A1, A2)   V1, V2, V3, A1, A2
#define MULTIMETHOD_DECLARE(ext, rettype, name, nvirt, nnonvirt, args)
#define MULTIMETHOD_DEFINE(scope, name)

Functions

template<class M, class R, class V1, class V2, class V3, class A1, class A2>
MultiMethodMemberStub_3_2< M,
V1, V2, V3 > * 
lat::MultiMethodStub (MultiMethodCarrier< 3, 2, M, R, R(*)(V1 *, V2 *, V3 *, A1, A2)> *)
template<class M, class R, class V1, class V2, class V3, class A1>
MultiMethodMemberStub_3_1< M,
V1, V2, V3 > * 
lat::MultiMethodStub (MultiMethodCarrier< 3, 1, M, R, R(*)(V1 *, V2 *, V3 *, A1)> *)
template<class M, class R, class V1, class V2, class V3>
MultiMethodMemberStub_3_0< M,
V1, V2, V3 > * 
lat::MultiMethodStub (MultiMethodCarrier< 3, 0, M, R, R(*)(V1 *, V2 *, V3 *)> *)
template<class M, class R, class V1, class V2, class A1, class A2>
MultiMethodMemberStub_2_2< M,
V1, V2 > * 
lat::MultiMethodStub (MultiMethodCarrier< 2, 2, M, R, R(*)(V1 *, V2 *, A1, A2)> *)
template<class M, class R, class V1, class V2, class A1>
MultiMethodMemberStub_2_1< M,
V1, V2 > * 
lat::MultiMethodStub (MultiMethodCarrier< 2, 1, M, R, R(*)(V1 *, V2 *, A1)> *)
template<class M, class R, class V1, class V2>
MultiMethodMemberStub_2_0< M,
V1, V2 > * 
lat::MultiMethodStub (MultiMethodCarrier< 2, 0, M, R, R(*)(V1 *, V2 *)> *)
template<class M, class R, class V1, class A1, class A2>
MultiMethodMemberStub_1_2< M,
V1 > * 
lat::MultiMethodStub (MultiMethodCarrier< 1, 2, M, R, R(*)(V1 *, A1, A2)> *)
template<class M, class R, class V1, class A1>
MultiMethodMemberStub_1_1< M,
V1 > * 
lat::MultiMethodStub (MultiMethodCarrier< 1, 1, M, R, R(*)(V1 *, A1)> *)
template<class M, class R, class V1>
MultiMethodMemberStub_1_0< M,
V1 > * 
lat::MultiMethodStub (MultiMethodCarrier< 1, 0, M, R, R(*)(V1 *)> *)


Define Documentation

#define MMM_DECLARE ( ret,
name,
proto   )     ret mmm_##name proto

Definition at line 73 of file MultiMethod.h.

#define MMM_DECLARE_STUB ( mscope,
scope,
name,
proto,
regsym   ) 

Value:

static lat::MultiMethodMember< mscope name##Type,proto, \
        &scope mmm_##name, &mscope name##Def> regsym

Definition at line 74 of file MultiMethod.h.

#define MMM_DEFUN_FUNC ( ret,
mscope,
name,
proto   ) 

Value:

ret mmm_##name proto;                                           \
    MMM_DECLARE_STUB(mscope,::,name,ret (*) proto,                      \
                     MMM_SYM(name,Init,__LINE__));                      \
    ret mmm_##name proto

Definition at line 81 of file MultiMethod.h.

#define MMM_DEFUN_METHOD ( ret,
mscope,
scope,
name,
proto   ) 

Value:

MMM_DECLARE_STUB(mscope,scope,name,ret (*) proto,                       \
                     MMM_SYM(name,Init,__LINE__));                      \
    ret scope mmm_##name proto

Definition at line 77 of file MultiMethod.h.

#define MMM_SYM ( pre,
line,
post   )     CLASSLIB_name3(pre,line,post)

Definition at line 72 of file MultiMethod.h.

#define MULTIMETHOD_ARGS_1_0 ( V1   )     V1

Definition at line 50 of file MultiMethod.h.

#define MULTIMETHOD_ARGS_1_1 ( V1,
A1   )     V1, A1

Definition at line 51 of file MultiMethod.h.

#define MULTIMETHOD_ARGS_1_2 ( V1,
A1,
A2   )     V1, A1, A2

Definition at line 52 of file MultiMethod.h.

#define MULTIMETHOD_ARGS_2_0 ( V1,
V2   )     V1, V2

Definition at line 53 of file MultiMethod.h.

#define MULTIMETHOD_ARGS_2_1 ( V1,
V2,
A1   )     V1, V2, A1

Definition at line 54 of file MultiMethod.h.

#define MULTIMETHOD_ARGS_2_2 ( V1,
V2,
A1,
A2   )     V1, V2, A1, A2

Definition at line 55 of file MultiMethod.h.

#define MULTIMETHOD_ARGS_3_0 ( V1,
V2,
V3   )     V1, V2, V3

Definition at line 56 of file MultiMethod.h.

#define MULTIMETHOD_ARGS_3_1 ( V1,
V2,
V3,
A1   )     V1, V2, V3, A1

Definition at line 57 of file MultiMethod.h.

#define MULTIMETHOD_ARGS_3_2 ( V1,
V2,
V3,
A1,
A2   )     V1, V2, V3, A1, A2

Definition at line 58 of file MultiMethod.h.

#define MULTIMETHOD_DECLARE ( ext,
rettype,
name,
nvirt,
nnonvirt,
args   ) 

Value:

ext lat::MultiMethod::Definition name ## Def;                   \
    typedef lat::MultiMethod_##nvirt##_##nnonvirt<                      \
      rettype, MULTIMETHOD_ARGS_##nvirt##_##nnonvirt args               \
    > name##Type;                                                       \
    ext name##Type name

Definition at line 60 of file MultiMethod.h.

#define MULTIMETHOD_DEFINE ( scope,
name   ) 

Value:

lat::MultiMethod::Definition scope name ## Def =                \
      { #name, 0, false, false, 0, 0, 0, { 0, 0, 0 }, 0, 0, 0, 0, 0 };  \
    scope name ## Type scope name (&name ##Def)

Definition at line 67 of file MultiMethod.h.


Generated on Tue Jun 9 17:54:16 2009 for CMSSW by  doxygen 1.5.4