GME  13
OCLFactory.h
Go to the documentation of this file.
00001 //###############################################################################################################################################
00002 //
00003 //      Object Constraint Language Generic Manager
00004 //      OCLFactory.h
00005 //
00006 //###############################################################################################################################################
00007 
00008 #ifndef OCLFactory_h
00009 #define OCLFactory_h
00010 
00011 #include "OCLSignature.h"
00012 #include "OCLFeature.h"
00013 
00014 #include <memory>
00015 
00016 namespace OclMeta {
00017         class Type;
00018         class TypeManager;
00019 };
00020 
00021 namespace OclImplementation
00022 {
00023         //##############################################################################################################################################
00024         //
00025         //      T E M P L A T E   C L A S S : OclImplementation::FeatureFactory
00026         //
00027         //==============================================================================================================================================
00028         //
00029         //      D E S C R I P T I O N :
00030         //
00031         //##############################################################################################################################################
00032 
00033         template < class TFeatureSignature, class TFeatureVector >
00034         class FeatureFactory
00035         {
00036                 private :
00037                         OclMeta::TypeManager* m_pTypeManager;
00038 
00039                 public :
00040                         FeatureFactory()
00041                         {
00042                         }
00043 
00044                         virtual ~FeatureFactory()
00045                         {
00046                         }
00047 
00048                         virtual void GetFeatures( const TFeatureSignature& signature, TFeatureVector& vecFeatures )
00049                         {
00050                         }
00051 
00052                         OclMeta::TypeManager* GetTypeManager() const
00053                         {
00054                                 return m_pTypeManager;
00055                         }
00056 
00057                 friend class OclMeta::TypeManager;
00058         };
00059 
00060         typedef FeatureFactory< OclSignature::Attribute , OclMeta::AttributeVector > AttributeFactory;
00061         typedef FeatureFactory< OclSignature::Association , OclMeta::AssociationVector > AssociationFactory;
00062         typedef FeatureFactory< OclSignature::Iterator , OclMeta::IteratorVector > IteratorFactory;
00063         typedef FeatureFactory< OclSignature::Method , OclMeta::MethodVector > MethodFactory;
00064         typedef FeatureFactory< OclSignature::Operator , OclMeta::OperatorVector > OperatorFactory;
00065         typedef FeatureFactory< OclSignature::Function , OclMeta::FunctionVector > FunctionFactory;
00066 
00067         //##############################################################################################################################################
00068         //
00069         //      T E M P L A T E   C L A S S : OclImplementation::TypeFactory
00070         //
00071         //==============================================================================================================================================
00072         //
00073         //      D E S C R I P T I O N :
00074         //
00075         //##############################################################################################################################################
00076 
00077         class TypeFactory
00078         {
00079                 private :
00080                         OclMeta::TypeManager* m_pTypeManager;
00081 
00082                 public :
00083                         TypeFactory() {};
00084 
00085                         virtual                 ~TypeFactory() {};
00086 
00087                         virtual void    GetTypes( const std::string& strName, const std::string& strNSpace, std::vector< std::unique_ptr<OclMeta::Type> >& vecTypes, std::string& nameRes ) = 0;
00088 
00089                         OclMeta::TypeManager* GetTypeManager() const
00090                         {
00091                                 return m_pTypeManager;
00092                         }
00093 
00094                 friend class OclMeta::TypeManager;
00095         };
00096 
00097         //##############################################################################################################################################
00098         //
00099         //      C L A S S : OclImplementation::ConstraintDefinitionFactory
00100         //
00101         //==============================================================================================================================================
00102         //
00103         //      D E S C R I P T I O N :
00104         //
00105         //##############################################################################################################################################
00106 
00107         class ConstraintDefinitionFactory
00108         {
00109                 private :
00110                         OclMeta::TypeManager* m_pTypeManager;
00111 
00112                 public :
00113                         ConstraintDefinitionFactory() {};
00114 
00115                         virtual ~ConstraintDefinitionFactory() {};
00116 
00117                         virtual void GetFeatures( const OclSignature::Attribute& signature, OclMeta::AttributeVector& vecFeatures )
00118                         {
00119                         }
00120 
00121                         virtual void GetFeatures( const OclSignature::Method& signature, OclMeta::MethodVector& vecFeatures )
00122                         {
00123                         }
00124 
00125                         OclMeta::TypeManager* GetTypeManager() const
00126                         {
00127                                 return m_pTypeManager;
00128                         }
00129 
00130                 friend class OclMeta::TypeManager;
00131         };
00132 
00133 }; // namespace OclImplementation
00134 
00135 #endif //OCLFactory_h