Skip to content

Commit 3bc6686

Browse files
committed
More C++20 conformance fixes
Signed-off-by: Nick Avramoussis <4256455+Idclip@users.noreply.github.com>
1 parent 33c8790 commit 3bc6686

File tree

4 files changed

+30
-12
lines changed

4 files changed

+30
-12
lines changed

openvdb/openvdb/Platform.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,12 @@
3535
#define OPENVDB_CHECK_GCC(MAJOR, MINOR) 0
3636
#endif
3737

38-
/// OpenVDB now requires C++11
39-
#define OPENVDB_HAS_CXX11 1
38+
/// OpenVDB now requires C++17
39+
#define OPENVDB_HAS_CXX11 1 // kept for backward compatibility
4040

41+
#if __cplusplus >= 202002L
42+
#define OPENVDB_HAS_CXX20
43+
#endif
4144

4245
/// SIMD Intrinsic Headers
4346
#if defined(OPENVDB_USE_SSE42) || defined(OPENVDB_USE_AVX)

openvdb/openvdb/tools/MultiResGrid.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -522,8 +522,8 @@ template<Index Order>
522522
typename TreeType::ValueType MultiResGrid<TreeType>::
523523
sampleValue(const Coord& in_ijk, size_t in_level, size_t out_level) const
524524
{
525-
assert( in_level >= 0 && in_level < mTrees.size() );
526-
assert( out_level >= 0 && out_level < mTrees.size() );
525+
assert( in_level < mTrees.size() );
526+
assert( out_level < mTrees.size() );
527527
const ConstAccessor acc(*mTrees[out_level]);// has disabled registration!
528528
return tools::Sampler<Order>::sample( acc, this->xyz(in_ijk, in_level, out_level) );
529529
}
@@ -533,8 +533,8 @@ template<Index Order>
533533
typename TreeType::ValueType MultiResGrid<TreeType>::
534534
sampleValue(const Vec3R& in_xyz, size_t in_level, size_t out_level) const
535535
{
536-
assert( in_level >= 0 && in_level < mTrees.size() );
537-
assert( out_level >= 0 && out_level < mTrees.size() );
536+
assert( in_level < mTrees.size() );
537+
assert( out_level < mTrees.size() );
538538
const ConstAccessor acc(*mTrees[out_level]);// has disabled registration!
539539
return tools::Sampler<Order>::sample( acc, this->xyz(in_xyz, in_level, out_level) );
540540
}

openvdb/openvdb/tools/ValueTransformer.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -462,12 +462,13 @@ class SharedOpTransformer
462462
}
463463

464464
/// Transform each element in the given range.
465-
void operator()(IterRange& range) const
465+
void operator()(const IterRange& range) const
466466
{
467467
if (!mOutputTree) return;
468+
IterRange r(range);
468469
typename tree::ValueAccessor<OutTreeT> outAccessor(*mOutputTree);
469-
for ( ; range; ++range) {
470-
mOp(range.iterator(), outAccessor);
470+
for ( ; r; ++r) {
471+
mOp(r.iterator(), outAccessor);
471472
}
472473
}
473474

@@ -550,12 +551,13 @@ class CopyableOpTransformer
550551
}
551552

552553
/// Transform each element in the given range.
553-
void operator()(IterRange& range)
554+
void operator()(const IterRange& range)
554555
{
555556
if (!mOutputTree) return;
557+
IterRange r(range);
556558
typename tree::ValueAccessor<OutTreeT> outAccessor(*mOutputTree);
557-
for ( ; range; ++range) {
558-
mOp(range.iterator(), outAccessor);
559+
for ( ; r; ++r) {
560+
mOp(r.iterator(), outAccessor);
559561
}
560562
}
561563

openvdb/openvdb/util/PagedArray.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,7 @@ class PagedArray<ValueT, Log2PageSize>::ConstIterator
618618
ConstIterator operator+(const difference_type &pos) const { return Iterator(*mParent,mPos+pos); }
619619
ConstIterator operator-(const difference_type &pos) const { return Iterator(*mParent,mPos-pos); }
620620
difference_type operator-(const ConstIterator& other) const { return mPos - other.pos(); }
621+
friend ConstIterator operator+(const difference_type& pos, const ConstIterator& other) { return other + pos; }
621622
// comparisons
622623
bool operator==(const ConstIterator& other) const { return mPos == other.mPos; }
623624
bool operator!=(const ConstIterator& other) const { return mPos != other.mPos; }
@@ -633,6 +634,12 @@ class PagedArray<ValueT, Log2PageSize>::ConstIterator
633634
const PagedArray* mParent;
634635
};// Public class PagedArray::ConstIterator
635636

637+
#ifdef OPENVDB_HAS_CXX20
638+
static_assert(std::random_access_iterator<PagedArray<int, 10UL>::ConstIterator>,
639+
"ConstIterator must satisfy random_access_iterator concept");
640+
#endif
641+
642+
636643
////////////////////////////////////////////////////////////////////////////////
637644

638645
// Non-const std-compliant iterator
@@ -672,6 +679,7 @@ class PagedArray<ValueT, Log2PageSize>::Iterator
672679
Iterator operator+(const difference_type &pos) const { return Iterator(*mParent, mPos+pos); }
673680
Iterator operator-(const difference_type &pos) const { return Iterator(*mParent, mPos-pos); }
674681
difference_type operator-(const Iterator& other) const { return mPos - other.pos(); }
682+
friend Iterator operator+(const difference_type& pos, const Iterator& other) { return other + pos; }
675683
// comparisons
676684
bool operator==(const Iterator& other) const { return mPos == other.mPos; }
677685
bool operator!=(const Iterator& other) const { return mPos != other.mPos; }
@@ -687,6 +695,11 @@ class PagedArray<ValueT, Log2PageSize>::Iterator
687695
PagedArray* mParent;
688696
};// Public class PagedArray::Iterator
689697

698+
#ifdef OPENVDB_HAS_CXX20
699+
static_assert(std::random_access_iterator<PagedArray<int, 10UL>::Iterator>,
700+
"Iterator must satisfy random_access_iterator concept");
701+
#endif
702+
690703
////////////////////////////////////////////////////////////////////////////////
691704

692705
// Private member-class of PagedArray implementing a memory page

0 commit comments

Comments
 (0)