00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef HxSadGenerator_h
00012 #define HxSadGenerator_h
00013
00014 #include "map"
00015
00016 #include "HxStd.h"
00017 #include "HxString.h"
00018
00019 class ostream;
00020 class HxRegKey;
00021 class HxRegistry;
00022
00023 class HxSadClassInfo;
00024 class HxSadArgInfo;
00025
00026 typedef HxSadArgInfo* HxSadArgInfoPtr;
00027 typedef HxSadClassInfo* HxSadClassInfoPtr;
00028
00029 class HxSadGenerator
00030 {
00031 public:
00032
00033 static HxSadGenerator& instance();
00034
00035 void setRegistry(const HxRegistry&);
00036 void generate(ostream&, HxString label);
00037
00038 ~HxSadGenerator();
00039 private:
00040 HxSadGenerator();
00041 HxSadGenerator(const HxSadGenerator&);
00042
00043 friend class HxSadGeneratorFriend;
00044
00045 void loadArgDefs();
00046 void generateArgIncludes(ostream&);
00047
00048 void genClassMethods(ostream&, const HxRegKey*);
00049
00050 void genCtor(
00051 ostream&, const HxRegKey* classKey,
00052 const HxRegKey* methodKey);
00053 void genNamedStatic(
00054 ostream&, const HxRegKey* classKey,
00055 const HxRegKey* methodKey);
00056 void genVoidStatic(
00057 ostream&, const HxRegKey* classKey,
00058 const HxRegKey* methodKey);
00059 void genStatic(
00060 ostream&, const HxRegKey* classKey,
00061 const HxRegKey* methodKey,
00062 HxBool isVoid = hxFalse,
00063 HxBool isNamed = hxFalse);
00064 void genNamedMethod(
00065 ostream&, const HxRegKey* classKey,
00066 const HxRegKey* methodKey);
00067 void genVoidMethod(
00068 ostream&, const HxRegKey* classKey,
00069 const HxRegKey* methodKey);
00070 void genMethod(
00071 ostream&, const HxRegKey* classKey,
00072 const HxRegKey* methodKey,
00073 HxBool isVoid = hxFalse,
00074 HxBool isNamed = hxFalse);
00075
00076 void genLocalArgs(ostream&, const HxRegKey* methodKey);
00077 void genActualArgs(ostream&, int nArgs);
00078
00079 const HxRegistry* _registry;
00080
00081
00082 typedef map<HxString, HxSadArgInfoPtr, less<HxString> >
00083 HxSadArgInfoMap;
00084
00085 typedef map<HxString, HxSadClassInfoPtr, less<HxString> >
00086 HxSadClassInfoMap;
00087
00088 HxSadClassInfo* getHxSadClassInfo(HxString className);
00089
00090 HxSadArgInfoMap argInfoMap;
00091 HxSadClassInfoMap classInfoMap;
00092 };
00093
00094 #endif