00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00030
00031 #ifndef ARMAGETRON_vRegistry_h
00032 #define ARMAGETRON_vRegistry_h
00033
00034 #include <vector>
00035
00036 #include "values/vCore.h"
00037
00038 namespace vValue {
00039 namespace Registry {
00040 namespace ctor {
00041 typedef Expr::Base *a0();
00042 typedef Expr::Base *a1(BasePtr);
00043 typedef Expr::Base *a2(BasePtr, BasePtr);
00044 typedef Expr::Base *a3(BasePtr, BasePtr, BasePtr);
00045 typedef Expr::Base *a4(BasePtr, BasePtr, BasePtr, BasePtr);
00046 typedef Expr::Base *a5(BasePtr, BasePtr, BasePtr, BasePtr, BasePtr);
00047 }
00048
00049 class Registration {
00050 public:
00051 typedef void (*fptr)();
00052 private:
00053 std::vector<tString> m_flags;
00054 tString m_fname;
00055 int m_argc;
00056 fptr m_ctor;
00057 public:
00058 Registration(std::vector<tString> flags, tString fname, int argc, fptr ctor);
00059 Registration(const char *flags, const char *fname, int argc, fptr ctor);
00060 Expr::
00061 Base *use(arglist);
00062 bool match(std::vector<tString> flags, tString fname, int argc);
00063 };
00064
00065 class Registry {
00066 std::vector<Registration *> registrations;
00067 public:
00068 void reg(Registration *me);
00069 Expr::
00070 Base *create(std::vector<tString> flags, tString fname, arglist);
00071
00073 static Registry & theRegistry();
00074 };
00075
00076 }
00077 }
00078
00079 #endif