Forward compatibility: flex
[foam-extend-3.2.git] / src / mesh / cfMesh / utilities / helperClasses / parallelHelpers / labelledPoint / labelledPoint.H
blob46f9b435ccef311500c2216bae5d81cc08058252
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 Class
25     labelledPoint
27 Description
28     A class containing point label and its coordinates. It is used for
29     exchanging data over processors
31 SourceFiles
33 \*---------------------------------------------------------------------------*/
35 #ifndef labelledPoint_H
36 #define labelledPoint_H
38 #include "label.H"
39 #include "point.H"
40 #include "contiguous.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 namespace Foam
47 /*---------------------------------------------------------------------------*\
48                            Class labelledPoint Declaration
49 \*---------------------------------------------------------------------------*/
51 class labelledPoint
53     // Private data
54         //- point label
55         label pLabel_;
57         //- point coordinates
58         point coords_;
60     public:
62     // Constructors
63         //- Null construct
64         labelledPoint()
65         :
66             pLabel_(-1),
67             coords_(vector::zero)
68         {}
70         //- Construct from point and label
71         labelledPoint(const label pl, const point& p)
72         :
73             pLabel_(pl),
74             coords_(p)
75         {}
77     // Destructor
78         ~labelledPoint()
79         {}
81     // Member functions
82         //- return point label
83         inline label pointLabel() const
84         {
85             return pLabel_;
86         }
88         inline label& pointLabel()
89         {
90             return pLabel_;
91         }
93         //- return point coordinates
94         inline const point& coordinates() const
95         {
96             return coords_;
97         }
99         inline point& coordinates()
100         {
101             return coords_;
102         }
104     // Member operators
106         inline void operator=(const labelledPoint& lp)
107         {
108             pLabel_ = lp.pLabel_;
109             coords_ = lp.coords_;
110         }
112         inline bool operator==(const labelledPoint& lp) const
113         {
114             if( pLabel_ == lp.pLabel_ )
115                 return true;
117             return false;
118         }
120         inline bool operator!=(const labelledPoint& lp) const
121         {
122             return !this->operator==(lp);
123         }
125     // Friend operators
126         friend Ostream& operator<<(Ostream& os, const labelledPoint& lp)
127         {
128             os << token::BEGIN_LIST;
129             os << lp.pLabel_ << token::SPACE;
130             os << lp.coords_ << token::END_LIST;
132             // Check state of Ostream
133             os.check("operator<<(Ostream&, const labelledPoint&");
135             return os;
136         }
138         friend Istream& operator>>(Istream& is, labelledPoint& lp)
139         {
140             // Read beginning of labelledPoint
141             is.readBegin("labelledPoint");
143             is >> lp.pLabel_;
144             is >> lp.coords_;
146             // Read end of labelledPoint
147             is.readEnd("labelledPoint");
149             // Check state of Istream
150             is.check("operator>>(Istream&, labelledPoint");
152             return is;
153         }
156 //- Specify data associated with labelledPoint type is contiguous
157 template<>
158 inline bool contiguous<labelledPoint>() {return true;}
160 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
162 } // End namespace Foam
164 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
166 #endif
168 // ************************************************************************* //