#include <MeshSetSequence.hpp>
Public Member Functions | |
MeshSetSequence (EntityHandle start, EntityID count, const unsigned *flags, SequenceData *data) | |
MeshSetSequence (EntityHandle start, EntityID count, unsigned flags, SequenceData *data) | |
MeshSetSequence (EntityHandle start, EntityID count, const unsigned *flags, EntityID sequence_size) | |
MeshSetSequence (EntityHandle start, EntityID count, unsigned flags, EntityID sequence_size) | |
virtual | ~MeshSetSequence () |
EntitySequence * | split (EntityHandle here) |
Split this sequence into two consecutive sequences. More... | |
SequenceData * | create_data_subset (EntityHandle, EntityHandle) const |
Create a new SequenceData that is a copy of a subset of the one referenced by this sequence. More... | |
ErrorCode | pop_back (EntityID count) |
Erase entities in range: (end_handle()-count, end_handle()]. More... | |
ErrorCode | pop_front (EntityID count) |
Erase entities in range: [start_handle(), start_handle()+count) More... | |
ErrorCode | push_back (EntityID count, const unsigned *flags) |
ErrorCode | push_front (EntityID count, const unsigned *flags) |
void | get_const_memory_use (unsigned long &bytes_per_entity, unsigned long &size_of_sequence) const |
Get memory characteristcs that are the same for all entities. More... | |
unsigned long | get_per_entity_memory_use (EntityHandle first, EntityHandle last) const |
Get portion of memory use that varies per entity. More... | |
MeshSet * | get_set (EntityHandle h) |
const MeshSet * | get_set (EntityHandle h) const |
ErrorCode | get_entities (EntityHandle set, std::vector< EntityHandle > &entities) const |
ErrorCode | get_entities (SequenceManager const *seqman, EntityHandle set, Range &entities, bool recursive) const |
ErrorCode | get_dimension (SequenceManager const *seqman, EntityHandle set, int dim, std::vector< EntityHandle > &entities, bool recursive) const |
ErrorCode | get_dimension (SequenceManager const *seqman, EntityHandle set, int dim, Range &entities, bool recursive) const |
ErrorCode | get_type (SequenceManager const *seqman, EntityHandle set, EntityType type, std::vector< EntityHandle > &entities, bool recursive) const |
ErrorCode | get_type (SequenceManager const *seqman, EntityHandle set, EntityType type, Range &entities, bool recursive) const |
ErrorCode | num_entities (SequenceManager const *seqman, EntityHandle set, int &count, bool recursive) const |
ErrorCode | num_dimension (SequenceManager const *seqman, EntityHandle set, int dim, int &count, bool recursive) const |
ErrorCode | num_type (SequenceManager const *seqman, EntityHandle set, EntityType type, int &count, bool recursive) const |
ErrorCode | get_parents (SequenceManager const *seqman, EntityHandle of, std::vector< EntityHandle > &parents, int num_hops) const |
ErrorCode | get_children (SequenceManager const *seqman, EntityHandle of, std::vector< EntityHandle > &children, int num_hops) const |
ErrorCode | get_contained_sets (SequenceManager const *seqman, EntityHandle of, std::vector< EntityHandle > &contents, int num_hops) const |
ErrorCode | num_parents (SequenceManager const *seqman, EntityHandle of, int &number, int num_hops) const |
ErrorCode | num_children (SequenceManager const *seqman, EntityHandle of, int &number, int num_hops) const |
ErrorCode | num_contained_sets (SequenceManager const *seqman, EntityHandle of, int &number, int num_hops) const |
![]() | |
EntitySequence (EntityHandle start, EntityID count, SequenceData *dat) | |
virtual | ~EntitySequence () |
EntityType | type () const |
EntityHandle | start_handle () const |
EntityHandle | end_handle () const |
SequenceData * | data () const |
void | data (SequenceData *ptr) |
EntityID | size () const |
bool | using_entire_data () const |
True if SequenceData has no holes and is used only by this EntitySequence. More... | |
virtual int | values_per_entity () const |
Integer value used in finding appropriate SequenceData. More... | |
virtual ErrorCode | merge (EntitySequence &other) |
Merge this sequence with another. More... | |
Private Types | |
enum | SearchType { PARENTS , CHILDREN , CONTAINED } |
enum | { SET_SIZE = sizeof( MeshSet ) } |
Private Member Functions | |
MeshSetSequence (MeshSetSequence &split_from, EntityHandle split_at) | |
void | initialize (const unsigned *set_flags) |
ErrorCode | get_parent_child_meshsets (EntityHandle meshset, SequenceManager const *set_sequences, std::vector< EntityHandle > &results, int num_hops, SearchType link_type) const |
const unsigned char * | array () const |
unsigned char * | array () |
void | allocate_set (unsigned flags, EntityID index) |
void | deallocate_set (EntityID index) |
Static Private Member Functions | |
static ErrorCode | recursive_get_sets (EntityHandle start_set, SequenceManager const *set_sequences, std::vector< const MeshSet * > *sets_out=0, Range *set_handles_out=0, std::vector< EntityHandle > *set_handle_vect_out=0) |
static ErrorCode | recursive_get_sets (EntityHandle start_set, SequenceManager *set_sequences, std::vector< MeshSet * > &sets_out) |
Additional Inherited Members | |
![]() | |
EntitySequence (EntityHandle h) | |
EntitySequence (EntitySequence &split_from, EntityHandle here) | |
SequenceData * | create_data_subset (EntityHandle start_handle, EntityHandle end_handle, int num_sequence_arrays, unsigned const *bytes_per_element) const |
ErrorCode | prepend_entities (EntityID count) |
ErrorCode | append_entities (EntityID count) |
Definition at line 33 of file MeshSetSequence.hpp.
|
private |
Enumerator | |
---|---|
SET_SIZE |
Definition at line 142 of file MeshSetSequence.hpp.
143 { 144 SET_SIZE = sizeof( MeshSet ) 145 };
|
private |
Enumerator | |
---|---|
PARENTS | |
CHILDREN | |
CONTAINED |
Definition at line 116 of file MeshSetSequence.hpp.
117 { 118 PARENTS, 119 CHILDREN, 120 CONTAINED 121 };
moab::MeshSetSequence::MeshSetSequence | ( | EntityHandle | start, |
EntityID | count, | ||
const unsigned * | flags, | ||
SequenceData * | data | ||
) |
Definition at line 27 of file MeshSetSequence.cpp.
28 : EntitySequence( start, count, dat )
29 {
30 initialize( flags );
31 }
References initialize().
Referenced by split().
moab::MeshSetSequence::MeshSetSequence | ( | EntityHandle | start, |
EntityID | count, | ||
unsigned | flags, | ||
SequenceData * | data | ||
) |
Definition at line 33 of file MeshSetSequence.cpp.
34 : EntitySequence( start, count, dat )
35 {
36 std::vector< unsigned > vect( count, flags );
37 initialize( &vect[0] );
38 }
References initialize().
moab::MeshSetSequence::MeshSetSequence | ( | EntityHandle | start, |
EntityID | count, | ||
const unsigned * | flags, | ||
EntityID | sequence_size | ||
) |
Definition at line 40 of file MeshSetSequence.cpp.
41 : EntitySequence( start, count, new SequenceData( 1, start, start + data_size - 1 ) )
42 {
43 initialize( flags );
44 }
References initialize().
moab::MeshSetSequence::MeshSetSequence | ( | EntityHandle | start, |
EntityID | count, | ||
unsigned | flags, | ||
EntityID | sequence_size | ||
) |
Definition at line 46 of file MeshSetSequence.cpp.
47 : EntitySequence( start, count, new SequenceData( 1, start, start + data_size - 1 ) )
48 {
49 std::vector< unsigned > vect( count, flags );
50 initialize( &vect[0] );
51 }
References initialize().
|
virtual |
Definition at line 62 of file MeshSetSequence.cpp.
63 {
64 EntityID offset = start_handle() - data()->start_handle();
65 EntityID count = size();
66 for( EntityID i = 0; i < count; ++i )
67 deallocate_set( i + offset );
68 }
References moab::EntitySequence::data(), deallocate_set(), moab::EntitySequence::size(), moab::EntitySequence::start_handle(), and moab::SequenceData::start_handle().
|
inlineprivate |
Definition at line 123 of file MeshSetSequence.hpp.
123 : EntitySequence( split_from, split_at ) {}
|
inlineprivate |
Definition at line 157 of file MeshSetSequence.hpp.
158 {
159 unsigned char* const ptr = array() + index * SET_SIZE;
160 new( ptr ) MeshSet( flags );
161 }
References array(), and SET_SIZE.
Referenced by initialize(), push_back(), and push_front().
|
inlineprivate |
Definition at line 152 of file MeshSetSequence.hpp.
153 {
154 return reinterpret_cast< unsigned char* >( data()->get_sequence_data( 0 ) );
155 }
References moab::EntitySequence::data(), and moab::SequenceData::get_sequence_data().
|
inlineprivate |
Definition at line 147 of file MeshSetSequence.hpp.
148 {
149 return reinterpret_cast< const unsigned char* >( data()->get_sequence_data( 0 ) );
150 }
References moab::EntitySequence::data(), and moab::SequenceData::get_sequence_data().
Referenced by allocate_set(), deallocate_set(), and get_set().
|
inlinevirtual |
Create a new SequenceData that is a copy of a subset of the one referenced by this sequence.
Create a new SequenceData that is a copy of a subset of the SequenceData referenced by this EntitySequence. Do not make any changes to this EntitySequence or the current SequenceData.
Implements moab::EntitySequence.
Definition at line 48 of file MeshSetSequence.hpp.
49 {
50 return 0;
51 }
|
inlineprivate |
Definition at line 163 of file MeshSetSequence.hpp.
164 {
165 MeshSet* set = reinterpret_cast< MeshSet* >( array() + SET_SIZE * index );
166 set->~MeshSet();
167 }
References array(), SET_SIZE, and moab::MeshSet::~MeshSet().
Referenced by pop_back(), pop_front(), and ~MeshSetSequence().
ErrorCode moab::MeshSetSequence::get_children | ( | SequenceManager const * | seqman, |
EntityHandle | of, | ||
std::vector< EntityHandle > & | children, | ||
int | num_hops | ||
) | const |
Definition at line 538 of file MeshSetSequence.cpp.
542 {
543 if( num_hops == 1 )
544 {
545 int count;
546 const EntityHandle* tmp_array = get_set( handle )->get_children( count );
547 if( children.empty() )
548 {
549 children.resize( count );
550 std::copy( tmp_array, tmp_array + count, children.begin() );
551 return MB_SUCCESS;
552 }
553 else if( !count )
554 {
555 return MB_SUCCESS;
556 }
557 }
558
559 if( num_hops > 0 )
560 return get_parent_child_meshsets( handle, seqman, children, num_hops, CHILDREN );
561 else
562 return get_parent_child_meshsets( handle, seqman, children, -1, CHILDREN );
563 }
References CHILDREN, children, moab::MeshSet::get_children(), get_parent_child_meshsets(), get_set(), and MB_SUCCESS.
Referenced by moab::Core::get_child_meshsets(), and num_children().
|
virtual |
Get memory characteristcs that are the same for all entities.
Get charactersitic constant memory use for all entities in sequence.
bytes_per_entity | The total bytes consumed for each entity in the underlying SequenceData. It is assumed that the same amount of memory is consumed for unused portions of the SequenceData. |
size_of_sequence | The size of the leaf subclass of this class |
Implements moab::EntitySequence.
Definition at line 115 of file MeshSetSequence.cpp.
116 {
117 per_ent = SET_SIZE;
118 seq_size = sizeof( *this );
119 }
References SET_SIZE.
ErrorCode moab::MeshSetSequence::get_contained_sets | ( | SequenceManager const * | seqman, |
EntityHandle | of, | ||
std::vector< EntityHandle > & | contents, | ||
int | num_hops | ||
) | const |
Definition at line 565 of file MeshSetSequence.cpp.
569 {
570 if( num_hops == 1 && contained.empty() )
571 {
572 return get_set( handle )->get_entities_by_type( MBENTITYSET, contained );
573 }
574
575 if( num_hops > 0 )
576 return get_parent_child_meshsets( handle, seqman, contained, num_hops, CONTAINED );
577 else
578 return get_parent_child_meshsets( handle, seqman, contained, -1, CONTAINED );
579 }
References CONTAINED, moab::MeshSet::get_entities_by_type(), get_parent_child_meshsets(), get_set(), and MBENTITYSET.
Referenced by moab::Core::get_contained_meshsets(), and num_contained_sets().
ErrorCode moab::MeshSetSequence::get_dimension | ( | SequenceManager const * | seqman, |
EntityHandle | set, | ||
int | dim, | ||
Range & | entities, | ||
bool | recursive | ||
) | const |
Definition at line 179 of file MeshSetSequence.cpp.
184 {
185 if( !recursive )
186 {
187 get_set( handle )->get_entities_by_dimension( dimension, entities );
188 return MB_SUCCESS;
189 }
190 else
191 {
192 std::vector< const MeshSet* > list;
193 ErrorCode rval = recursive_get_sets( handle, seqman, &list );
194 for( std::vector< const MeshSet* >::iterator i = list.begin(); i != list.end(); ++i )
195 ( *i )->get_entities_by_dimension( dimension, entities );
196 return rval;
197 }
198 }
References entities, ErrorCode, moab::MeshSet::get_entities_by_dimension(), get_set(), MB_SUCCESS, and recursive_get_sets().
ErrorCode moab::MeshSetSequence::get_dimension | ( | SequenceManager const * | seqman, |
EntityHandle | set, | ||
int | dim, | ||
std::vector< EntityHandle > & | entities, | ||
bool | recursive | ||
) | const |
Definition at line 158 of file MeshSetSequence.cpp.
163 {
164 if( !recursive )
165 {
166 get_set( handle )->get_entities_by_dimension( dimension, entities );
167 return MB_SUCCESS;
168 }
169 else
170 {
171 std::vector< const MeshSet* > list;
172 ErrorCode rval = recursive_get_sets( handle, seqman, &list );
173 for( std::vector< const MeshSet* >::iterator i = list.begin(); i != list.end(); ++i )
174 ( *i )->get_entities_by_dimension( dimension, entities );
175 return rval;
176 }
177 }
References entities, ErrorCode, moab::MeshSet::get_entities_by_dimension(), get_set(), MB_SUCCESS, and recursive_get_sets().
Referenced by moab::Core::get_entities_by_dimension(), and num_dimension().
ErrorCode moab::MeshSetSequence::get_entities | ( | EntityHandle | set, |
std::vector< EntityHandle > & | entities | ||
) | const |
Definition at line 152 of file MeshSetSequence.cpp.
153 {
154 get_set( handle )->get_entities( entities );
155 return MB_SUCCESS;
156 }
References entities, moab::MeshSet::get_entities(), get_set(), and MB_SUCCESS.
Referenced by moab::Core::get_entities_by_handle(), get_type(), and num_entities().
ErrorCode moab::MeshSetSequence::get_entities | ( | SequenceManager const * | seqman, |
EntityHandle | set, | ||
Range & | entities, | ||
bool | recursive | ||
) | const |
Definition at line 132 of file MeshSetSequence.cpp.
136 {
137 if( !recursive )
138 {
139 get_set( handle )->get_entities( entities );
140 return MB_SUCCESS;
141 }
142 else
143 {
144 std::vector< const MeshSet* > list;
145 ErrorCode rval = recursive_get_sets( handle, seqman, &list );
146 for( std::vector< const MeshSet* >::iterator i = list.begin(); i != list.end(); ++i )
147 ( *i )->get_non_set_entities( entities );
148 return rval;
149 }
150 }
References entities, ErrorCode, moab::MeshSet::get_entities(), get_set(), MB_SUCCESS, and recursive_get_sets().
|
private |
Definition at line 413 of file MeshSetSequence.cpp.
418 {
419 ErrorCode result = MB_SUCCESS;
420 std::vector< EntityHandle >::iterator i;
421 const EntityHandle *tmp_array = 0, *end;
422 EntityHandle s, e;
423 int count = 0;
424 size_t n;
425
426 // Skip any meshsets already in input vector (yes, don't
427 // get their children either even if num_hops would indicate
428 // that we should.) There is an exception to that if the
429 // input meshset is in the list, which is handled by the order
430 // of checks in the main loop below.
431 std::set< EntityHandle > visited;
432 for( i = results.begin(); i != results.end(); ++i )
433 visited.insert( *i );
434
435 // Two lists for breadth-first search
436 std::vector< EntityHandle > lists[2];
437 int index = 0; // which list to read from (write to lists[1-index])
438 lists[index].push_back( meshset ); // begin with input set
439 // loop for num_hops (or until no more sets)
440 for( ; num_hops && !lists[index].empty(); --num_hops )
441 {
442 // for each set at the current num_hops
443 for( i = lists[index].begin(); i != lists[index].end(); ++i )
444 {
445 // get meshset from handle
446 const EntitySequence* seq;
447 ErrorCode rval = seq_sets->find( *i, seq );
448 if( MB_SUCCESS != rval ) return rval;
449 const MeshSet* ms_ptr = reinterpret_cast< const MeshSetSequence* >( seq )->get_set( *i );
450
451 switch( link_type )
452 {
453 case CONTAINED:
454 tmp_array = ms_ptr->get_contents( n );
455 end = tmp_array + n;
456 if( ms_ptr->vector_based() )
457 {
458 for( ; tmp_array != end; ++tmp_array )
459 if( MBENTITYSET == TYPE_FROM_HANDLE( *tmp_array ) && visited.insert( *tmp_array ).second )
460 lists[1 - index].push_back( *tmp_array );
461 }
462 else
463 {
464 assert( n % 2 == 0 );
465 tmp_array = std::lower_bound( tmp_array, tmp_array + n, FIRST_HANDLE( MBENTITYSET ) );
466 // only part of first block is of type
467 if( ( end - tmp_array ) % 2 )
468 {
469 ++tmp_array;
470 s = FIRST_HANDLE( MBENTITYSET );
471 e = *tmp_array;
472 for( ; s <= e; ++s )
473 if( visited.insert( s ).second ) lists[1 - index].push_back( s );
474 }
475 while( tmp_array < end )
476 {
477 s = *tmp_array++;
478 e = *tmp_array++;
479 for( ; s <= e; ++s )
480 if( visited.insert( s ).second ) lists[1 - index].push_back( s );
481 }
482 }
483 continue;
484 case PARENTS:
485 tmp_array = ms_ptr->get_parents( count );
486 break;
487 case CHILDREN:
488 tmp_array = ms_ptr->get_children( count );
489 break;
490 }
491
492 // copy any parents/children we haven't visited yet into list
493 for( end = tmp_array + count; tmp_array != end; ++tmp_array )
494 if( visited.insert( *tmp_array ).second ) lists[1 - index].push_back( *tmp_array );
495 }
496
497 // iterate
498 lists[index].clear();
499 index = 1 - index;
500 // append each level of sets to the output list.
501 // note: to make a more useful search (e.g. get entities 3 hops away,
502 // rather than entities up to and including 3 hops) move this outside
503 // the loop, but then need to handle the get all (num_hops < 0) case
504 // specially.
505 std::copy( lists[index].begin(), lists[index].end(), std::back_inserter( results ) );
506 }
507
508 return result;
509 }
References CHILDREN, CONTAINED, ErrorCode, moab::SequenceManager::find(), moab::FIRST_HANDLE(), moab::MeshSet::get_children(), moab::MeshSet::get_contents(), moab::MeshSet::get_parents(), get_set(), MB_SUCCESS, MBENTITYSET, PARENTS, moab::TYPE_FROM_HANDLE(), and moab::MeshSet::vector_based().
Referenced by get_children(), get_contained_sets(), and get_parents().
ErrorCode moab::MeshSetSequence::get_parents | ( | SequenceManager const * | seqman, |
EntityHandle | of, | ||
std::vector< EntityHandle > & | parents, | ||
int | num_hops | ||
) | const |
Definition at line 511 of file MeshSetSequence.cpp.
515 {
516 if( num_hops == 1 )
517 {
518 int count;
519 const EntityHandle* tmp_array = get_set( handle )->get_parents( count );
520 if( parents.empty() )
521 {
522 parents.resize( count );
523 std::copy( tmp_array, tmp_array + count, parents.begin() );
524 return MB_SUCCESS;
525 }
526 else if( !count )
527 {
528 return MB_SUCCESS;
529 }
530 }
531
532 if( num_hops > 0 )
533 return get_parent_child_meshsets( handle, seqman, parents, num_hops, PARENTS );
534 else
535 return get_parent_child_meshsets( handle, seqman, parents, -1, PARENTS );
536 }
References get_parent_child_meshsets(), moab::MeshSet::get_parents(), get_set(), MB_SUCCESS, and PARENTS.
Referenced by moab::Core::get_parent_meshsets(), and num_parents().
|
virtual |
Get portion of memory use that varies per entity.
Reimplemented from moab::EntitySequence.
Definition at line 121 of file MeshSetSequence.cpp.
122 {
123 if( first < start_handle() ) first = start_handle();
124 if( last > end_handle() ) last = end_handle();
125
126 unsigned long sum = 0;
127 for( EntityHandle h = first; h <= last; ++h )
128 sum += get_set( h )->get_memory_use();
129 return sum;
130 }
References moab::EntitySequence::end_handle(), moab::GeomUtil::first(), moab::MeshSet::get_memory_use(), get_set(), moab::EntitySequence::start_handle(), and moab::sum().
|
inline |
Definition at line 170 of file MeshSetSequence.hpp.
171 {
172 return reinterpret_cast< MeshSet* >( array() + SET_SIZE * ( h - data()->start_handle() ) );
173 }
References array(), moab::EntitySequence::data(), SET_SIZE, and moab::SequenceData::start_handle().
Referenced by get_children(), get_contained_sets(), get_dimension(), get_entities(), moab::WriteUtil::get_entity_list_pointers(), get_parent_child_meshsets(), get_parents(), get_per_entity_memory_use(), get_type(), num_children(), num_contained_sets(), num_dimension(), num_entities(), num_parents(), num_type(), and recursive_get_sets().
|
inline |
Definition at line 174 of file MeshSetSequence.hpp.
175 {
176 return reinterpret_cast< const MeshSet* >( array() + SET_SIZE * ( h - data()->start_handle() ) );
177 }
References array(), moab::EntitySequence::data(), SET_SIZE, and moab::SequenceData::start_handle().
ErrorCode moab::MeshSetSequence::get_type | ( | SequenceManager const * | seqman, |
EntityHandle | set, | ||
EntityType | type, | ||
Range & | entities, | ||
bool | recursive | ||
) | const |
Definition at line 239 of file MeshSetSequence.cpp.
244 {
245 if( !recursive )
246 {
247 get_set( handle )->get_entities_by_type( tp, entities );
248 return MB_SUCCESS;
249 }
250 else if( tp == MBENTITYSET )
251 {
252 return recursive_get_sets( handle, seqman, 0, &entities );
253 }
254 else if( tp == MBMAXTYPE )
255 {
256 std::vector< const MeshSet* > list;
257 ErrorCode rval = recursive_get_sets( handle, seqman, &list );
258 for( std::vector< const MeshSet* >::iterator i = list.begin(); i != list.end(); ++i )
259 ( *i )->get_non_set_entities( entities );
260 return rval;
261 }
262 else
263 {
264 std::vector< const MeshSet* > list;
265 ErrorCode rval = recursive_get_sets( handle, seqman, &list );
266 for( std::vector< const MeshSet* >::iterator i = list.begin(); i != list.end(); ++i )
267 ( *i )->get_entities_by_type( tp, entities );
268 return rval;
269 }
270 }
References entities, ErrorCode, moab::MeshSet::get_entities_by_type(), get_set(), MB_SUCCESS, MBENTITYSET, MBMAXTYPE, and recursive_get_sets().
ErrorCode moab::MeshSetSequence::get_type | ( | SequenceManager const * | seqman, |
EntityHandle | set, | ||
EntityType | type, | ||
std::vector< EntityHandle > & | entities, | ||
bool | recursive | ||
) | const |
Definition at line 200 of file MeshSetSequence.cpp.
205 {
206 if( !recursive )
207 {
208 get_set( handle )->get_entities_by_type( tp, entities );
209 return MB_SUCCESS;
210 }
211 else if( tp == MBENTITYSET )
212 {
213 return recursive_get_sets( handle, seqman, 0, 0, &entities );
214 }
215 else if( tp == MBMAXTYPE )
216 {
217 Range tmp;
218 ErrorCode rval = get_entities( seqman, handle, tmp, recursive );
219 if( MB_SUCCESS == rval )
220 {
221 #ifdef MOAB_NO_VECTOR_TEMPLATE_INSERT
222 std::copy( tmp.begin(), tmp.end(), std::back_inserter( entities ) );
223 #else
224 entities.insert( entities.end(), tmp.begin(), tmp.end() );
225 #endif
226 }
227 return rval;
228 }
229 else
230 {
231 std::vector< const MeshSet* > list;
232 ErrorCode rval = recursive_get_sets( handle, seqman, &list );
233 for( std::vector< const MeshSet* >::iterator i = list.begin(); i != list.end(); ++i )
234 ( *i )->get_entities_by_type( tp, entities );
235 return rval;
236 }
237 }
References moab::Range::begin(), moab::Range::end(), entities, ErrorCode, get_entities(), moab::MeshSet::get_entities_by_type(), get_set(), MB_SUCCESS, MBENTITYSET, MBMAXTYPE, and recursive_get_sets().
Referenced by moab::Core::get_entities_by_type(), and num_type().
|
private |
Definition at line 53 of file MeshSetSequence.cpp.
54 {
55 if( !data()->get_sequence_data( 0 ) ) data()->create_sequence_data( 0, SET_SIZE );
56
57 EntityID offset = start_handle() - data()->start_handle();
58 for( EntityID i = 0; i < size(); ++i )
59 allocate_set( flags[i], i + offset );
60 }
References allocate_set(), moab::SequenceData::create_sequence_data(), moab::EntitySequence::data(), SET_SIZE, moab::EntitySequence::size(), moab::EntitySequence::start_handle(), and moab::SequenceData::start_handle().
Referenced by MeshSetSequence().
ErrorCode moab::MeshSetSequence::num_children | ( | SequenceManager const * | seqman, |
EntityHandle | of, | ||
int & | number, | ||
int | num_hops | ||
) | const |
Definition at line 598 of file MeshSetSequence.cpp.
602 {
603 if( num_hops == 1 )
604 {
605 number = get_set( handle )->num_children();
606 return MB_SUCCESS;
607 }
608
609 std::vector< EntityHandle > children;
610 ErrorCode result = get_children( seqman, handle, children, num_hops );
611 number = children.size();
612 return result;
613 }
References children, ErrorCode, get_children(), get_set(), MB_SUCCESS, and moab::MeshSet::num_children().
Referenced by moab::Core::num_child_meshsets().
ErrorCode moab::MeshSetSequence::num_contained_sets | ( | SequenceManager const * | seqman, |
EntityHandle | of, | ||
int & | number, | ||
int | num_hops | ||
) | const |
Definition at line 615 of file MeshSetSequence.cpp.
619 {
620 if( num_hops == 1 )
621 {
622 number = get_set( handle )->num_entities_by_type( MBENTITYSET );
623 return MB_SUCCESS;
624 }
625
626 std::vector< EntityHandle > contained;
627 ErrorCode result = get_contained_sets( seqman, handle, contained, num_hops );
628 number = contained.size();
629 return result;
630 }
References ErrorCode, get_contained_sets(), get_set(), MB_SUCCESS, MBENTITYSET, and moab::MeshSet::num_entities_by_type().
Referenced by moab::Core::num_contained_meshsets().
ErrorCode moab::MeshSetSequence::num_dimension | ( | SequenceManager const * | seqman, |
EntityHandle | set, | ||
int | dim, | ||
int & | count, | ||
bool | recursive | ||
) | const |
Definition at line 291 of file MeshSetSequence.cpp.
296 {
297 if( !recursive )
298 {
299 number = get_set( handle )->num_entities_by_dimension( dimension );
300 return MB_SUCCESS;
301 }
302 else
303 {
304 Range range;
305 ErrorCode result = get_dimension( seqman, handle, dimension, range, true );
306 number = range.size();
307 return result;
308 }
309 }
References ErrorCode, get_dimension(), get_set(), MB_SUCCESS, moab::MeshSet::num_entities_by_dimension(), and moab::Range::size().
Referenced by moab::Core::get_number_entities_by_dimension().
ErrorCode moab::MeshSetSequence::num_entities | ( | SequenceManager const * | seqman, |
EntityHandle | set, | ||
int & | count, | ||
bool | recursive | ||
) | const |
Definition at line 272 of file MeshSetSequence.cpp.
276 {
277 if( !recursive )
278 {
279 number = get_set( handle )->num_entities();
280 return MB_SUCCESS;
281 }
282 else
283 {
284 Range range;
285 ErrorCode result = get_entities( seqman, handle, range, true );
286 number = range.size();
287 return result;
288 }
289 }
References ErrorCode, get_entities(), get_set(), MB_SUCCESS, moab::MeshSet::num_entities(), and moab::Range::size().
Referenced by moab::Core::get_number_entities_by_handle().
ErrorCode moab::MeshSetSequence::num_parents | ( | SequenceManager const * | seqman, |
EntityHandle | of, | ||
int & | number, | ||
int | num_hops | ||
) | const |
Definition at line 581 of file MeshSetSequence.cpp.
585 {
586 if( num_hops == 1 )
587 {
588 number = get_set( handle )->num_parents();
589 return MB_SUCCESS;
590 }
591
592 std::vector< EntityHandle > parents;
593 ErrorCode result = get_parents( seqman, handle, parents, num_hops );
594 number = parents.size();
595 return result;
596 }
References ErrorCode, get_parents(), get_set(), MB_SUCCESS, and moab::MeshSet::num_parents().
Referenced by moab::Core::num_parent_meshsets().
ErrorCode moab::MeshSetSequence::num_type | ( | SequenceManager const * | seqman, |
EntityHandle | set, | ||
EntityType | type, | ||
int & | count, | ||
bool | recursive | ||
) | const |
Definition at line 311 of file MeshSetSequence.cpp.
316 {
317 if( !recursive )
318 {
319 number = get_set( handle )->num_entities_by_type( tp );
320 return MB_SUCCESS;
321 }
322 else
323 {
324 Range range;
325 ErrorCode result = get_type( seqman, handle, tp, range, true );
326 number = range.size();
327 return result;
328 }
329 }
References ErrorCode, get_set(), get_type(), MB_SUCCESS, moab::MeshSet::num_entities_by_type(), and moab::Range::size().
Referenced by moab::Core::get_number_entities_by_type().
Erase entities in range: (end_handle()-count, end_handle()].
Reimplemented from moab::EntitySequence.
Definition at line 75 of file MeshSetSequence.cpp.
76 {
77 EntityID offset = end_handle() + 1 - count - data()->start_handle();
78 ErrorCode rval = EntitySequence::pop_back( count );
79 if( MB_SUCCESS == rval )
80 for( EntityID i = 0; i < count; ++i )
81 deallocate_set( i + offset );
82 return rval;
83 }
References moab::EntitySequence::data(), deallocate_set(), moab::EntitySequence::end_handle(), ErrorCode, MB_SUCCESS, moab::EntitySequence::pop_back(), and moab::SequenceData::start_handle().
Referenced by moab::SequenceManager::allocate_mesh_set().
Erase entities in range: [start_handle(), start_handle()+count)
Reimplemented from moab::EntitySequence.
Definition at line 85 of file MeshSetSequence.cpp.
86 {
87 EntityID offset = start_handle() - data()->start_handle();
88 ErrorCode rval = EntitySequence::pop_front( count );
89 if( MB_SUCCESS == rval )
90 for( EntityID i = 0; i < count; ++i )
91 deallocate_set( i + offset );
92 return rval;
93 }
References moab::EntitySequence::data(), deallocate_set(), ErrorCode, MB_SUCCESS, moab::EntitySequence::pop_front(), moab::EntitySequence::start_handle(), and moab::SequenceData::start_handle().
Referenced by moab::SequenceManager::allocate_mesh_set().
Definition at line 95 of file MeshSetSequence.cpp.
96 {
97 EntityID offset = end_handle() + 1 - data()->start_handle();
98 ErrorCode rval = EntitySequence::append_entities( count );
99 if( MB_SUCCESS == rval )
100 for( EntityID i = 0; i < count; ++i )
101 allocate_set( flags[i], i + offset );
102 return rval;
103 }
References allocate_set(), moab::EntitySequence::append_entities(), moab::EntitySequence::data(), moab::EntitySequence::end_handle(), ErrorCode, MB_SUCCESS, and moab::SequenceData::start_handle().
Referenced by moab::SequenceManager::allocate_mesh_set(), and moab::SequenceManager::create_mesh_set().
Definition at line 105 of file MeshSetSequence.cpp.
106 {
107 EntityID offset = start_handle() - data()->start_handle() - count;
108 ErrorCode rval = EntitySequence::prepend_entities( count );
109 if( MB_SUCCESS == rval )
110 for( EntityID i = 0; i < count; ++i )
111 allocate_set( flags[i], i + offset );
112 return rval;
113 }
References allocate_set(), moab::EntitySequence::data(), ErrorCode, MB_SUCCESS, moab::EntitySequence::prepend_entities(), moab::EntitySequence::start_handle(), and moab::SequenceData::start_handle().
Referenced by moab::SequenceManager::allocate_mesh_set(), and moab::SequenceManager::create_mesh_set().
|
staticprivate |
Definition at line 383 of file MeshSetSequence.cpp.
386 {
387 std::set< EntityHandle > visited;
388 std::vector< EntityHandle > stack;
389 stack.push_back( start_set );
390 while( !stack.empty() )
391 {
392 EntityHandle handle = stack.back();
393 stack.pop_back();
394
395 if( !visited.insert( handle ).second ) continue;
396
397 EntitySequence* seq;
398 ErrorCode rval = seq_sets->find( handle, seq );
399 if( MB_SUCCESS != rval ) return rval;
400
401 MeshSetSequence* mseq = reinterpret_cast< MeshSetSequence* >( seq );
402 MeshSet* ms_ptr = mseq->get_set( handle );
403 sets.push_back( ms_ptr );
404
405 Range tmp_range;
406 ms_ptr->get_entities_by_type( MBENTITYSET, tmp_range );
407 std::copy( tmp_range.begin(), tmp_range.end(), std::back_inserter( stack ) );
408 }
409
410 return MB_SUCCESS;
411 }
References moab::Range::begin(), moab::Range::end(), ErrorCode, moab::SequenceManager::find(), moab::MeshSet::get_entities_by_type(), get_set(), MB_SUCCESS, and MBENTITYSET.
|
staticprivate |
Definition at line 331 of file MeshSetSequence.cpp.
336 {
337 std::set< EntityHandle > visited;
338 std::vector< EntityHandle > stack;
339 stack.push_back( start_set );
340 bool remove_start_set = true;
341 while( !stack.empty() )
342 {
343 EntityHandle handle = stack.back();
344 stack.pop_back();
345
346 if( !visited.insert( handle ).second )
347 {
348 if( handle == start_set ) remove_start_set = false;
349 continue;
350 }
351
352 const EntitySequence* seq;
353 ErrorCode rval = seq_sets->find( handle, seq );
354 if( MB_SUCCESS != rval ) return rval;
355
356 const MeshSetSequence* mseq = reinterpret_cast< const MeshSetSequence* >( seq );
357 const MeshSet* ms_ptr = mseq->get_set( handle );
358 if( sets ) sets->push_back( ms_ptr );
359
360 Range tmp_range;
361 ms_ptr->get_entities_by_type( MBENTITYSET, tmp_range );
362 std::copy( tmp_range.begin(), tmp_range.end(), std::back_inserter( stack ) );
363 }
364
365 if( set_handles )
366 {
367 if( remove_start_set ) visited.erase( start_set );
368 Range::iterator hint = set_handles->begin();
369 std::set< EntityHandle >::iterator it;
370 for( it = visited.begin(); it != visited.end(); ++it )
371 hint = set_handles->insert( hint, *it, *it );
372 }
373
374 if( set_vector )
375 {
376 if( remove_start_set ) visited.erase( start_set );
377 std::copy( visited.begin(), visited.end(), std::back_inserter( *set_vector ) );
378 }
379
380 return MB_SUCCESS;
381 }
References moab::Range::begin(), moab::Range::end(), ErrorCode, moab::SequenceManager::find(), moab::MeshSet::get_entities_by_type(), get_set(), moab::Range::insert(), MB_SUCCESS, and MBENTITYSET.
Referenced by get_dimension(), get_entities(), and get_type().
|
virtual |
Split this sequence into two consecutive sequences.
Split this sequence into two sequences.
here | New sequences should be [start_handle(),here) & [here,end_handle()] |
Implements moab::EntitySequence.
Definition at line 70 of file MeshSetSequence.cpp.
71 {
72 return new MeshSetSequence( *this, here );
73 }
References MeshSetSequence().