![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 #ifndef __smoab_CellSets_h
00002 #define __smoab_CellSets_h
00003
00004 #include "SimpleMoab.h"
00005
00006 namespace smoab
00007 {
00008 //----------------------------------------------------------------------------
00009 class CellSet
00010 {
00011 public:
00012 CellSet( smoab::EntityHandle p, const smoab::Range& cells ) : Entity( p ), Cells( cells ) {}
00013
00014 const smoab::Range& cells() const
00015 {
00016 return this->Cells;
00017 }
00018 EntityHandle entity() const
00019 {
00020 return this->Entity;
00021 }
00022
00023 bool contains( smoab::EntityHandle c ) const
00024 {
00025 return this->Cells.find( c ) != this->Cells.end();
00026 }
00027
00028 void erase( smoab::Range cells )
00029 {
00030 //seems that erase() has a bug, so use subtract
00031 this->Cells = smoab::subtract( this->Cells, cells );
00032 }
00033
00034 private:
00035 smoab::EntityHandle Entity;
00036 smoab::Range Cells;
00037 };
00038
00039 //----------------------------------------------------------------------------
00040 //CellSets are just a vector of CellSets
00041 typedef std::vector< CellSet > CellSets;
00042
00043 //----------------------------------------------------------------------------
00044 //templated so it works with FaceCellSets and CellSets
00045 template < typename T >
00046 smoab::Range getParents( const T& set )
00047 {
00048 typedef typename T::const_iterator iterator;
00049 smoab::Range result;
00050
00051 for( iterator i = set.begin(); i != set.end(); ++i )
00052 {
00053 result.insert( i->entity() );
00054 }
00055 return result;
00056 }
00057
00058 //----------------------------------------------------------------------------
00059 //templated so it works with FaceCellSets and CellSets
00060 template < typename T >
00061 smoab::Range getAllCells( const T& set )
00062 {
00063 typedef typename T::const_iterator iterator;
00064 smoab::Range result;
00065
00066 for( iterator i = set.begin(); i != set.end(); ++i )
00067 {
00068 smoab::Range c = i->cells();
00069 result.insert( c.begin(), c.end() );
00070 }
00071 return result;
00072 }
00073
00074 } // namespace smoab
00075
00076 #endif