Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : SenseEntity.hpp
3 : : //
4 : : // Purpose : This class is the base class of all sense entities such,
5 : : // as CoVolume, CoFace, CoEdge, and CoVertex.
6 : : //
7 : : // Special Notes : This is a pure virtual class.
8 : : //
9 : : // Creator : Xuechen Liu
10 : : //
11 : : // Creation Date : 07/11/96
12 : : //
13 : : // Owner : Malcolm J. Panthaki
14 : : //-------------------------------------------------------------------------
15 : :
16 : : #ifndef SENSE_ENTITY_HPP
17 : : #define SENSE_ENTITY_HPP
18 : :
19 : : // ********** BEGIN STANDARD INCLUDES **********
20 : : // ********** END STANDARD INCLUDES **********
21 : :
22 : : // ********** BEGIN CUBIT INCLUDES **********
23 : : #include "CubitDefines.h"
24 : : #include "TopologyEntity.hpp"
25 : : #include "CubitObservable.hpp"
26 : :
27 : : // ********** END CUBIT INCLUDES **********
28 : :
29 : : // ********** BEGIN MACROS DEFINITIONS **********
30 : : // ********** END MACROS DEFINITIONS **********
31 : :
32 : : // ********** BEGIN FORWARD DECLARATIONS **********
33 : : class BasicTopologyEntity ;
34 : : class GroupingEntity;
35 : : template <class X> class DLIList ;
36 : : // ********** END FORWARD DECLARATIONS **********
37 : :
38 : : class CUBIT_GEOM_EXPORT SenseEntity : public TopologyEntity,
39 : : public CubitObservable
40 : : {
41 : : public :
42 : :
43 : : inline SenseEntity();
44 : :
45 : : virtual ~SenseEntity();
46 : :
47 : : inline BasicTopologyEntity* get_basic_topology_entity_ptr() ;
48 : : //R BasicTopologyEntity*
49 : : //R- A pointer to the BasicTopologyEntity which the current sense
50 : : //R- entity is associated with.
51 : : //- This function returns a pointer to the BasicTopologyEntity which
52 : : //- the current sense entity is associated with.
53 : :
54 : : inline GroupingEntity* get_grouping_entity_ptr();
55 : : //R GroupingEntity*
56 : : //R- A pointer to the parent GroupingEntity.
57 : :
58 : : BasicTopologyEntity* get_parent_basic_topology_entity_ptr();
59 : :
60 : : CubitStatus attach_basic_topology_entity(BasicTopologyEntity* basicTopologyEntityPtr) ;
61 : : //R CubitStatus
62 : : //R- CUBIT_SUCCESS/FAILURE
63 : : //I basicTopologyEntityPtr
64 : : //I- The pointer to a BasicTopologyEntity which will be attached as
65 : : //I- a BasicTopologyEntity of this SenseEntity.
66 : : //- This function is used to attach a BasicTopologyEntity to this
67 : : //- SenseEntity. The operation can fail if the BTE is not the
68 : : //- appropriate type. In that case the function returns
69 : : //- CUBIT_FAILURE. If the attachment is done successfully, the function
70 : : //- returns CUBIT_SUCCESS.
71 : :
72 : : CubitStatus switch_basic_topology_entity(BasicTopologyEntity* new_bte );
73 : : //- Change the BasicTopologyEntity attached to this SenseEntity
74 : : //- to the passed BTE. This is used by unmerge.
75 : :
76 : : inline void set_sense(CubitSense sense) ;
77 : : //R void
78 : : //I sense
79 : : //I- The sense to be set.
80 : : //- This function sets the sense of the SenseEntity.
81 : :
82 : : void reverse_sense();
83 : : //- Reverse the sense of this SenseEntity.
84 : :
85 : : inline CubitSense get_sense() const ;
86 : : //R CubitSense
87 : : //R- The sense of the sense entity - CUBIT_FORWARD/REVERSED.
88 : : //- This function returns the sense of the SenseEntity.
89 : :
90 : : inline SenseEntity* next();
91 : : //R SenseEntity*
92 : : //R- A SenseEntity pointer
93 : : //- This function returns a pointer to the SenseEntity that is
94 : : //- a child of this one in the DAG. If it is the end of the line,
95 : : //- then a NULL pointer is returned.
96 : :
97 : : inline SenseEntity* previous();
98 : : //R SenseEntity*
99 : : //R- A SenseEntity pointer
100 : : //- This function returns a pointer to the SenseEntity that is
101 : : //- a "parent" of this one in the DAG. If this SenseEntity is
102 : : //- already at the beginning of the list, then a NULL pointer is
103 : : //- returned.
104 : :
105 : : inline SenseEntity* next_on_bte();
106 : : //R SenseEntity*
107 : : //R- The next sense entity in the linked of list of
108 : : //R- sense entities associated with the child bte.
109 : :
110 : : virtual int get_parents( DLIList<TopologyEntity*>* list = 0 ) const;
111 : : virtual int get_children( DLIList<TopologyEntity*>* list = 0 ) const;
112 : :
113 : :
114 : : protected :
115 : :
116 : : virtual CubitBoolean query_append_parents( DLIList<TopologyEntity*>& list );
117 : : virtual CubitBoolean query_append_children(DLIList<TopologyEntity*>& list );
118 : :
119 : : virtual CubitStatus remove_child_link( TopologyEntity* );
120 : :
121 : : CubitStatus disconnect_all_children( DLIList<TopologyEntity*>* children = 0 );
122 : : CubitStatus disconnect_all_parents( DLIList<TopologyEntity*>* parents = 0 );
123 : :
124 : : private :
125 : :
126 : : // functions for use by GroupingEntity only
127 : : friend class GroupingEntity;
128 : : inline CubitStatus gpe_insert_after (SenseEntity* prev_ptr);
129 : : inline CubitStatus gpe_insert_before(SenseEntity* next_ptr);
130 : : inline CubitStatus gpe_remove();
131 : : inline CubitStatus set_grouping_entity_ptr(GroupingEntity* gpe_ptr);
132 : : inline void swap_gpe_list_ptrs();
133 : :
134 : : // functions for use by BasicTopologyEntity only
135 : : friend class BasicTopologyEntity;
136 : : inline SenseEntity* set_bte_next(SenseEntity* next_ptr);
137 : : inline CubitStatus set_basic_topology_entity_ptr(BasicTopologyEntity* bte_ptr);
138 : :
139 : : CubitSense mySense;
140 : :
141 : : GroupingEntity* myParent;
142 : : SenseEntity* nextInParent;
143 : : SenseEntity* prevInParent;
144 : :
145 : : BasicTopologyEntity* myChild;
146 : : SenseEntity* nextInChild;
147 : :
148 : : SenseEntity( const SenseEntity& );
149 : : void operator=( const SenseEntity& );
150 : : };
151 : :
152 : :
153 : 158312 : SenseEntity::SenseEntity()
154 : : : mySense(CUBIT_FORWARD),
155 : : myParent(0),
156 : : nextInParent(0),
157 : : prevInParent(0),
158 : : myChild(0),
159 [ + - ]: 158312 : nextInChild(0)
160 : 158312 : {}
161 : :
162 : 411568 : BasicTopologyEntity* SenseEntity::get_basic_topology_entity_ptr()
163 : 411568 : { return myChild; }
164 : :
165 : 428897 : GroupingEntity* SenseEntity::get_grouping_entity_ptr()
166 : 428897 : { return myParent; }
167 : :
168 : 41858 : void SenseEntity::set_sense(CubitSense sense)
169 : 41858 : { mySense = sense; }
170 : :
171 : 43110 : CubitSense SenseEntity::get_sense() const
172 : 43110 : { return mySense; }
173 : :
174 : 2006638 : SenseEntity* SenseEntity::next()
175 : 2006638 : { return nextInParent; }
176 : :
177 : 107419 : SenseEntity* SenseEntity::previous()
178 : 107419 : { return prevInParent; }
179 : :
180 : 425869 : SenseEntity* SenseEntity::next_on_bte()
181 : 425869 : { return nextInChild; }
182 : :
183 : 100837 : CubitStatus SenseEntity::gpe_insert_after(SenseEntity* prev_ptr)
184 : : {
185 : 100837 : nextInParent = prev_ptr->nextInParent;
186 [ + + ]: 100837 : if (nextInParent)
187 : 2522 : nextInParent->prevInParent = this;
188 : 100837 : prevInParent = prev_ptr;
189 : 100837 : prev_ptr->nextInParent = this;
190 : 100837 : return CUBIT_SUCCESS;
191 : : }
192 : :
193 : 438 : CubitStatus SenseEntity::gpe_insert_before(SenseEntity* next_ptr)
194 : : {
195 : 438 : prevInParent = next_ptr->prevInParent;
196 [ - + ]: 438 : if (prevInParent)
197 : 0 : prevInParent->nextInParent = this;
198 : 438 : nextInParent = next_ptr;
199 : 438 : next_ptr->prevInParent = this;
200 : 438 : return CUBIT_SUCCESS;
201 : : }
202 : :
203 : 99114 : CubitStatus SenseEntity::gpe_remove()
204 : : {
205 [ + + ]: 99114 : if (nextInParent)
206 : 62197 : nextInParent->prevInParent = prevInParent;
207 [ + + ]: 99114 : if (prevInParent)
208 : 2567 : prevInParent->nextInParent = nextInParent;
209 : 99114 : prevInParent = nextInParent = 0;
210 : 99114 : return CUBIT_SUCCESS;
211 : : }
212 : :
213 : 0 : void SenseEntity::swap_gpe_list_ptrs()
214 : : {
215 : 0 : SenseEntity* tmp = nextInParent;
216 : 0 : nextInParent = prevInParent;
217 : 0 : prevInParent = tmp;
218 : 0 : }
219 : :
220 : 256248 : CubitStatus SenseEntity::set_grouping_entity_ptr(GroupingEntity* gpe_ptr)
221 : : {
222 : 256248 : myParent = gpe_ptr;
223 : 256248 : return CUBIT_SUCCESS;
224 : : }
225 : :
226 : 199427 : SenseEntity* SenseEntity::set_bte_next(SenseEntity* next_ptr)
227 : : {
228 : 199427 : SenseEntity* old_val = nextInChild;
229 : 199427 : nextInChild = next_ptr;
230 : 199427 : return old_val;
231 : : }
232 : :
233 : 261176 : CubitStatus SenseEntity::set_basic_topology_entity_ptr(
234 : : BasicTopologyEntity* bte_ptr)
235 : : {
236 [ + + ][ - + ]: 261176 : if (myChild && bte_ptr)
237 : 0 : { assert(0); return CUBIT_FAILURE; }
238 : :
239 : 261176 : myChild = bte_ptr;
240 : 261176 : return CUBIT_SUCCESS;
241 : : }
242 : :
243 : :
244 : : // ********** BEGIN HELPER CLASSES **********
245 : : // ********** END HELPER CLASSES **********
246 : :
247 : : // ********** BEGIN INLINE FUNCTIONS **********
248 : : // ********** END INLINE FUNCTIONS **********
249 : :
250 : : // ********** BEGIN FRIEND FUNCTIONS **********
251 : : // ********** END FRIEND FUNCTIONS **********
252 : :
253 : : // ********** BEGIN EXTERN FUNCTIONS **********
254 : : // ********** END EXTERN FUNCTIONS **********
255 : :
256 : :
257 : : #endif
258 : :
259 : :
|