BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / OpenFOAM / meshes / polyMesh / zones / zone / zone.H
blob27db3cc56d87dacdc2484d4995650299a040e083
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::zone
27 Description
28     Base class for zones
30 SourceFiles
31     zone.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef zone_H
36 #define zone_H
38 #include "labelList.H"
39 #include "typeInfo.H"
40 #include "dictionary.H"
41 #include "Map.H"
42 #include "pointFieldFwd.H"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
49 // Forward declaration of friend functions and operators
51 class zone;
52 Ostream& operator<<(Ostream&, const zone&);
54 /*---------------------------------------------------------------------------*\
55                            Class zone Declaration
56 \*---------------------------------------------------------------------------*/
58 class zone
60     public labelList
63 protected:
65     // Protected data
67         //- Name of zone
68         word name_;
70         //- Index of zone
71         label index_;
74         // Demand-driven private data
76             //- Map of labels in zone for fast location lookup
77             mutable Map<label>* lookupMapPtr_;
80     // Protected Member Functions
82         //- Return a reference to the look-up map
83         const Map<label>& lookupMap() const;
85         //- Construct the look-up map
86         void calcLookupMap() const;
88         //- Disallow default bitwise copy construct
89         zone(const zone&);
92 public:
94     //- Runtime type information
95     TypeName("zone");
98     // Constructors
100         //- Construct from components
101         zone
102         (
103             const word& name,
104             const labelUList& addr,
105             const label index
106         );
108         //- Construct from components, transferring contents
109         zone
110         (
111             const word& name,
112             const Xfer<labelList>& addr,
113             const label index
114         );
116         //- Construct from dictionary
117         zone
118         (
119             const word& name,
120             const dictionary&,
121             const word& labelsName,
122             const label index
123         );
125         //- Construct given the original zone and resetting the
126         //  cell list and zone mesh information
127         zone
128         (
129             const zone&,
130             const labelUList& addr,
131             const label index
132         );
134         //- Construct given the original zone, resetting the
135         //  cell list and zone mesh information
136         zone
137         (
138             const zone&,
139             const Xfer<labelList>& addr,
140             const label index
141         );
144     //- Destructor
145     virtual ~zone();
148     // Member Functions
150         //- Return name
151         const word& name() const
152         {
153             return name_;
154         }
156         //- Map storing the local index for every global index.  Used to find
157         //  the index of the item in the zone from the known global index. If
158         //  the item is not in the zone, returns -1
159         label localID(const label globalID) const;
161         //- Return the index of this zone in zone list
162         label index() const
163         {
164             return index_;
165         }
167         //- Clear addressing
168         virtual void clearAddressing();
170         //- Check zone definition. Return true if in error.
171         virtual bool checkDefinition(const bool report = false) const = 0;
173         //- Check zone definition with max size given. Return true if in error.
174         virtual bool checkDefinition
175         (
176             const label maxSize,
177             const bool report = false
178         ) const;
180         //- Correct patch after moving points
181         virtual void movePoints(const pointField&)
182         {}
184         //- Write
185         virtual void write(Ostream&) const;
187         //- Write dictionary
188         virtual void writeDict(Ostream&) const = 0;
191     // I-O
193         //- Ostream Operator
194         friend Ostream& operator<<(Ostream&, const zone&);
198 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
200 } // End namespace Foam
202 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
204 #endif
206 // ************************************************************************* //