00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __VOP_CodeVarMapper_h__
00015 #define __VOP_CodeVarMapper_h__
00016
00017 #include "VOP_API.h"
00018 #include <UT/UT_PtrArray.h>
00019 #include <UT/UT_RefArray.h>
00020 #include "VOP_Language.h"
00021
00022 class UT_SymbolTable;
00023 class VOP_Node;
00024
00025 class VOP_API VOP_CodeVarMapperEntry
00026 {
00027 public:
00028 VOP_CodeVarMapperEntry(VOP_Node *vop);
00029 ~VOP_CodeVarMapperEntry();
00030
00031 void addOutputVariable(const char *codevar,
00032 const char *var,
00033 int index,
00034 VOP_Type vextype,
00035 bool outonly);
00036 const char *getOutputVariableCodeName(int index) const;
00037 const char *getOutputVariableName(int index) const;
00038 VOP_Type getOutputVariableType(int index) const;
00039 bool getDeclareOutputVariable(int index) const;
00040 int getNumEntries() const;
00041 VOP_Node *getVop() const;
00042
00043 private:
00044 void clear();
00045
00046 UT_PtrArray<char *> myOutputVariableCodeNames;
00047 UT_PtrArray<char *> myOutputVariableNames;
00048 UT_RefArray<VOP_Type> myOutputVariableTypes;
00049 UT_RefArray<bool> myDeclareOutputVariables;
00050 VOP_Node *myVop;
00051
00052 friend class VOP_CodeVarMapper;
00053 };
00054
00055 class VOP_API VOP_CodeVarMapper
00056 {
00057 public:
00058 VOP_CodeVarMapper();
00059 ~VOP_CodeVarMapper();
00060
00061 VOP_CodeVarMapperEntry *findOrAddEntry(VOP_Node *node);
00062 VOP_CodeVarMapperEntry *findEntry(VOP_Node *node) const;
00063 const VOP_CodeVarMapperEntry *getEntry(int idx) const;
00064 int getNumEntries() const;
00065
00066 private:
00067 UT_PtrArray<VOP_CodeVarMapperEntry *> myMapEntries;
00068 };
00069
00070 class VOP_API VOP_CodeVarLookupData
00071 {
00072 public:
00073 VOP_CodeVarLookupData(VOP_Node *vop,
00074 UT_SymbolTable &varTable,
00075 UT_SymbolTable &localVarTable,
00076 VOP_CodeVarMapper &varMapper,
00077 VOP_CodeVarMapperEntry *varMapperEntry)
00078 : myVop(vop), myVarTable(varTable),
00079 myLocalVarTable(localVarTable), myVarMapper(varMapper),
00080 myVarMapperEntry(varMapperEntry), myDoingOuterCode(true)
00081 { }
00082 ~VOP_CodeVarLookupData()
00083 { }
00084
00085 VOP_Node *myVop;
00086 UT_SymbolTable &myVarTable;
00087 UT_SymbolTable &myLocalVarTable;
00088 VOP_CodeVarMapper &myVarMapper;
00089 VOP_CodeVarMapperEntry *myVarMapperEntry;
00090 bool myDoingOuterCode;
00091 };
00092
00093 #endif