diff --git a/applications/test/labelRanges/Test-labelRanges.C b/applications/test/labelRanges/Test-labelRanges.C index b1bdb47f37..d986523796 100644 --- a/applications/test/labelRanges/Test-labelRanges.C +++ b/applications/test/labelRanges/Test-labelRanges.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2017 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2017-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- | Copyright (C) 2011 OpenFOAM Foundation @@ -143,6 +143,39 @@ int main(int argc, char *argv[]) Info<< nl; } + + { + range.reset(5, 5); + Info<< nl << "Tests on " << range << nl; + + Info<< "first " << range.first() << nl + << "last " << range.last() << nl + << "min " << range.min() << nl + << "max " << range.max() << nl + << "after " << range.after() << nl + << "*begin " << *range.begin() << nl + << "*end " << *range.end() << nl; + + range += 3; + Info<< "increase size " << range << nl; + + range -= 3; // Probably not a great idea + Info<< "decrese size " << range << nl; + + auto iter = range.begin(); + + Info<< "iter: " << *iter << nl; + ++iter; + + Info<< "iter: " << *iter << nl; + + iter += 3; + Info<< "iter: " << *iter << nl; + } + + + Info<< "\nEnd\n" << endl; + return 0; } diff --git a/src/OpenFOAM/primitives/ranges/labelRange/labelRange.C b/src/OpenFOAM/primitives/ranges/labelRange/labelRange.C index ff4f9ab652..e625cdcd80 100644 --- a/src/OpenFOAM/primitives/ranges/labelRange/labelRange.C +++ b/src/OpenFOAM/primitives/ranges/labelRange/labelRange.C @@ -198,18 +198,20 @@ Foam::labelRange Foam::labelRange::subset0(const label size) const } -// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // Foam::Istream& Foam::operator>>(Istream& is, labelRange& range) { + label start, size; + is.readBegin("labelRange"); - is >> range.start_ >> range.size_; + is >> start >> size; is.readEnd("labelRange"); - if (range.size_ < 0) - { - range.size_ = 0; // No negative sizes - } + if (size < 0) size = 0; // No negative sizes + + range.setStart(start); + range.setSize(size); is.check(FUNCTION_NAME); return is; @@ -218,7 +220,6 @@ Foam::Istream& Foam::operator>>(Istream& is, labelRange& range) Foam::Ostream& Foam::operator<<(Ostream& os, const labelRange& range) { - // Only write as ASCII for now os << token::BEGIN_LIST << range.start() << token::SPACE << range.size() << token::END_LIST; diff --git a/src/OpenFOAM/primitives/ranges/labelRange/labelRange.H b/src/OpenFOAM/primitives/ranges/labelRange/labelRange.H index 4c65dd4d92..fbb3027e85 100644 --- a/src/OpenFOAM/primitives/ranges/labelRange/labelRange.H +++ b/src/OpenFOAM/primitives/ranges/labelRange/labelRange.H @@ -31,6 +31,7 @@ Description SourceFiles labelRange.C + labelRangeI.H \*---------------------------------------------------------------------------*/ #ifndef labelRange_H @@ -45,15 +46,11 @@ namespace Foam { // Forward Declarations -class labelRange; class Istream; class Ostream; template class List; template class MinMax; -Istream& operator>>(Istream& is, labelRange& range); -Ostream& operator<<(Ostream& os, const labelRange& range); - /*---------------------------------------------------------------------------*\ Class labelRange Declaration \*---------------------------------------------------------------------------*/ @@ -122,7 +119,7 @@ public: //- An identity range corresponding to (map[i] == i), or with //- an optional start index, so that (map[i] == i+start) - // The order of parameters is as per the Foam::identity() function. + // The parameter order as per the Foam::identity() function. inline static labelRange identity ( const label len, @@ -135,33 +132,18 @@ public: //- Change the start position inline void setStart(const label i) noexcept; - //- Change the size + //- Change the size, enforcing non-negative size. inline void resize(const label n) noexcept; //- Change the size - alias for resize() inline void setSize(const label n) noexcept; - //- Decrease the size by 1, but never below 0. - inline void decrement() noexcept; - - //- Increase the size by 1. - inline void increment() noexcept; - //- Reset to zero start and zero size inline void clear() noexcept; //- Is the range empty? inline bool empty() const noexcept; - //- Return the range as a list of labels - List