GME  13
OCLTree.h
Go to the documentation of this file.
00001 //###############################################################################################################################################
00002 //
00003 //      Object Constraint Language Generic Manager
00004 //      OCLTree.h
00005 //
00006 //###############################################################################################################################################
00007 
00008 #ifndef OCLTree_h
00009 #define OCLTree_h
00010 
00011 #include "StdAfx.h"
00012 #include "OCLCommon.h"
00013 #include "OCLException.h"
00014 #include "OCLObject.h"
00015 #include "OCLContext.h"
00016 #include "OCLType.h"
00017 #include "OCLFormalParameter.h"
00018 #include "OclViolation.h"
00019 
00020 //udmoclpat_ocltree_h_1 __please do not remove or change this line__
00021 
00022 namespace OclTree
00023 {
00024         class TreeManager;
00025 
00026         class ObjectNodeAdaptor;
00027         class CollectionNodeAdaptor;
00028         class ConstraintFactory;
00029 
00030         class TreeNode;
00031 
00032         class ObjectNode;
00033         class CollectionNode;
00034 
00035         class DeclarationNode;
00036         class VariableNode;
00037         class TypeCastNode;
00038         class IfThenElseNode;
00039 
00040         class AttributeNode;
00041         class AssociationNode;
00042         class IteratorNode;
00043         class MethodNode;
00044         class OperatorNode;
00045         class FunctionNode;
00046 
00047         class ContextNode;
00048         class Constraint;
00049 //udmoclpat_ocltree_h_2 __please do not remove or change this line__
00050 
00051         typedef OclCommon::ContextStack< TypeSeq > TypeContextStack;
00052 
00053         class TypeContext
00054         {
00055                 public :
00056                         TypeContextStack                        m_ctxTypes;
00057                         OclCommon::ExceptionPool        m_poolExceptions;
00058                         StringVector                                    m_vecImplicits;
00059                         std::string                                             m_strStereotype;
00060                         OclMeta::DependencySet          m_setDependencies;
00061                         std::string                                     m_namespace;
00062 
00063                 public :
00064                         TypeContext( const std::string& pNamesp )
00065                                 : m_strStereotype( "inv" )
00066                                 , m_namespace( pNamesp)
00067                         {
00068                         }
00069 
00070                         TypeContext( const TypeContext& context )
00071                                 : m_ctxTypes( context.m_ctxTypes ), m_poolExceptions( context.m_poolExceptions ), m_vecImplicits( context.m_vecImplicits ), m_strStereotype( context.m_strStereotype ), m_setDependencies( context.m_setDependencies )
00072                                 , m_namespace( context.m_namespace)
00073                         {
00074                         }
00075 
00076                         TypeContext& operator=( const TypeContext& context )
00077                         {
00078                                 if ( this != &context ) {
00079                                         m_ctxTypes = context.m_ctxTypes;
00080                                         m_poolExceptions = context.m_poolExceptions;
00081                                         m_vecImplicits = context.m_vecImplicits;
00082                                         m_strStereotype = context.m_strStereotype;
00083                                         m_setDependencies = context.m_setDependencies; //FIXED, was m_setDependencies = m_setDependencies;
00084                                         m_namespace = context.m_namespace;
00085                                 }
00086                                 return *this;
00087                         }
00088         };
00089 
00090         typedef OclCommon::ContextStack< OclMeta::Object > ObjectContextStack;
00091 
00092 /*      transferred to OclViolation
00093         struct Violation {
00094                 bool                                            bIsException;
00095                 std::string                                             strMessage;
00096                 std::string                                             strSignature;
00097                 Position                                        position;
00098                 StringVector                            vecVariables;
00099                 StringVector                            vecObjects;
00100         };
00101 
00102         typedef std::vector< Violation >        ViolationVector;
00103 */
00104         struct ObjectContext {
00105                 ObjectContextStack      oCtx;
00106                 ViolationVector         vecViolations;
00107                 bool                                    bDoSnapshot;
00108                 int                                             iViolationCount;
00109                 bool                                    m_bHasException;
00110                 bool                                    m_bShortCircuitLogical;
00111                 bool                                    m_bShortCircuitIterator;
00112                 bool                                    m_bEnableTracking;
00113         };
00114 
00115         typedef std::vector< TreeNode* > TreeNodeVector;
00116 
00117 //##############################################################################################################################################
00118 //
00119 //      A B S T R A C T   C L A S S : OclTree::TreeNode
00120 //
00121 //==============================================================================================================================================
00122 //
00123 //      D E S C R I P T I O N :
00124 //
00125 //##############################################################################################################################################
00126 
00127         class TreeNode
00128         {
00129                 public :        typedef enum NodeKind { NK_OBJECT = 0, NK_COLLECTION = 1, NK_DECLARATION = 2,  NK_VARIABLE = 3, NK_IFTHENELSE = 4, NK_OPERATOR = 5, NK_FUNCTION = 6, NK_ATTRIBUTE = 7, NK_ASSOCIATION = 8, NK_METHOD = 9,  NK_ITERATOR = 10, NK_CONTEXT = 11, NK_TYPECAST = 12, NK_CONSTRAINT = 13, NK_EXTENSION = 14 };
00130 
00131                 private :                               TreeManager*    m_pManager;
00132                                                 const   NodeKind                        m_eKind;
00133                 public :                                        TypeSeq                 m_vecType;
00134                                                                 PositionMap             m_mapPositions;
00135                                                                 bool                            m_bTester;
00136                                                                 bool                            m_bSelfTester;
00137 
00138                 public :
00139                                                                                         TreeNode( TreeManager* pManager, NodeKind eKind );
00140                         virtual                                                         ~TreeNode();
00141 
00142                                         TreeManager*            GetTreeManager() const;
00143                                         NodeKind                                GetKind() const;
00144 
00145                         virtual std::string                     Print( const std::string& strTabs ) const = 0;
00146                                         bool                                    Check( TypeContext& context );
00147                         virtual         OclMeta::Object                 Evaluate( ObjectContext& context ) = 0;
00148 
00149                                         bool                                    ParseTypeSeq( TypeContext& context, const Position& position, std::string& strType, TypeSeq& vecType ) const;
00150                                         bool                                    CastType( TypeContext& context, const Position& position, const TypeSeq& vecTypeFrom, const TypeSeq& vecTypeTo ) const;
00151                                         VariableNode*                   CreateThis( TypeContext& context, int iImplicitPos ) const;
00152                                         int                                             GetLastExceptionCode( TypeContext& context ) const;
00153 
00154                                         TypeSeq                         GetParametralTypeSeq( const TypeSeq& vecType1, const TypeSeq& vecType2, const TypeSeq& vecTypeReturn );
00155                                         OclMeta::Feature*       CheckAmbiguity( const std::vector<OclMeta::Type*>& vecTypes, const std::vector<OclSignature::Feature*>& vecSignatures, std::vector<int>& vecAmbiguities, int& iPrecedence, OclCommon::ExceptionPool& exAmbiguity );
00156 
00157                                         void                                    AddViolation( ObjectContext& context, int iLine, const std::string& strSignature, const std::string& strMessage = "" );
00158                                         void                                    AddViolation(ObjectContext& context, Violation &violation);
00159                                         bool                                    IsBooleanReturned();
00160                                         OclMeta::Object                 CheckFalseResult( ObjectContext& context, OclMeta::Object spObject, int iLine, const std::string& strSignature );
00161                                         OclMeta::Object                 EvaluateCast( ObjectContext& context, OclMeta::Object spObject, int iLine, const std::string& strSignature, const std::string& strTypeName = "", bool bOnlyTest = true );
00162 
00163                         protected :
00164                         virtual         void                                    CheckInitialize();
00165                         virtual         bool                                    CheckImplementation( TypeContext& context ) = 0;
00166         };
00167 
00168 //##############################################################################################################################################
00169 //
00170 //      C L A S S : OclTree::ObjectNode <<< + OclTree::TreeNode
00171 //
00172 //==============================================================================================================================================
00173 //
00174 //      D E S C R I P T I O N :
00175 //
00176 //##############################################################################################################################################
00177 
00178         class ObjectNode
00179                 : public TreeNode
00180         {
00181                 public :                std::string             m_strType;
00182                                                 std::string     m_strValue;
00183                                                 bool    m_bCallable;
00184 
00185                                                                                                         ObjectNode( TreeManager* pManager );
00186 
00187                                         virtual         std::string                             Print( const std::string& strTabs ) const;
00188                                         virtual         bool                                    CheckImplementation( TypeContext& context );
00189                                         virtual         OclMeta::Object                 Evaluate( ObjectContext& context );
00190         };
00191 
00192 //##############################################################################################################################################
00193 //
00194 //      C L A S S : OclTree::CollectionNode <<< + OclTree::TreeNode
00195 //
00196 //==============================================================================================================================================
00197 //
00198 //      D E S C R I P T I O N :
00199 //
00200 //##############################################################################################################################################
00201 
00202         class CollectionNode
00203                 : public TreeNode
00204         {
00205                 public :        std::string     m_strType;
00206                                         TreeNodeVector  m_vecNodes;
00207 
00208                                                                                                         CollectionNode( TreeManager* pManager );
00209                                                                                                         ~CollectionNode();
00210 
00211                                         virtual         std::string                     Print( const std::string& strTabs ) const;
00212                                         virtual         bool                                    CheckImplementation( TypeContext& context );
00213                                         virtual         OclMeta::Object                 Evaluate( ObjectContext& context );
00214         };
00215 
00216 //##############################################################################################################################################
00217 //
00218 //      C L A S S : OclTree::DeclarationNode <<< + OclTree::TreeNode
00219 //
00220 //==============================================================================================================================================
00221 //
00222 //      D E S C R I P T I O N :
00223 //
00224 //##############################################################################################################################################
00225 
00226         class DeclarationNode
00227                 : public TreeNode
00228         {
00229                 public :        std::string                             m_strType;
00230                                         std::string                             m_strName;
00231                                         TreeNode*               m_pValueNode;
00232                                         TreeNode*               m_pInnerNode;
00233                                         TypeSeq                 m_vecTypeDecl;
00234 
00235                                                                                                         DeclarationNode( TreeManager* pManager );
00236                                                                                                         ~DeclarationNode();
00237 
00238                                         virtual         std::string                     Print( const std::string& strTabs ) const;
00239                                         virtual         OclMeta::Object                 Evaluate( ObjectContext& context );
00240 
00241                                         virtual         void                                    CheckInitialize();
00242                                         virtual         bool                                    CheckImplementation( TypeContext& context );
00243         };
00244 
00245 //##############################################################################################################################################
00246 //
00247 //      C L A S S : OclTree::TypeCastNode <<< + OclTree::TreeNode
00248 //
00249 //==============================================================================================================================================
00250 //
00251 //      D E S C R I P T I O N :
00252 //
00253 //##############################################################################################################################################
00254 
00255         class TypeCastNode
00256                 : public TreeNode
00257         {
00258                 public :        std::string     m_strType;
00259                                         TreeNode*               m_pThisNode;
00260                                         bool                    m_bIsDynamic;
00261 
00262                                                                                                         TypeCastNode( TreeManager* pManager );
00263                                                                                                         ~TypeCastNode();
00264 
00265                                         virtual         std::string             Print( const std::string& strTabs ) const;
00266                                         virtual         void                            CheckInitialize();
00267                                         virtual         bool                                    CheckImplementation( TypeContext& context );
00268                                         virtual         OclMeta::Object                 Evaluate( ObjectContext& context );
00269         };
00270 
00271 //##############################################################################################################################################
00272 //
00273 //      C L A S S : OclTree::IfThenElseNode <<< + OclTree::TreeNode
00274 //
00275 //==============================================================================================================================================
00276 //
00277 //      D E S C R I P T I O N :
00278 //
00279 //##############################################################################################################################################
00280 
00281         class IfThenElseNode
00282                 : public TreeNode
00283         {
00284                 public :
00285                                         TreeNode*       m_pIfNode;
00286                                         TreeNode*       m_pThenNode;
00287                                         TreeNode*       m_pElseNode;
00288 
00289                                                                                                         IfThenElseNode( TreeManager* pManager );
00290                                                                                                         ~IfThenElseNode();
00291 
00292                                         virtual         std::string                     Print( const std::string& strTabs ) const;
00293                                         virtual         bool                                    CheckImplementation( TypeContext& context );
00294                                         virtual         OclMeta::Object                 Evaluate( ObjectContext& context );
00295         };
00296 
00297 //##############################################################################################################################################
00298 //
00299 //      C L A S S : OclTree::OperatorNode <<< + OclTree::TreeNode
00300 //
00301 //==============================================================================================================================================
00302 //
00303 //      D E S C R I P T I O N :
00304 //
00305 //##############################################################################################################################################
00306 
00307         class OperatorNode
00308                 : public TreeNode
00309         {
00310                 public :
00311                                         std::string     m_strName;
00312                                         TreeNode*       m_pOperandNode1;
00313                                         TreeNode*       m_pOperandNode2;
00314                                         std::string                     m_strAssignVarName;
00315 
00316                                                                                                         OperatorNode( TreeManager* pManager );
00317                                                                                                         ~OperatorNode();
00318 
00319                                         virtual         std::string                     Print( const std::string& strTabs ) const;
00320                                         virtual         void                                    CheckInitialize();
00321                                         virtual         bool                                    CheckImplementation( TypeContext& context );
00322                                         virtual         OclMeta::Object                 Evaluate( ObjectContext& context );
00323         };
00324 
00325 //##############################################################################################################################################
00326 //
00327 //      C L A S S : OclTree::IteratorNode <<< + OclTree::TreeNode
00328 //
00329 //==============================================================================================================================================
00330 //
00331 //      D E S C R I P T I O N :
00332 //
00333 //##############################################################################################################################################
00334 
00335         class LevelCounter
00336         {
00337                 public:
00338                         LevelCounter(int *count)
00339                         {
00340                                 if (count)
00341                                 {
00342                                         counter = count;
00343                                         (*counter)++;
00344                                 }
00345                         }
00346                         ~LevelCounter()
00347                         {
00348                                 if (counter)
00349                                 {
00350                                         (*counter)--;
00351                                 }
00352                         }
00353 
00354                 private:
00355                         int *counter;
00356         };
00357 
00358         class IteratorNode
00359                 : public TreeNode
00360         {
00361                 // recursion corrected: terge
00362                 private:
00363                         static int m_iteratorLevel;
00364 
00365                 public :
00366                                         std::string                     m_strName;
00367                                         TreeNode*                               m_pThisNode;
00368                                         TreeNode*                               m_pArgumentNode;
00369 
00370                                         StringVector                    m_vecDeclarators;
00371                                         std::string                             m_strDeclType;
00372                                         TypeSeq                                 m_vecTypeDecl;
00373 
00374                                         std::string                     m_strAccuType;
00375                                         std::string                     m_strAccuName;
00376                                         TypeSeq                                 m_vecTypeAccu;
00377                                         TreeNode*                               m_pAccuNode;
00378 
00379                                         std::string                             m_strCallOperator;
00380 
00381                                                                                                 IteratorNode( TreeManager* pManager );
00382                                                                                                 ~IteratorNode();
00383 
00384                                         virtual         std::string             Print( const std::string& strTabs ) const;
00385                                         virtual         void                            CheckInitialize();
00386                                         virtual         bool                            CheckImplementation( TypeContext& context );
00387                                         virtual         OclMeta::Object         Evaluate( ObjectContext& context );
00388                                                         bool                            Iterate( ObjectContext& context, OclImplementation::Iterator* pIIterator, OclMeta::Object& objectThis, OclMeta::ObjectVector& vecArguments, int iDeclNum );
00389                 private :
00390                                         bool                                            CheckIterator( TypeContext& context );
00391         };
00392 
00393 //##############################################################################################################################################
00394 //
00395 //      C L A S S : OclTree::MethodNode <<< + OclTree::TreeNode
00396 //
00397 //==============================================================================================================================================
00398 //
00399 //      D E S C R I P T I O N :
00400 //
00401 //##############################################################################################################################################
00402 
00403         class MethodNode
00404                 : public TreeNode
00405         {
00406                 private:
00407                         static int      m_stackLevel;
00408 
00409                 public :        std::string                     m_strName;
00410                                         TreeNode*                               m_pThisNode;
00411                                         TreeNodeVector                  m_vecArguments;
00412                                         std::string                             m_strCallOperator;
00413 
00414                                         IteratorNode*                           m_pIterator;
00415 
00416                                                                                                 MethodNode( TreeManager* pManager );
00417                                                                                                 ~MethodNode();
00418 
00419                                         virtual         std::string             Print( const std::string& strTabs ) const;
00420                                         virtual         void                            CheckInitialize();
00421                                         virtual         bool                            CheckImplementation( TypeContext& context );
00422                                         virtual         OclMeta::Object         Evaluate( ObjectContext& context );
00423         };
00424 
00425 //##############################################################################################################################################
00426 //
00427 //      C L A S S : OclTree::FunctionNode <<< + OclTree::TreeNode
00428 //
00429 //==============================================================================================================================================
00430 //
00431 //      D E S C R I P T I O N :
00432 //
00433 //##############################################################################################################################################
00434 
00435         class FunctionNode
00436                 : public TreeNode
00437         {
00438                 public :        std::string                             m_strName;
00439                                         TreeNodeVector                  m_vecArguments;
00440 
00441                                         MethodNode*                             m_pMethod;
00442 
00443                                                                                                 FunctionNode( TreeManager* pManager );
00444                                                                                                 ~FunctionNode();
00445 
00446                                         virtual         std::string             Print( const std::string& strTabs ) const;
00447                                         virtual         void                            CheckInitialize();
00448                                         virtual         bool                            CheckImplementation( TypeContext& context );
00449                                         virtual         OclMeta::Object         Evaluate( ObjectContext& context );
00450         };
00451 
00452 //##############################################################################################################################################
00453 //
00454 //      C L A S S : OclTree::AssociationNode <<< + OclTree::TreeNode
00455 //
00456 //==============================================================================================================================================
00457 //
00458 //      D E S C R I P T I O N :
00459 //
00460 //##############################################################################################################################################
00461 
00462         class AssociationNode
00463                 : public TreeNode
00464         {
00465                 public :        std::string                             m_strName;
00466                                         std::string                                     m_strAcceptable;
00467                                         TreeNode*                                       m_pThisNode;
00468                                         std::string                             m_strCallOperator;
00469 
00470                                                                                                 AssociationNode( TreeManager* pManager );
00471                                                                                                 ~AssociationNode();
00472 
00473                                         virtual         std::string             Print( const std::string& strTabs ) const;
00474                                         virtual         void                            CheckInitialize();
00475                                         virtual         bool                            CheckImplementation( TypeContext& context );
00476                                         virtual         OclMeta::Object         Evaluate( ObjectContext& context );
00477                 private :
00478                                                         bool                            CheckAssociation( TypeContext& context );
00479         };
00480 
00481 //##############################################################################################################################################
00482 //
00483 //      C L A S S : OclTree::AttributeNode <<< + OclTree::TreeNode
00484 //
00485 //==============================================================================================================================================
00486 //
00487 //      D E S C R I P T I O N :
00488 //
00489 //##############################################################################################################################################
00490 
00491         class AttributeNode
00492                 : public TreeNode
00493         {
00494                 public :        std::string                             m_strName;
00495                                         TreeNode*                                       m_pThisNode;
00496                                         std::string                             m_strCallOperator;
00497 
00498                                         AssociationNode*                        m_pAssociation;
00499                                         IteratorNode*                           m_pCollector;
00500 
00501                                                                                                 AttributeNode( TreeManager* pManager );
00502                                                                                                 ~AttributeNode();
00503 
00504                                         virtual         std::string             Print( const std::string& strTabs ) const;
00505                                         virtual         void                            CheckInitialize();
00506                                         virtual         bool                            CheckImplementation( TypeContext& context );
00507                                         virtual         OclMeta::Object         Evaluate( ObjectContext& context );
00508         };
00509 
00510 //##############################################################################################################################################
00511 //
00512 //      C L A S S : OclTree::VariableNode <<< + OclTree::TreeNode
00513 //
00514 //==============================================================================================================================================
00515 //
00516 //      D E S C R I P T I O N :
00517 //
00518 //##############################################################################################################################################
00519 
00520         class VariableNode
00521                 : public TreeNode
00522         {
00523                 public :        std::string                     m_strName;
00524 
00525                                         AttributeNode*                  m_pAttribute;
00526                                         ObjectNode*                             m_pType;
00527 
00528                                                                                                 VariableNode( TreeManager* pManager );
00529                                                                                                 ~VariableNode();
00530 
00531                                         virtual         std::string             Print( const std::string& strTabs ) const;
00532                                         virtual         void                            CheckInitialize();
00533                                         virtual         bool                            CheckImplementation( TypeContext& context );
00534                                         virtual         OclMeta::Object         Evaluate( ObjectContext& context );
00535         };
00536 
00537 //##############################################################################################################################################
00538 //
00539 //      C L A S S : OclTree::ContextNode <<< + OclTree::TreeNode
00540 //
00541 //==============================================================================================================================================
00542 //
00543 //      D E S C R I P T I O N :
00544 //
00545 //##############################################################################################################################################
00546 
00547         class ContextNode
00548                 : public TreeNode
00549         {
00550                 public :                std::string                                             m_strName;
00551                                                 std::string                                             m_strType;
00552                                                 bool                                                            m_bClassifier;
00553                                                 std::string                                                     m_strStereotype;
00554                                                 OclMeta::DependencySet                  m_setDependencies;
00555 
00556                                                 OclCommon::FormalParameterVector        m_vecParameters;
00557                                                 std::string                                                     m_strReturnType;
00558                                                 TypeSeq                                                         m_vecTypeReturn;
00559 
00560                                                                                                         ContextNode( TreeManager* pManager );
00561 
00562                                         virtual         std::string                     Print( const std::string& strTabs ) const;
00563                                         virtual         void                                    CheckInitialize();
00564                                         virtual         bool                                    CheckImplementation( TypeContext& context );
00565                                         virtual         OclMeta::Object                 Evaluate( ObjectContext& context );
00566         };
00567 
00568 //##############################################################################################################################################
00569 //
00570 //      C L A S S : OclTree::Constraint <<< + OclTree::TreeNode
00571 //
00572 //==============================================================================================================================================
00573 //
00574 //      D E S C R I P T I O N :
00575 //
00576 //##############################################################################################################################################
00577 
00578         class Constraint
00579                 : public TreeNode
00580         {
00581                 public :                std::string     m_strName;
00582                                                 ContextNode*    m_pContext;
00583                                                 TreeNode*               m_pExpression;
00584 
00585                                                                                                         Constraint( TreeManager* pManager );
00586                                         virtual                                                 ~Constraint();
00587 
00588                                         virtual         std::string                     Print( const std::string& strTabs ) const;
00589                                         virtual         bool                                    CheckImplementation( TypeContext& context );
00590                                         virtual         OclMeta::Object                 Evaluate( ObjectContext& context );
00591         };
00592 
00593 //##############################################################################################################################################
00594 //
00595 //      A B S T R A C T   C L A S S : OclTree::ObjectNodeAdaptor
00596 //
00597 //==============================================================================================================================================
00598 //
00599 //      D E S C R I P T I O N :
00600 //
00601 //##############################################################################################################################################
00602 
00603         class ObjectNodeAdaptor
00604         {
00605                 public :                                                                        ObjectNodeAdaptor() {}
00606                                         virtual                                                         ~ObjectNodeAdaptor() {}
00607 
00608                                         virtual std::string                     Print( const std::string& strTabs, ObjectNode* pNode ) const;
00609                                         virtual bool                                    Check( TypeContext& context, ObjectNode* pNode ) const;
00610                                         virtual OclMeta::Object                 Evaluate( ObjectContext& context, ObjectNode* pNode ) const;
00611         };
00612 
00613 //##############################################################################################################################################
00614 //
00615 //      P U R E   A B S T R A C T   C L A S S : OclTree::CollectionNodeAdaptor
00616 //
00617 //==============================================================================================================================================
00618 //
00619 //      D E S C R I P T I O N :
00620 //
00621 //##############################################################################################################################################
00622 
00623         class CollectionNodeAdaptor
00624         {
00625                 public :
00626                                                                                                 CollectionNodeAdaptor() {}
00627                         virtual                                                                 ~CollectionNodeAdaptor() {}
00628 
00629                         virtual std::string                             Print( const std::string& strTabs, CollectionNode* pNode ) const;
00630                         virtual bool                                            Check( TypeContext& context, CollectionNode* pNode ) const;
00631                         virtual OclMeta::Object                 Evaluate( ObjectContext& context, CollectionNode* pNode ) const;
00632         };
00633 
00634 //##############################################################################################################################################
00635 //
00636 //      C L A S S : OclTree::TreeManager
00637 //
00638 //==============================================================================================================================================
00639 //
00640 //      D E S C R I P T I O N :
00641 //
00642 //##############################################################################################################################################
00643 
00644         class TreeManager
00645         {
00646                 private :               OclMeta::TypeManager*           m_pTypeManager;
00647                                                 ObjectNodeAdaptor*                      m_pOAdaptor;
00648                                                 CollectionNodeAdaptor*          m_pCAdaptor;
00649 
00650                 public :
00651                                                                                                         TreeManager( OclMeta::TypeManager* pTypeManager, ObjectNodeAdaptor* pOAdaptor, CollectionNodeAdaptor* pCAdaptor );
00652                         virtual                                                                 ~TreeManager();
00653 
00654                                                 OclMeta::TypeManager*   GetTypeManager() const;
00655 
00656                                                 ObjectNode*                             CreateObject() const;
00657                                                 CollectionNode*                         CreateCollection() const;
00658 
00659                                                 DeclarationNode*                        CreateDeclaration() const;
00660                                                 VariableNode*                   CreateVariable() const;
00661                                                 TypeCastNode*                   CreateTypeCast() const;
00662                                                 IfThenElseNode*                 CreateIfThenElse() const;
00663 
00664                                                 OperatorNode*                   CreateOperator() const;
00665                                                 IteratorNode*                   CreateIterator() const;
00666                                                 MethodNode*                             CreateMethod() const;
00667                                                 FunctionNode*                   CreateFunction() const;
00668                                                 AssociationNode*                        CreateAssociation() const;
00669                                                 AttributeNode*                  CreateAttribute() const;
00670 
00671                                                 ContextNode*                            CreateContext() const;
00672                                                 Constraint*                             CreateConstraint() const;
00673 
00674 //udmoclpat_ocltree_h_3 __please do not remove or change this line__
00675 
00676                 friend class ObjectNode;
00677                 friend class CollectionNode;
00678         };
00679 
00680 //udmoclpat_ocltree_h_4 __please do not remove or change this line__
00681 
00682 }; // namespace OclTree
00683 
00684 
00685 #endif // OclTree_h