mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
- background: for some application it can be useful to have fully
sorted points. i.e., sorted by x, followed by y, followed by z.
The default VectorSpace 'operator<' compares *all*
components. This is seen by the following comparisons
1. a = (-2.2 -3.3 -4.4)
b = (-1.1 -2.2 3.3)
(a < b) : True
Each 'a' component is less than each 'b' component
2. a = (-2.2 -3.3 -4.4)
b = (-2.2 3.3 4.4)
(a < b) : False
The a.x() is not less than b.x()
The static definitions 'less_xyz', 'less_yzx', 'less_zxy'
instead use comparison of the next components as tie breakers
(like a lexicographic sort).
- same type of definition that Pair and Tuple2 use.
a = (-2.2 -3.3 -4.4)
b = (-2.2 3.3 4.4)
vector::less_xyz(a, b) : True
The a.x() == b.x(), but a.y() < b.y()
They can be used directly as comparators:
pointField points = ...;
std::sort(points.begin(), points.end(), vector::less_zxy);
ENH: make VectorSpace named access methods noexcept.
Since the addressing range is restricted to enumerated offsets
(eg, X/Y/Z) into storage, always remains in-range.
Possible to make constexpr with future C++ versions.
STYLE: VectorSpace 'operator>' defined using 'operator<'
- standard rewriting rule
183 lines
5.1 KiB
C++
183 lines
5.1 KiB
C++
/*---------------------------------------------------------------------------*\
|
|
========= |
|
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
\\ / O peration |
|
|
\\ / A nd | www.openfoam.com
|
|
\\/ M anipulation |
|
|
-------------------------------------------------------------------------------
|
|
Copyright (C) 2020 OpenCFD Ltd.
|
|
-------------------------------------------------------------------------------
|
|
License
|
|
This file is part of OpenFOAM.
|
|
|
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
|
under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
Class
|
|
Foam::boolVector
|
|
|
|
Description
|
|
Specialized bundling of boolean values as a vector of 3 components,
|
|
element access using x(), y() and z() member functions.
|
|
It also has some methods similar to bitSet.
|
|
|
|
Note
|
|
The boolVector is not derived from Vector or VectorSpace since
|
|
it does not share very many vector-like characteristics.
|
|
|
|
SourceFiles
|
|
boolVectorI.H
|
|
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef Foam_boolVector_H
|
|
#define Foam_boolVector_H
|
|
|
|
#include "FixedList.H"
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
namespace Foam
|
|
{
|
|
|
|
/*---------------------------------------------------------------------------*\
|
|
Class boolVector Declaration
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
class boolVector
|
|
:
|
|
public FixedList<bool, 3>
|
|
{
|
|
public:
|
|
|
|
// Member Constants
|
|
|
|
//- Rank of a vector is 1
|
|
static constexpr direction rank = 1;
|
|
|
|
//- Component labeling enumeration
|
|
enum components { X, Y, Z };
|
|
|
|
|
|
// Generated Methods
|
|
|
|
//- Copy construct
|
|
boolVector(const boolVector&) = default;
|
|
|
|
//- Copy assignment
|
|
boolVector& operator=(const boolVector&) = default;
|
|
|
|
//- Move construct
|
|
boolVector(boolVector&&) = default;
|
|
|
|
//- Move assignment
|
|
boolVector& operator=(boolVector&&) = default;
|
|
|
|
|
|
// Constructors
|
|
|
|
//- Default construct, zero-initialized (ie, false)
|
|
inline boolVector();
|
|
|
|
//- Uniform construct with specified value
|
|
inline explicit boolVector(const bool val);
|
|
|
|
//- Construct from three components
|
|
inline boolVector(const bool vx, const bool vy, const bool vz);
|
|
|
|
//- Construct from Istream
|
|
inline explicit boolVector(Istream& is);
|
|
|
|
|
|
// Member Functions
|
|
|
|
// Query
|
|
|
|
//- True if all components are set
|
|
//
|
|
// \note Method name compatibility with bitSet
|
|
inline bool all() const;
|
|
|
|
//- True if any components are set
|
|
//
|
|
// \note Method name compatibility with bitSet
|
|
inline bool any() const;
|
|
|
|
//- True if no components are set
|
|
//
|
|
// \note Method name compatibility with bitSet
|
|
inline bool none() const;
|
|
|
|
//- Count number of items set.
|
|
// \param on can be set to false to count the number of unset bits
|
|
// instead.
|
|
//
|
|
// \note Method name compatibility with bitSet
|
|
inline unsigned int count(const bool on=true) const;
|
|
|
|
|
|
// Component Access
|
|
|
|
//- The x component
|
|
bool x() const { return operator[](boolVector::X); }
|
|
|
|
//- The y component
|
|
bool y() const { return operator[](boolVector::Y); }
|
|
|
|
//- The z component
|
|
bool z() const { return operator[](boolVector::Z); }
|
|
|
|
//- The x component
|
|
bool& x() { return operator[](boolVector::X); }
|
|
|
|
//- The y component
|
|
bool& y() { return operator[](boolVector::Y); }
|
|
|
|
//- The z component
|
|
bool& z() { return operator[](boolVector::Z); }
|
|
|
|
|
|
// Edit
|
|
|
|
//- Invert all values
|
|
//
|
|
// \note Method name compatibility with bitSet
|
|
inline void flip();
|
|
|
|
|
|
// Operators
|
|
|
|
//- Assignment of all entries to the given value
|
|
inline void operator=(const bool value);
|
|
};
|
|
|
|
// * * * * * * * * * * * * * * * * * Traits * * * * * * * * * * * * * * * * //
|
|
|
|
//- A boolVector is contiguous (FixedList of bool)
|
|
template<> struct is_contiguous<boolVector> : std::true_type {};
|
|
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
} // End namespace Foam
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
#include "boolVectorI.H"
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
#endif
|
|
|
|
// ************************************************************************* //
|