mummy
1.0.2
|
00001 //---------------------------------------------------------------------------- 00002 // MummyCsharpGenerator.h 00003 // 00004 // Author(s) : David Cole 00005 // 00006 // Copyright (C) 2006-2008 Kitware, Inc. 00007 //---------------------------------------------------------------------------- 00008 00009 #ifndef _MummyCsharpGenerator_h_ 00010 #define _MummyCsharpGenerator_h_ 00011 00012 #include "MummyGenerator.h" // parent class 00013 00014 #include "gxsys/stl/map" 00015 #include "gxsys/stl/string" 00016 #include "gxsys/stl/vector" 00017 00018 class MummyCsharpGenerator : public MummyGenerator 00019 { 00020 public: 00021 MummyCsharpGenerator(); 00022 virtual ~MummyCsharpGenerator(); 00023 00024 virtual void SetTargetClass(const cable::Class *c); 00025 virtual void CacheExternalHints(const gxsys_stl::string& hintsfile); 00026 00027 virtual void AddTargetInterface(const gxsys_stl::string& iface); 00028 virtual bool HasTargetInterface(const char *iface) const; 00029 00030 virtual bool IsKeyword(const char *p); 00031 virtual bool IsReservedMethodName(const gxsys_stl::string &name); 00032 virtual gxsys_stl::string GetFundamentalTypeString(const cable::Type *t); 00033 virtual gxsys_stl::string GetWrappedMethodName(const cable::Method *m); 00034 virtual gxsys_stl::string GetMethodArgumentArraySize(const cable::Class *c, const cable::Method *m, const cable::FunctionType *ft, unsigned int i); 00035 virtual gxsys_stl::string GetMethodSignature(const cable::Class *c, const cable::Method *m); 00036 virtual const char *GetArgName(cable::FunctionType *ftype, unsigned int i); 00037 virtual bool GetIsRefArg(const cable::Type *t); 00038 virtual gxsys_stl::string GetPInvokeTypeString(const cable::Type *t, bool forReturn, bool isArray, bool forDelegate); 00039 virtual gxsys_stl::string GetCSharpTypeString(const cable::Type *t, bool forReturn, bool isArray); 00040 virtual void ClearLookupEntries(); 00041 virtual void AddLookupEntries(const cable::Class* c); 00042 virtual void DumpLookupEntries(); 00043 virtual bool OtherMethodRedefined(const gxsys_stl::string &signature); 00044 virtual bool StaticMethodRedefined(const gxsys_stl::string &signature); 00045 virtual bool VirtualMethodOverridden(const gxsys_stl::string &signature); 00046 virtual bool WrappedMethodExists(const gxsys_stl::string &signature); 00047 virtual bool WrappedEnumExists(const gxsys_stl::string &name); 00048 00049 virtual bool FundamentalTypeIsWrappable(const cable::Type* t); 00050 virtual bool TypeIsWrappable(const cable::Type* t); 00051 virtual bool FunctionTypeIsWrappable(const cable::FunctionType* ft); 00052 virtual bool MethodWrappableAsEvent(const cable::Method* m, const cable::Context::Access& access); 00053 virtual bool MethodIsWrappable(const cable::Method* m, const cable::Context::Access& access); 00054 virtual bool ClassIsWrappable(const cable::Class* c); 00055 virtual const cable::Class* GetWrappableParentClass(const cable::Class *c); 00056 00057 virtual bool IsFactoryMethod(const cable::Class *c, const cable::Method *m); 00058 virtual bool IsDisposalMethod(const cable::Class *c, const cable::Method *m); 00059 virtual bool MethodReturnValueIsCounted(const cable::Class *c, const cable::Method *m); 00060 virtual gxsys_stl::string GetExportLayerFunctionName(const cable::Class *c, const cable::Method *m, const gxsys_stl::string& mname); 00061 virtual void EmitCSharpMethodDeclaration(gxsys_ios::ostream &os, const cable::Class *c, const cable::Method *m, bool asProperty, bool useArg0AsReturn, const gxsys_stl::string& accessLevel); 00062 virtual void EmitCSharpDllImportDeclaration(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c, const cable::Method *m, const gxsys_stl::string& mname, const char *f, bool emitExceptionParams); 00063 virtual void EmitCSharpProperty(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c, const cable::Method *propGetMethod, const cable::Method *propSetMethod, bool emitExceptionParams); 00064 virtual void EmitCSharpMethodBody(gxsys_ios::ostream &os, unsigned int indent, const cable::Class *c, const cable::Method *m, gxsys_stl::string& f, const char *impliedArg0, bool emitExceptionParams); 00065 virtual void EmitCSharpMethod(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c, const cable::Method *m, const gxsys_stl::string& mname, const gxsys_stl::string& accessLevel, bool emitExceptionParams); 00066 virtual void EmitCSharpEvent(gxsys_ios::ostream& os, const char *dllname, const cable::Class* c, const cable::Method* m, const gxsys_stl::string& eventName); 00067 virtual void EmitCSharpEnums(gxsys_ios::ostream &os, const cable::Class *c); 00068 virtual void EmitCSharpConstructor(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c, const cable::Method *m, const gxsys_stl::string& mname, bool emitExceptionParams); 00069 virtual void EmitCSharpRegister(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c, const cable::Method *m, const gxsys_stl::string& mname, bool emitExceptionParams); 00070 virtual void EmitCSharpDispose(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c, const cable::Method *m, const gxsys_stl::string& mname, const unsigned int eventCount, bool emitExceptionParams); 00071 virtual void EmitCSharpWrapperClassAsStruct(gxsys_ios::ostream &os, const cable::Class *c); 00072 virtual void GatherWrappedMethods( 00073 const cable::Class *c, 00074 gxsys_stl::vector<cable::Method*>& wrapped_methods, 00075 cable::Method*& factoryM, 00076 cable::Method*& disposalM, 00077 cable::Method*& registerM, 00078 cable::Method*& unRegisterM, 00079 bool includeParentMethods 00080 ); 00081 virtual bool ValidateWrappedMethods( 00082 const cable::Class *c, 00083 gxsys_stl::vector<cable::Method*>& wrapped_methods, 00084 cable::Method*& factoryM, 00085 cable::Method*& disposalM, 00086 cable::Method*& registerM, 00087 cable::Method*& unRegisterM 00088 ); 00089 virtual void BuildPropGetsAndSetsMap( 00090 gxsys_stl::vector<cable::Method*>& wrapped_methods, 00091 gxsys_stl::map<gxsys_stl::string, gxsys_stl::pair<cable::Method*, cable::Method*> >& wrapped_properties 00092 ); 00093 virtual void EmitCSharpWrapperClass(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c); 00094 00095 protected: 00096 // Provide implementation for inherited pure virtuals: 00097 virtual bool GenerateWrappers(); 00098 00099 private: 00100 unsigned int CurrentMethodId; 00101 unsigned int ClassLineNumber; 00102 gxsys_stl::map<const cable::Method*, unsigned int> MethodIdMap; 00103 gxsys_stl::string TargetInterface; 00104 gxsys_stl::map<const gxsys_stl::string, gxsys_stl::string> HintsMap; 00105 00106 MummyCsharpGenerator(const MummyCsharpGenerator&); //Not implemented 00107 MummyCsharpGenerator& operator=(const MummyCsharpGenerator&); //Not implemented 00108 }; 00109 00110 #endif