00001 #ifndef GME_INTERPRETER_H
00002 #define GME_INTERPRETER_H
00003
00004
00005 #include "Builder.h"
00006 #include "Guardian.h"
00007
00008 #define NEW_BON_INVOKE
00009
00010 class CPrimitiveBuilder;
00011 typedef CTypedPtrList<CPtrList, CPrimitiveBuilder*> CPrimitiveList;
00012 class CSignalBuilder;
00013 typedef CTypedPtrList<CPtrList, CSignalBuilder*> CSignalList;
00014 class CParameterBuilder;
00015 typedef CTypedPtrList<CPtrList, CParameterBuilder*> CParameterList;
00016 class CInputParameterBuilder;
00017 typedef CTypedPtrList<CPtrList, CInputParameterBuilder*> CInputParameterList;
00018 typedef CTypedPtrMap<CMapStringToPtr, CString, CPrimitiveBuilder*> CPrimitiveTable;
00019
00020 class CComponent {
00021 public:
00022 CComponent() : focusfolder(NULL) { ; }
00023 CBuilderFolder *focusfolder;
00024 CBuilderFolderList selectedfolders;
00025 void InvokeEx(CBuilder &builder,CBuilderObject *focus, CBuilderObjectList &selected, long param);
00026
00027 protected:
00028 void CheckScriptTypes (CPrimitiveList* primitives);
00029 };
00030
00032
00033 class CProcessingBuilder : public CBuilderModel
00034 {
00035 DECLARE_CUSTOMMODEL(CProcessingBuilder, CBuilderModel)
00036 public:
00037 virtual void Traverse(CPrimitiveList &primitives) { ASSERT(false); }
00038 };
00039
00040 class CCompoundBuilder : public CProcessingBuilder
00041 {
00042 DECLARE_CUSTOMMODEL(CCompoundBuilder, CProcessingBuilder)
00043 public:
00044 void Traverse(CPrimitiveList &primitives);
00045 virtual void Initialize();
00046 };
00047
00048 class CPrimitiveBuilder : public CProcessingBuilder
00049 {
00050 DECLARE_CUSTOMMODEL(CPrimitiveBuilder, CProcessingBuilder)
00051 public:
00052 virtual void Initialize();
00053 ~CPrimitiveBuilder();
00054 protected:
00055 CString actorName;
00056 int priority;
00057 CString script;
00058 int firing;
00059 int id;
00060 int outputPortNo;
00061 int inputPortNo;
00062 CParameterList parameters;
00063 CInputParameterList inputParameters;
00064 static CPrimitiveTable contextTable;
00065 public:
00066 void SetPriority();
00067 void SetScript();
00068 void SetFiring();
00069 void SetActorName();
00070 CString &GetActorName() { return actorName; }
00071 CString &GetScriptName() { return script; }
00072 void SetPorts(const CBuilderAtomList *ports);
00073 void Traverse(CPrimitiveList &primitives);
00074
00075 static void WriteScriptRegs(FILE *fpt);
00076 static void WriteContextDefs(FILE *fpt);
00077 static void WriteScriptProto(FILE *fpt);
00078 void WriteContextDef(FILE *fpt);
00079 void WriteContextCreate(FILE *fpt,bool ext = true);
00080 void WriteSetContext(FILE *fpt);
00081 void WriteActorCreate(FILE *fpt);
00082 void WriteActorConnect(FILE *fpt);
00083 };
00084
00085 class CSignalBuilder : public CBuilderAtom
00086 {
00087 DECLARE_CUSTOMATOM(CSignalBuilder, CBuilderAtom)
00088 friend class CPrimitiveBuilder;
00089 public:
00090 virtual void Initialize() { port = 0; }
00091 protected:
00092 CSignalList connections;
00093 int yloc;
00094 int port;
00095 public:
00096 void AddConnection(CSignalBuilder *signal) { connections.AddTail(signal); }
00097 void IncrementPort() { port++; }
00098 void SetLocation();
00099 };
00100
00101 class CParameterBuilder : public CBuilderAtom
00102 {
00103 DECLARE_CUSTOMATOM(CParameterBuilder, CBuilderAtom)
00104 friend class CPrimitiveBuilder;
00105 public:
00106 virtual void Initialize();
00107 ~CParameterBuilder();
00108 protected:
00109 CString longName;
00110 bool global;
00111 int datatype;
00112 int size;
00113 CString initval;
00114
00115 bool listed;
00116 static CParameterList instances;
00117 public:
00118 int GetDataType (void) { return datatype;}
00119 int GetSize (void) { return size; }
00120 void AddToList();
00121 void WriteContextDef(FILE *fpt,const CString &fieldName);
00122 static void WriteGlobals(FILE *fpt,bool ext = true);
00123 void WriteGlobal(FILE *fpt,bool ext = true);
00124 void WriteContextInit(FILE *fpt,CString &actorName,const CString &fieldName);
00125 };
00126
00127 class CInputParameterBuilder : public CBuilderAtom
00128 {
00129 DECLARE_CUSTOMATOM(CInputParameterBuilder, CBuilderAtom)
00130 friend class CPrimitiveBuilder;
00131 public:
00132 virtual void Initialize();
00133 int GetDataType (void) { return datatype; }
00134 int GetSize (void) { return size; }
00135 protected:
00136 int datatype;
00137 int size;
00138 CParameterBuilder *source;
00139 };
00140
00141 #endif // whole file