ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / OpenFOAM / meshes / Identifiers / DynamicID / DynamicID.H
blob03942bb9ad1b0db9cbcf6d45486409ea5a1e959c
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM 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 OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::DynamicID
27 Description
28     A class that holds the data needed to identify things (zones, patches)
29     in a dynamic mesh.
31     The thing is identified by name.
32     Its indices are updated if the mesh has changed.
34 \*---------------------------------------------------------------------------*/
36 #ifndef DynamicID_H
37 #define DynamicID_H
39 #include "keyType.H"
40 #include "labelList.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 namespace Foam
47 // Forward declaration of friend functions and operators
48 template<class> class DynamicID;
50 template<class ObjectType>
51 Ostream& operator<<(Ostream&, const DynamicID<ObjectType>&);
53 /*---------------------------------------------------------------------------*\
54                           Class DynamicID Declaration
55 \*---------------------------------------------------------------------------*/
57 template<class ObjectType>
58 class DynamicID
60     // Private data
62         //- Zone name
63         keyType key_;
65         //- Zone indices
66         labelList indices_;
69 public:
71     // Constructors
73         //- Construct from name
74         DynamicID(const keyType& key, const ObjectType& obj)
75         :
76             key_(key),
77             indices_(obj.findIndices(key_))
78         {}
80         //- Construct from Istream
81         DynamicID(Istream& is, const ObjectType& obj)
82         :
83             key_(is),
84             indices_(obj.findIndices(key_))
85         {}
88     // Destructor - default
91     // Member Functions
93         // Access
95             //- Return name
96             const keyType& name() const
97             {
98                 return key_;
99             }
101             //- Return indices of matching zones
102             const labelList& indices() const
103             {
104                 return indices_;
105             }
107             //- Return index of first matching zone
108             label index() const
109             {
110                 return indices_.empty() ? -1 : indices_[0];
111             }
113             //- Has the zone been found
114             bool active() const
115             {
116                 return !indices_.empty();
117             }
120         // Edit
122             //- Update
123             void update(const ObjectType& obj)
124             {
125                 indices_ = obj.findIndices(key_);
126             }
129     // IOstream Operators
131         friend Ostream& operator<< <ObjectType>
132         (Ostream&, const DynamicID<ObjectType>&);
136 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
138 template<class ObjectType>
139 Ostream& operator<<(Ostream& os, const DynamicID<ObjectType>& dynId)
141     os  << token::BEGIN_LIST
142         << dynId.name() << token::SPACE << dynId.index()
143         << token::END_LIST;
145     // Check state of Ostream
146     os.check("Ostream& operator<<(Ostream&, const DynamicID<ObjectType>&)");
148     return os;
152 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
154 } // End namespace Foam
156 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
158 #endif
160 // ************************************************************************* //