Forward compatibility: flex
[foam-extend-3.2.git] / src / mesh / cfMesh / utilities / meshes / primitives / meshSubsets / meshSubsetI.H
blob184ce372c24fab9a3efa0d4cece7fb9392d7bc98
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | cfMesh: A library for mesh generation
4    \\    /   O peration     |
5     \\  /    A nd           | Author: Franjo Juretic (franjo.juretic@c-fields.com)
6      \\/     M anipulation  | Copyright (C) Creative Fields, Ltd.
7 -------------------------------------------------------------------------------
8 License
9     This file is part of cfMesh.
11     cfMesh is free software; you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation; either version 3 of the License, or (at your
14     option) any later version.
16     cfMesh is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with cfMesh.  If not, see <http://www.gnu.org/licenses/>.
24 Description
26 \*---------------------------------------------------------------------------*/
28 #include "meshSubset.H"
29 #include "labelList.H"
30 #include "IOstreams.H"
32 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
34 namespace Foam
37 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
39 inline meshSubset::meshSubset()
41     name_(),
42     type_(UNKNOWN),
43     data_()
46 inline meshSubset::meshSubset
48     const word& name,
49     const meshSubset::subsetType_& t
52     name_(name),
53     type_(t),
54     data_()
57 template<class ListType>
58 inline meshSubset::meshSubset
60     const word& name,
61     const meshSubset::subsetType_& type,
62     const ListType& elements
65     name_(name),
66     type_(type),
67     data_()
69     forAll(elements, i)
70         data_.insert(elements[i]);
73 inline meshSubset::meshSubset(const meshSubset& ms)
75     name_(ms.name_),
76     type_(ms.type_),
77     data_()
79     data_ = ms.data_;
82 inline meshSubset::meshSubset(Istream& is)
84     name_(),
85     type_(UNKNOWN),
86     data_()
88     is >> *this;
91 inline meshSubset::~meshSubset()
94 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
96 inline const word& meshSubset::name() const
98     return name_;
101 inline label meshSubset::type() const
103     return type_;
106 template<class ListType>
107 inline void meshSubset::containedElements(ListType& l) const
109     l.setSize(data_.size());
111     label counter(0);
112     forAllConstIter(std::set<label>, data_, it)
113         l[counter++] = *it;
116 inline void meshSubset::addElement(const label elmt)
118     data_.insert(elmt);
121 inline void meshSubset::removeElement(const label elmt)
123     data_.erase(elmt);
126 template<class ListType>
127 inline void meshSubset::updateSubset(const ListType& newLabels)
129     std::set<label> newData;
131     forAllConstIter(std::set<label>, data_, it)
132     {
133         if( newLabels[*it] < 0 )
134             continue;
136         newData.insert(newLabels[*it]);
137     }
139     data_ = newData;
142 inline void meshSubset::updateSubset(const VRWGraph& newLabels)
144     std::set<label> newData;
146     forAllConstIter(std::set<label>, data_, it)
147     {
148         forAllRow(newLabels, *it, i)
149             newData.insert(newLabels(*it, i));
150     }
152     data_ = newData;
155 inline bool meshSubset::contains(const label elmt) const
157     return (data_.find(elmt) != data_.end());
160 inline void meshSubset::operator=(const meshSubset& ms)
162     name_ = ms.name_;
163     type_ = ms.type_;
165     data_.clear();
166     data_ = ms.data_;
169 inline bool meshSubset::operator==(const meshSubset& ms) const
171     if( ms.name_ != name_ )
172         return false;
173     if( ms.type_ != ms.type_ )
174         return false;
176     forAllConstIter(std::set<label>, data_, it)
177         if( ms.data_.find(*it) == ms.data_.end() )
178             return false;
180     return true;
183 inline bool meshSubset::operator!=(const meshSubset& ms) const
185     return !operator==(ms);
188 // * * * * * * * * * * * * * * * Ostream Operator  * * * * * * * * * * * * * //
190 inline Ostream& operator<<(Ostream& os, const meshSubset& sel)
192     os.check("inline Ostream& operator<<(Ostream&, const meshSubset&)");
194     os << sel.name_ << nl << sel.type_;
196     labelList data(sel.data_.size());
197     label counter(0);
198     forAllConstIter(std::set<label>, sel.data_, it)
199         data[counter++] = *it;
201     os << nl << data;
203     return os;
206 inline Istream& operator>>(Istream& is, meshSubset& sel)
208     is.check("friend Istream& operator>>(Istream&, meshSubset&)");
210     labelList data;
211     is >> sel.name_ >> sel.type_ >> data;
213     sel.data_.clear();
214     forAll(data, i)
215         sel.data_.insert(data[i]);
217     is.check("friend Istream& operator>>(Istream&, meshSubset&)");
219     return is;
223 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
225 } // End namespace Foam
227 // ************************************************************************* //