00001 #ifndef CELLSET_H
00002 #define CELLSET_H
00003
00004 #include "SundanceDefs.h"
00005
00006 #include "TSFSmartPtr.h"
00007 #include "Cell.h"
00008 #include "CellSetBase.h"
00009 #include "CellBlock.h"
00010 #include "XMLObject.h"
00011 #include "TSFArray.h"
00012 #include "TSFNonDupArray.h"
00013 #include "TSFHashtable.h"
00014 #include "LogicalExpr.h"
00015 #include "TSFTimeMonitor.h"
00016
00017
00018
00019 namespace Sundance
00020 {
00021
00022 using namespace TSF;
00023 using std::string;
00024
00025 using std::ostream;
00026
00027 class Mesh;
00028
00029
00030
00031
00032
00033
00034
00035 class CellSet
00036 {
00037 public:
00038
00039 CellSet() : ptr_(0) {;}
00040
00041 CellSet(CellSetBase* ptr);
00042
00043
00044 bool contains(const Cell& cell) const ;
00045
00046
00047
00048
00049 TSFHashtable<CellTopologyCode, TSFSmartPtr<TSFArray<CellBlock> > >
00050 getCellBlocks(const Mesh& mesh, TSFNonDupArray<CellTopologyCode>& cellType) const ;
00051
00052
00053
00054
00055
00056 TSFSmartPtr<TSFArray<Cell> > getOrderedCells(const Mesh& mesh) const ;
00057
00058
00059 bool operator==(const CellSet& other) const ;
00060
00061
00062 bool operator<(const CellSet& other) const ;
00063
00064
00065 CellSet operator+(const CellSet& other) const ;
00066
00067
00068 CellSet operator&&(const CellSet& other) const ;
00069
00070
00071
00072 CellSet operator-(const CellSet& other) const ;
00073
00074
00075
00076 CellSet join(const CellSet& other) const ;
00077
00078
00079 CellSet intersection(const CellSet& other) const ;
00080
00081
00082 CellSet exclude(const CellSet& other) const ;
00083
00084
00085 CellSet complement() const ;
00086
00087
00088 CellSet subset(const LogicalExpr& expr) const ;
00089
00090
00091 CellSet labeledSubset(const string& label) const ;
00092
00093
00094 static CellSet maximalCells() ;
00095
00096
00097 XMLObject toXML() const ;
00098
00099
00100 const CellSetBase* ptr() const ;
00101
00102
00103 int dimension(const Mesh& mesh) const ;
00104
00105 private:
00106 TSFSmartPtr<CellSetBase> ptr_;
00107
00108 static TSFTimer& cellSetTimer();
00109 };
00110
00111
00112
00113
00114 ostream& operator<<(ostream& os, const CellSet& cellSet);
00115
00116
00117 }
00118
00119 namespace TSF
00120 {
00121
00122
00123
00124 inline string toString(const Sundance::CellSet& cs)
00125 {
00126 return cs.toXML().toString();
00127 }
00128 }
00129
00130
00131 #endif
00132
00133