mummy  1.0.2
MummySettings.h
Go to the documentation of this file.
00001 //----------------------------------------------------------------------------
00002 // MummySettings.h
00003 //
00004 // Author(s) : David Cole
00005 //
00006 // Copyright (C) 2006-2007 Kitware, Inc.
00007 //----------------------------------------------------------------------------
00008 
00009 #include "MummyUtilities.h" // first mummy include for root classes
00010 
00011 #include "gxsys/stl/string"
00012 #include "gxsys/stl/vector"
00013 
00014 class MummySettingsInternals;
00015 
00016 namespace cable
00017 {
00018   class Class;
00019   class SourceRepresentation;
00020 }
00021 
00022 namespace gxsys
00023 {
00024   class CommandLineArguments;
00025 }
00026 
00027 
00028 //----------------------------------------------------------------------------
00029 class ClassWrappingSettings
00030 {
00031 public:
00032   gxsys_stl::string name;
00033   gxsys_stl::string pattern;
00034   gxsys_stl::string sortkey;
00035   gxsys_stl::string defaultFactoryMethod;
00036   bool emitDefaultFactoryMethod;
00037   gxsys_stl::string countedMethodsRegex;
00038   gxsys_stl::string defaultDisposalMethod;
00039   bool shadow;
00040   gxsys_stl::string externalHints;
00041   gxsys_stl::string extraExportLayerCode;
00042   gxsys_stl::string extraCsharpCode;
00043   gxsys_stl::string extraCsharpUnitTestCode;
00044   gxsys_stl::string csharpConstructorModifier;
00045   gxsys_stl::string registerMethod;
00046   gxsys_stl::string unRegisterMethod;
00047   gxsys_stl::string getRefCountMethod;
00048   gxsys_stl::string registerBaseClass;
00049   gxsys_stl::string registerInclude;
00050   gxsys_stl::string getMummyTypeEntryMethod;
00051   gxsys_stl::string setMummyTypeEntryMethod;
00052   bool excludeMarkedLines;
00053   gxsys_stl::string beginExcludeRegex;
00054   gxsys_stl::string endExcludeRegex;
00055   bool partialClass;
00056   gxsys_stl::string exceptionBaseClass;
00057   gxsys_stl::string exceptionCloneMethod;
00058   gxsys_stl::string exceptionInclude;
00059   gxsys_stl::string wrappedObjectBase;
00060 
00061   ClassWrappingSettings(
00062     gxsys_stl::string nm = gxsys_stl::string(""),
00063     gxsys_stl::string pat = gxsys_stl::string(""),
00064     gxsys_stl::string sk = gxsys_stl::string(""),
00065     gxsys_stl::string fm = gxsys_stl::string(""),
00066     bool edfm = false,
00067     gxsys_stl::string cmr = gxsys_stl::string(""),
00068     gxsys_stl::string dm = gxsys_stl::string(""),
00069     bool sh = false,
00070     gxsys_stl::string exH = gxsys_stl::string(""),
00071     gxsys_stl::string exEL = gxsys_stl::string(""),
00072     gxsys_stl::string exCS = gxsys_stl::string(""),
00073     gxsys_stl::string exCSUT = gxsys_stl::string(""),
00074     gxsys_stl::string csCM = gxsys_stl::string(""),
00075     gxsys_stl::string rm = gxsys_stl::string(""),
00076     gxsys_stl::string um = gxsys_stl::string(""),
00077     gxsys_stl::string grcm = gxsys_stl::string(""),
00078     gxsys_stl::string rbc = gxsys_stl::string(""),
00079     gxsys_stl::string ri = gxsys_stl::string(""),
00080     gxsys_stl::string gmtem = gxsys_stl::string(""),
00081     gxsys_stl::string smtem = gxsys_stl::string(""),
00082     bool eml = false,
00083     gxsys_stl::string ber = gxsys_stl::string(""),
00084     gxsys_stl::string eer = gxsys_stl::string(""),
00085     bool partial = false,
00086     gxsys_stl::string ebc = gxsys_stl::string(""),
00087     gxsys_stl::string ecm = gxsys_stl::string(""),
00088     gxsys_stl::string ei = gxsys_stl::string(""),
00089     gxsys_stl::string wob = gxsys_stl::string("")
00090     ) :
00091     name(nm),
00092     pattern(pat),
00093     sortkey(sk),
00094     defaultFactoryMethod(fm),
00095     emitDefaultFactoryMethod(edfm),
00096     countedMethodsRegex(cmr),
00097     defaultDisposalMethod(dm),
00098     shadow(sh),
00099     externalHints(exH),
00100     extraExportLayerCode(exEL),
00101     extraCsharpCode(exCS),
00102     extraCsharpUnitTestCode(exCSUT),
00103     csharpConstructorModifier(csCM),
00104     registerMethod(rm),
00105     unRegisterMethod(um),
00106     getRefCountMethod(grcm),
00107     registerBaseClass(rbc),
00108     registerInclude(ri),
00109     getMummyTypeEntryMethod(gmtem),
00110     setMummyTypeEntryMethod(smtem),
00111     excludeMarkedLines(eml),
00112     beginExcludeRegex(ber),
00113     endExcludeRegex(eer),
00114     partialClass(partial),
00115     exceptionBaseClass(ebc),
00116     exceptionCloneMethod(ecm),
00117     exceptionInclude(ei),
00118     wrappedObjectBase(wob)
00119   {
00120   }
00121 };
00122 
00123 
00124 //----------------------------------------------------------------------------
00125 class MummySettings
00126 {
00127 public:
00128   MummySettings();
00129   virtual ~MummySettings();
00130 
00131   virtual int Initialize(int argc, char *argv[]);
00132 
00133   virtual int ParseSettingsFile(const char *filename);
00134   virtual int ProcessSource(cable::SourceRepresentation* sr);
00135 
00136   static int DisplayHelp(const char* argument, const char* value, void* call_data);
00137   static int DisplayVersion(const char* argument, const char* value, void* call_data);
00138 
00139   virtual const char *GetSettingsFileName();
00140   virtual const char *GetCsharpFileName();
00141   virtual const char *GetExportLayerFileName();
00142   virtual const char *GetCsharpUnitTestFileName();
00143   virtual const char *GetGccxmlFileName();
00144   virtual const char *GetGroup();
00145   virtual const char *GetHeader();
00146   virtual const char *GetPackage();
00147   virtual const char *GetPackageVersion();
00148   virtual bool ShouldRun();
00149   virtual bool GetVerbose();
00150   virtual gxsys_stl::string GetMummyVersion();
00151 
00152   virtual void AddUnwrappableClass(const ClassWrappingSettings &cws);
00153   virtual void AddWrappableClass(const ClassWrappingSettings &cws);
00154   virtual void AddUnwrappablePattern(const ClassWrappingSettings &cws);
00155   virtual void AddWrappablePattern(const ClassWrappingSettings &cws);
00156   virtual bool FindClassWrappingSettings(const char *name, ClassWrappingSettings* cws);
00157 
00158   virtual void AddReference(const char *name);
00159   virtual void GetReferences(gxsys_stl::vector<gxsys_stl::string>& references);
00160 
00161   virtual bool ClassIsWrappable(const cable::Class *c);
00162 
00163   virtual gxsys_stl::string GetCsharpFileName(const cable::Class* c);
00164   virtual gxsys_stl::string GetExportLayerFileName(const cable::Class* c);
00165   virtual gxsys_stl::string GetCsharpUnitTestFileName(const cable::Class* c);
00166   virtual gxsys_stl::string GetCsharpConstructorModifier(const cable::Class* c);
00167   virtual gxsys_stl::string GetFactoryMethod(const cable::Class* c);
00168   virtual bool GetEmitDefaultFactoryMethod(const cable::Class* c);
00169   virtual gxsys_stl::string GetCountedMethodsRegex(const cable::Class* c);
00170   virtual gxsys_stl::string GetDisposalMethod(const cable::Class* c);
00171   virtual bool GetUseShadow(const cable::Class* c);
00172   virtual gxsys_stl::string GetExternalHints(const cable::Class* c);
00173   virtual gxsys_stl::string GetExtraCsharpCode(const cable::Class* c);
00174   virtual gxsys_stl::string GetExtraExportLayerCode(const cable::Class* c);
00175   virtual gxsys_stl::string GetExtraCsharpUnitTestCode(const cable::Class* c);
00176   virtual gxsys_stl::string GetRegisterMethod(const cable::Class* c);
00177   virtual gxsys_stl::string GetUnRegisterMethod(const cable::Class* c);
00178   virtual gxsys_stl::string GetRegisterBaseClass(const cable::Class* c);
00179   virtual gxsys_stl::string GetRegisterInclude(const cable::Class* c);
00180   virtual bool GetPartialClass(const cable::Class* c);
00181 
00182 private:
00183   void AddArgumentHandlers(gxsys::CommandLineArguments& arguments);
00184   void Reset();
00185 
00186   MummySettingsInternals *Internals;
00187 };