Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Copyright Notice
3 : : //
4 : : // Copyright (c) 1996
5 : : // by Malcolm J. Panthaki, DBA, and the University of New Mexico.
6 : : //-------------------------------------------------------------------------
7 : :
8 : : //-------------------------------------------------------------------------
9 : : // Filename : DAG.hpp
10 : : //
11 : : // Purpose : The DAG class performs general operations related
12 : : // to DAGs and TopologyEntitys. Its current functionalities:
13 : : // 1)Maintain a list of deactivated TopologyEntitys
14 : : // Note: The "nodes" of the DAG are type TopologyEntity.
15 : : //
16 : : // Special Notes : The class is a singleton.
17 : : //
18 : : // Creator : Raikanta Sahu
19 : : //
20 : : // Creation Date : 12/02/96
21 : : //
22 : : // Owner : Raikanta Sahu
23 : : //-------------------------------------------------------------------------
24 : :
25 : : #ifndef DAG_HPP
26 : : #define DAG_HPP
27 : :
28 : : // ********** BEGIN STANDARD INCLUDES **********
29 : : // ********** END STANDARD INCLUDES **********
30 : :
31 : : // ********** BEGIN MOTIF INCLUDES **********
32 : : // ********** END MOTIF INCLUDES **********
33 : :
34 : : // ********** BEGIN OPEN INVENTOR INCLUDES **********
35 : : // ********** END OPEN INVENTOR INCLUDES **********
36 : :
37 : : // ********** BEGIN CUBIT INCLUDES **********
38 : :
39 : : #include "CubitDefines.h"
40 : : #include "CGMGeomConfigure.h"
41 : :
42 : : #include "DLIList.hpp"
43 : :
44 : : // ********** END CUBIT INCLUDES **********
45 : :
46 : : // ********** BEGIN FORWARD DECLARATIONS **********
47 : : class TopologyEntity;
48 : : // ********** END FORWARD DECLARATIONS **********
49 : :
50 : : // ********** BEGIN MACRO DEFINITIONS **********
51 : : // ********** END MACRO DEFINITIONS **********
52 : :
53 : : // ********** BEGIN ENUM DEFINITIONS **********
54 : : // ********** END ENUM DEFINITIONS **********
55 : :
56 : : class CUBIT_GEOM_EXPORT DAG
57 : : {
58 : :
59 : : // ********** BEGIN FRIEND CLASS DECLARATIONS **********
60 : : // ********** END FRIEND CLASS DECLARATIONS **********
61 : :
62 : : public:
63 : :
64 : : static DAG* instance();
65 : : //- Controlled access and creation of the sole instance of this class.
66 : : //- Singleton pattern
67 : :
68 : : ~DAG() ;
69 : : //- Destructor
70 : :
71 : 322 : static void delete_instance()
72 : : {
73 [ + + ]: 322 : if(instance_)
74 [ + - ]: 151 : delete instance_;
75 : 322 : instance_ = NULL;
76 : 322 : };
77 : :
78 : : void add_deactivated_DAG_node(TopologyEntity* deactivatedDAGNodePtr) ;
79 : : //R void
80 : : //I deactivatedDAGNodePtr
81 : : //I- A pointer to a deactivated DAG node (TopologyEntity)
82 : : //- This function takes a pointer to a deactivated DAG node and
83 : : //- adds it to the list of deactivated DAG nodes.
84 : :
85 : : void remove_deactivated_DAG_node(TopologyEntity* deactivatedDAGNodePtr) ;
86 : : //R void
87 : : //I deactivatedDAGNodePtr
88 : : //I- A pointer to a deactivated DAG node
89 : : //- This function takes a pointer to a deactivated DAG node and
90 : : //- removes it from the list of deactivated DAG nodes.
91 : :
92 : : void cleanout_deactivated_DAG_nodes() ;
93 : : //R void
94 : : //- This function deletes all the deactivated DAG nodes and cleans
95 : : //- the list of deactivated DAG nodes.
96 : : //- N.B. deletion of objects connected to the DAGNodes are not
97 : : //- done at base class. The classes derived from DAGNode
98 : : //- must do that.
99 : :
100 : : void remove(TopologyEntity* DAGNodePtr);
101 : : //R void
102 : : //I DAGNodePtr
103 : : //I- The input DAG Node pointer to the DAG Node that initiated
104 : : //I- the event
105 : : //I event
106 : : //I- The type of event that occurred -- enum in CubitDefines
107 : : //- This function is used to notify the DAG class that an
108 : : //- event has occurred. The input object that initiated the
109 : : //- the event is a DAG Node.
110 : :
111 : : // Methods added by Jason Kraftcheck on September 16, 1996.
112 : :
113 : : CubitStatus get_children_at_level( TopologyEntity* parent, int level,
114 : : DLIList<TopologyEntity*>& result_set );
115 : : //R CubitStatus
116 : : //R- CUBIT_SUCCESS/CUBIT_FAILURE
117 : : //I parent
118 : : //I- A pointer to the DAG node to get the children of.
119 : : //I level
120 : : //I- Levels down to traverse DAG.
121 : : //O result_set
122 : : //O- The list of DAGNodes found.
123 : : //- These methods return the children of a DAG node at the
124 : : //- specified level down from the passed node.
125 : : //-
126 : : //- Note: These methods are implemented here rather than in
127 : : //- DAGNode because a breadth-first search will be
128 : : //- much more efficient than a depth-first search in
129 : : //- DAGNode.
130 : :
131 : : CubitStatus get_parents_at_level( TopologyEntity* child, int level,
132 : : DLIList<TopologyEntity*>& result_set );
133 : : //R CubitStatus
134 : : //R- CUBIT_SUCCESS/CUBIT_FAILURE
135 : : //I child
136 : : //I- A pointer to the DAG node to get the parents of.
137 : : //I level
138 : : //I- Levels up to traverse DAG.
139 : : //O result_set
140 : : //O- The list of DAGNodes found.
141 : : //- These methods return the parents of a DAG node at the
142 : : //- specified level up from the passed node.
143 : : //-
144 : : //- Note: These methods are implemented here rather than in
145 : : //- DAGNode because a breadth-first search will be
146 : : //- much more efficient than a depth-first search in
147 : : //- DAGNode.
148 : :
149 : : CubitStatus get_children_at_level( DLIList<TopologyEntity*>& parents, int level,
150 : : DLIList<TopologyEntity*>& result_set );
151 : : //R CubitStatus
152 : : //R- CUBIT_SUCCESS/CUBIT_FAILURE
153 : : //I parents
154 : : //I- A list of DAG nodes to get the children of.
155 : : //I level
156 : : //I- Levels down to traverse DAG.
157 : : //O result_set
158 : : //O- The list of DAGNodes found.
159 : : //- These methods return the children of a DAG node at the
160 : : //- specified level down from the passed node.
161 : : //-
162 : : //- Note: It is assumed that the parents passed are all at the
163 : : //- same level in the DAG. The behavior of this method
164 : : //- is undefined if this it not the case.
165 : :
166 : : CubitStatus get_parents_at_level( DLIList<TopologyEntity*>& children, int level,
167 : : DLIList<TopologyEntity*>& result_set );
168 : : //R CubitStatus
169 : : //R- CUBIT_SUCCESS/CUBIT_FAILURE
170 : : //I child
171 : : //I- A list of DAG nodes to get the parents of.
172 : : //I level
173 : : //I- Levels up to traverse DAG.
174 : : //O result_set
175 : : //O- The list of DAGNodes found.
176 : : //- These methods return the parents of a DAG node at the
177 : : //- specified level up from the passed node.
178 : : //-
179 : : //- Note: It is assumed that the children passed are all at the
180 : : //- same level in the DAG. The behavior of this method
181 : : //- is undefined if this it not the case.
182 : :
183 : : // End methods added by Jason Kraftcheck on September 16, 1996.
184 : :
185 : : protected:
186 : :
187 : : DAG() ;
188 : : //- The default constructor
189 : :
190 : : private:
191 : :
192 : : static DAG* instance_ ;
193 : : //- Pointer to the only instance of the class
194 : :
195 : : DLIList<TopologyEntity*> deactivatedDAGNodeList_ ;
196 : : //- List of deactivated snodes
197 : : } ;
198 : :
199 : :
200 : : // ********** BEGIN INLINE FUNCTIONS **********
201 : : // ********** END INLINE FUNCTIONS **********
202 : :
203 : : // ********** BEGIN FRIEND FUNCTIONS **********
204 : : // ********** END FRIEND FUNCTIONS **********
205 : :
206 : : // ********** BEGIN EXTERN FUNCTIONS **********
207 : : // ********** END EXTERN FUNCTIONS **********
208 : :
209 : : // ********** BEGIN HELPER CLASS DECLARATIONS **********
210 : : // ********** END HELPER CLASS DECLARATIONS **********
211 : :
212 : : #endif
213 : :
|