GME
13
|
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