mummy  1.0.3
MummyCsharpGenerator.h
Go to the documentation of this file.
1 //----------------------------------------------------------------------------
2 // MummyCsharpGenerator.h
3 //
4 // Author(s) : David Cole
5 //
6 // Copyright (C) 2006-2008 Kitware, Inc.
7 //----------------------------------------------------------------------------
8 
9 #ifndef _MummyCsharpGenerator_h_
10 #define _MummyCsharpGenerator_h_
11 
12 #include "MummyGenerator.h" // parent class
13 
14 #include "gxsys/stl/map"
15 #include "gxsys/stl/string"
16 #include "gxsys/stl/vector"
17 
19 {
20 public:
22  virtual ~MummyCsharpGenerator();
23 
24  virtual void SetTargetClass(const cable::Class *c);
25  virtual void CacheExternalHints(const gxsys_stl::string& hintsfile);
26 
27  virtual void AddTargetInterface(const gxsys_stl::string& iface);
28  virtual bool HasTargetInterface(const char *iface) const;
29 
30  virtual bool IsKeyword(const char *p);
31  virtual bool IsReservedMethodName(const gxsys_stl::string &name);
32  virtual gxsys_stl::string GetFundamentalTypeString(const cable::Type *t);
33  virtual gxsys_stl::string GetWrappedMethodName(const cable::Method *m);
34  virtual gxsys_stl::string GetMethodArgumentArraySize(const cable::Class *c, const cable::Method *m, const cable::FunctionType *ft, unsigned int i);
35  virtual gxsys_stl::string GetMethodSignature(const cable::Class *c, const cable::Method *m);
36  virtual const char *GetArgName(cable::FunctionType *ftype, unsigned int i);
37  virtual bool GetIsRefArg(const cable::Type *t);
38  virtual gxsys_stl::string GetPInvokeTypeString(const cable::Type *t, bool forReturn, bool isArray, bool forDelegate);
39  virtual gxsys_stl::string GetCSharpTypeString(const cable::Type *t, bool forReturn, bool isArray);
40  virtual void ClearLookupEntries();
41  virtual void AddLookupEntries(const cable::Class* c);
42  virtual void DumpLookupEntries();
43  virtual bool OtherMethodRedefined(const gxsys_stl::string &signature);
44  virtual bool StaticMethodRedefined(const gxsys_stl::string &signature);
45  virtual bool VirtualMethodOverridden(const gxsys_stl::string &signature);
46  virtual bool WrappedMethodExists(const gxsys_stl::string &signature);
47  virtual bool WrappedEnumExists(const gxsys_stl::string &name);
48 
49  virtual bool FundamentalTypeIsWrappable(const cable::Type* t);
50  virtual bool TypeIsWrappable(const cable::Type* t);
51  virtual bool FunctionTypeIsWrappable(const cable::FunctionType* ft);
52  virtual bool MethodWrappableAsEvent(const cable::Method* m, const cable::Context::Access& access);
53  virtual bool MethodIsWrappable(const cable::Method* m, const cable::Context::Access& access);
54  virtual bool ClassIsWrappable(const cable::Class* c);
55  virtual const cable::Class* GetWrappableParentClass(const cable::Class *c);
56 
57  virtual bool IsFactoryMethod(const cable::Class *c, const cable::Method *m);
58  virtual bool IsDisposalMethod(const cable::Class *c, const cable::Method *m);
59  virtual bool MethodReturnValueIsCounted(const cable::Class *c, const cable::Method *m);
60  virtual gxsys_stl::string GetExportLayerFunctionName(const cable::Class *c, const cable::Method *m, const gxsys_stl::string& mname);
61  virtual void EmitCSharpMethodDeclaration(gxsys_ios::ostream &os, const cable::Class *c, const cable::Method *m, bool asProperty, bool useArg0AsReturn, const gxsys_stl::string& accessLevel);
62  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);
63  virtual void EmitCSharpProperty(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c, const cable::Method *propGetMethod, const cable::Method *propSetMethod, bool emitExceptionParams);
64  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);
65  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);
66  virtual void EmitCSharpEvent(gxsys_ios::ostream& os, const char *dllname, const cable::Class* c, const cable::Method* m, const gxsys_stl::string& eventName);
67  virtual void EmitCSharpEnums(gxsys_ios::ostream &os, const cable::Class *c);
68  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);
69  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);
70  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);
71  virtual void EmitCSharpWrapperClassAsStruct(gxsys_ios::ostream &os, const cable::Class *c);
72  virtual void GatherWrappedMethods(
73  const cable::Class *c,
74  gxsys_stl::vector<cable::Method*>& wrapped_methods,
75  cable::Method*& factoryM,
76  cable::Method*& disposalM,
77  cable::Method*& registerM,
78  cable::Method*& unRegisterM,
79  bool includeParentMethods
80  );
81  virtual bool ValidateWrappedMethods(
82  const cable::Class *c,
83  gxsys_stl::vector<cable::Method*>& wrapped_methods,
84  cable::Method*& factoryM,
85  cable::Method*& disposalM,
86  cable::Method*& registerM,
87  cable::Method*& unRegisterM
88  );
89  virtual void BuildPropGetsAndSetsMap(
90  gxsys_stl::vector<cable::Method*>& wrapped_methods,
91  gxsys_stl::map<gxsys_stl::string, gxsys_stl::pair<cable::Method*, cable::Method*> >& wrapped_properties
92  );
93  virtual void EmitCSharpWrapperClass(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c);
94 
95 protected:
96  // Provide implementation for inherited pure virtuals:
97  virtual bool GenerateWrappers();
98 
99 private:
100  unsigned int CurrentMethodId;
101  unsigned int ClassLineNumber;
102  gxsys_stl::map<const cable::Method*, unsigned int> MethodIdMap;
103  gxsys_stl::string TargetInterface;
104  gxsys_stl::map<const gxsys_stl::string, gxsys_stl::string> HintsMap;
105 
106  MummyCsharpGenerator(const MummyCsharpGenerator&); //Not implemented
107  MummyCsharpGenerator& operator=(const MummyCsharpGenerator&); //Not implemented
108 };
109 
110 #endif
virtual void CacheExternalHints(const gxsys_stl::string &hintsfile)
virtual bool WrappedEnumExists(const gxsys_stl::string &name)
virtual void AddLookupEntries(const cable::Class *c)
virtual const char * GetArgName(cable::FunctionType *ftype, unsigned int i)
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)
virtual bool WrappedMethodExists(const gxsys_stl::string &signature)
virtual void EmitCSharpMethodDeclaration(gxsys_ios::ostream &os, const cable::Class *c, const cable::Method *m, bool asProperty, bool useArg0AsReturn, const gxsys_stl::string &accessLevel)
virtual gxsys_stl::string GetExportLayerFunctionName(const cable::Class *c, const cable::Method *m, const gxsys_stl::string &mname)
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)
virtual void EmitCSharpWrapperClassAsStruct(gxsys_ios::ostream &os, const cable::Class *c)
virtual gxsys_stl::string GetMethodSignature(const cable::Class *c, const cable::Method *m)
virtual bool TypeIsWrappable(const cable::Type *t)
virtual bool VirtualMethodOverridden(const gxsys_stl::string &signature)
virtual bool IsDisposalMethod(const cable::Class *c, const cable::Method *m)
virtual bool MethodIsWrappable(const cable::Method *m, const cable::Context::Access &access)
virtual gxsys_stl::string GetWrappedMethodName(const cable::Method *m)
virtual void EmitCSharpWrapperClass(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c)
virtual const cable::Class * GetWrappableParentClass(const cable::Class *c)
virtual void EmitCSharpEnums(gxsys_ios::ostream &os, const cable::Class *c)
gxsys_stl::map< const gxsys_stl::string, gxsys_stl::string > HintsMap
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)
virtual bool ValidateWrappedMethods(const cable::Class *c, gxsys_stl::vector< cable::Method * > &wrapped_methods, cable::Method *&factoryM, cable::Method *&disposalM, cable::Method *&registerM, cable::Method *&unRegisterM)
virtual void SetTargetClass(const cable::Class *c)
Set the current target class.
gxsys_stl::map< const cable::Method *, unsigned int > MethodIdMap
virtual void AddTargetInterface(const gxsys_stl::string &iface)
virtual gxsys_stl::string GetMethodArgumentArraySize(const cable::Class *c, const cable::Method *m, const cable::FunctionType *ft, unsigned int i)
virtual void BuildPropGetsAndSetsMap(gxsys_stl::vector< cable::Method * > &wrapped_methods, gxsys_stl::map< gxsys_stl::string, gxsys_stl::pair< cable::Method *, cable::Method * > > &wrapped_properties)
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)
virtual bool FunctionTypeIsWrappable(const cable::FunctionType *ft)
virtual bool HasTargetInterface(const char *iface) const
virtual gxsys_stl::string GetFundamentalTypeString(const cable::Type *t)
virtual gxsys_stl::string GetCSharpTypeString(const cable::Type *t, bool forReturn, bool isArray)
virtual bool ClassIsWrappable(const cable::Class *c)
virtual bool StaticMethodRedefined(const gxsys_stl::string &signature)
virtual gxsys_stl::string GetPInvokeTypeString(const cable::Type *t, bool forReturn, bool isArray, bool forDelegate)
virtual bool MethodReturnValueIsCounted(const cable::Class *c, const cable::Method *m)
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)
virtual void GatherWrappedMethods(const cable::Class *c, gxsys_stl::vector< cable::Method * > &wrapped_methods, cable::Method *&factoryM, cable::Method *&disposalM, cable::Method *&registerM, cable::Method *&unRegisterM, bool includeParentMethods)
virtual bool MethodWrappableAsEvent(const cable::Method *m, const cable::Context::Access &access)
virtual bool OtherMethodRedefined(const gxsys_stl::string &signature)
virtual bool GetIsRefArg(const cable::Type *t)
Base class for all Mummy generators.
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)
virtual void EmitCSharpEvent(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c, const cable::Method *m, const gxsys_stl::string &eventName)
virtual bool FundamentalTypeIsWrappable(const cable::Type *t)
virtual void EmitCSharpProperty(gxsys_ios::ostream &os, const char *dllname, const cable::Class *c, const cable::Method *propGetMethod, const cable::Method *propSetMethod, bool emitExceptionParams)
virtual bool IsKeyword(const char *p)
MummyCsharpGenerator & operator=(const MummyCsharpGenerator &)
gxsys_stl::string TargetInterface
virtual bool IsReservedMethodName(const gxsys_stl::string &name)
virtual bool IsFactoryMethod(const cable::Class *c, const cable::Method *m)