BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / OpenFOAM / meshes / meshShapes / edge / edge.H
blob722fe741a5a3b9c3e9595cd6cbec5171485590fb
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::edge
27 Description
28     An edge is a list of two point labels. The functionality it provides
29     supports the discretisation on a 2-D flat mesh.
31 SourceFiles
32     edgeI.H
34 \*---------------------------------------------------------------------------*/
36 #ifndef edge_H
37 #define edge_H
39 #include "FixedList.H"
40 #include "pointField.H"
41 #include "linePointRef.H"
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
45 namespace Foam
48 // Forward declaration of friend functions and operators
50 class edge;
51 inline bool operator==(const edge& a, const edge& b);
52 inline bool operator!=(const edge& a, const edge& b);
55 /*---------------------------------------------------------------------------*\
56                            Class edge Declaration
57 \*---------------------------------------------------------------------------*/
59 class edge
61     public FixedList<label, 2>
64 public:
66     // Static data members
68         static const char* const typeName;
71     // Constructors
73         //- Null constructor for lists
74         inline edge();
76         //- Construct from components
77         inline edge(const label a, const label b);
79         //- Construct from FixedList
80         inline edge(const FixedList<label, 2>&);
82         //- Construct from Istream
83         inline edge(Istream&);
86     // Member Functions
88         //- Return start vertex label
89         inline label start() const;
91         //- Return start vertex label
92         inline label& start();
94         //- Return end vertex label
95         inline label end() const;
97         //- Return end vertex label
98         inline label& end();
100         //- Given one vertex, return the other
101         inline label otherVertex(const label a) const;
103         //- Return common vertex
104         inline label commonVertex(const edge& a) const;
106         //- Flip the edge in-place.
107         inline void flip();
109         //- Return reverse edge
110         inline edge reverseEdge() const;
112         //- Return centre (centroid)
113         inline point centre(const pointField&) const;
115         //- Return the vector (end - start)
116         inline vector vec(const pointField&) const;
118         //- Return scalar magnitude
119         inline scalar mag(const pointField&) const;
121         //- Return edge line
122         inline linePointRef line(const pointField&) const;
124         //- compare edges
125         //  Returns:
126         //  -  0: different
127         //  - +1: identical
128         //  - -1: same edge, but different orientation
129         static inline int compare(const edge&, const edge&);
132     // Friend Operators
134         friend bool operator==(const edge& a, const edge& b);
135         friend bool operator!=(const edge& a, const edge& b);
139 //- Hash specialization for hashing edges - a commutative hash value.
140 //  Hash incrementally.
141 template<>
142 inline unsigned Hash<edge>::operator()(const edge& e, unsigned seed) const
144     unsigned val = seed;
146     if (e[0] < e[1])
147     {
148         val = Hash<label>()(e[0], val);
149         val = Hash<label>()(e[1], val);
150     }
151     else
152     {
153         val = Hash<label>()(e[1], val);
154         val = Hash<label>()(e[0], val);
155     }
157     return val;
161 //- Hash specialization for hashing edges - a commutative hash value.
162 //  Hash incrementally.
163 template<>
164 inline unsigned Hash<edge>::operator()(const edge& e) const
166     return Hash<edge>()(e, 0);
170 template<>
171 inline bool contiguous<edge>()  {return true;}
174 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
176 } // End namespace Foam
178 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
180 #include "edgeI.H"
182 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
184 #endif
186 // ************************************************************************* //