0031501: Foundation Classes, Message_Printer - remove theToPutEndl argument -- prepar...
[occt.git] / src / Interface / Interface_ShareTool.hxx
1 // Created on: 1993-02-02
2 // Created by: Christian CAILLET
3 // Copyright (c) 1993-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _Interface_ShareTool_HeaderFile
18 #define _Interface_ShareTool_HeaderFile
19
20 #include <Standard_Type.hxx>
21
22 class Interface_HGraph;
23 class Standard_DomainError;
24 class Interface_InterfaceError;
25 class Interface_InterfaceModel;
26 class Interface_GeneralLib;
27 class Interface_GTool;
28 class Interface_Protocol;
29 class Interface_Graph;
30 class Interface_EntityIterator;
31
32 //! Builds the Graph of Dependancies, from the General Service
33 //! "Shared" -> builds for each Entity of a Model, the Shared and
34 //! Sharing Lists, and gives access to them.
35 //! Allows to complete with Implied References (which are not
36 //! regarded as Shared Entities, but are nevertheless Referenced),
37 //! this can be usefull for Reference Checking
38 class Interface_ShareTool 
39 {
40 public:
41
42   DEFINE_STANDARD_ALLOC
43
44   
45   //! Creates a ShareTool from a Model and builds all required data,
46   //! by calling the General Service Library and Modules
47   //! (GeneralLib given as an argument)
48   Standard_EXPORT Interface_ShareTool(const Handle(Interface_InterfaceModel)& amodel, const Interface_GeneralLib& lib);
49   
50   //! Same a above, but GeneralLib is detained by a GTool
51   Standard_EXPORT Interface_ShareTool(const Handle(Interface_InterfaceModel)& amodel, const Handle(Interface_GTool)& gtool);
52   
53   //! Same a above, but GeneralLib is defined through a Protocol
54   //! Protocol is used to build the working library
55   Standard_EXPORT Interface_ShareTool(const Handle(Interface_InterfaceModel)& amodel, const Handle(Interface_Protocol)& protocol);
56   
57   //! Same as above, but works with the GTool of the Model
58   Standard_EXPORT Interface_ShareTool(const Handle(Interface_InterfaceModel)& amodel);
59   
60   //! Creates a ShareTool from an already defined Graph
61   //! Remark that the data of the Graph are copied
62   Standard_EXPORT Interface_ShareTool(const Interface_Graph& agraph);
63   
64   //! Completes the Graph by Adding Implied References. Hence, they
65   //! are considered as Sharing References in all the other queries
66   Standard_EXPORT Interface_ShareTool(const Handle(Interface_HGraph)& ahgraph);
67   
68   //! Returns the Model used for Creation (directly or for Graph)
69   Standard_EXPORT Handle(Interface_InterfaceModel) Model() const;
70   
71   //! Returns the data used by the ShareTool to work
72   //! Can then be used directly (read only)
73   Standard_EXPORT const Interface_Graph& Graph() const;
74   
75   //! Returns the Entities which are not Shared (their Sharing List
76   //! is empty) in the Model
77   Standard_EXPORT Interface_EntityIterator RootEntities() const;
78   
79   //! Returns True if <ent> is Shared by other Entities in the Model
80   Standard_EXPORT Standard_Boolean IsShared (const Handle(Standard_Transient)& ent) const;
81   
82   //! Returns the List of Entities Shared by a given Entity <ent>
83   Standard_EXPORT Interface_EntityIterator Shareds (const Handle(Standard_Transient)& ent) const;
84   
85   //! Returns the List of Entities Sharing a given Entity <ent>
86   Standard_EXPORT Interface_EntityIterator Sharings (const Handle(Standard_Transient)& ent) const;
87   
88   //! Returns the count of Sharing Entities of an Entity, which
89   //! are Kind of a given Type
90   Standard_EXPORT Standard_Integer NbTypedSharings (const Handle(Standard_Transient)& ent, const Handle(Standard_Type)& atype) const;
91   
92   //! Returns the Sharing Entity of an Entity, which is Kind of a
93   //! given Type. Allows to access a Sharing Entity of a given type
94   //! when there is one and only one (current case)
95   Standard_EXPORT Handle(Standard_Transient) TypedSharing (const Handle(Standard_Transient)& ent, const Handle(Standard_Type)& atype) const;
96   
97   //! Returns the complete list of entities shared by <ent> at any
98   //! level, including <ent> itself
99   //! If <ent> is the Model, considers the concatenation of
100   //! AllShared for each root
101   //! If <rootlast> is True (D), the list starts with lower level
102   //! entities and ends by the root. Else, the root is first and
103   //! the lower level entities are at end
104   Standard_EXPORT Interface_EntityIterator All (const Handle(Standard_Transient)& ent, const Standard_Boolean rootlast = Standard_True) const;
105   
106   //! Utility method which Prints the content of an iterator
107   //! (by their Numbers)
108   Standard_EXPORT void Print (const Interface_EntityIterator& iter,Standard_OStream& S) const;
109
110
111
112
113 protected:
114
115
116
117
118
119 private:
120
121
122
123   Handle(Interface_HGraph) theHGraph;
124
125
126 };
127
128
129
130
131
132
133
134 #endif // _Interface_ShareTool_HeaderFile