graph: fix iterator compatibility since C++17
Add missing iterator typedefs to custom iterator classes when std::iterator inheritance is deprecated since C++17. Signed-off-by: Clément Péron <peron.clem@gmail.com>
This commit is contained in:
@@ -175,8 +175,19 @@ namespace internal {
|
||||
template <typename E>
|
||||
class RepeatedEnumView {
|
||||
public:
|
||||
class Iterator : public std::iterator<std::input_iterator_tag, E> {
|
||||
class Iterator
|
||||
#if __cplusplus < 201703L
|
||||
: public std::iterator<std::input_iterator_tag, E>
|
||||
#endif
|
||||
{
|
||||
public:
|
||||
using difference_type = ptrdiff_t;
|
||||
using value_type = E;
|
||||
#if __cplusplus >= 201703L
|
||||
using iterator_category = std::input_iterator_tag;
|
||||
using pointer = E*;
|
||||
using reference = E&;
|
||||
#endif
|
||||
explicit Iterator(RepeatedField<int>::const_iterator ptr) : ptr_(ptr) {}
|
||||
bool operator==(const Iterator& it) const { return ptr_ == it.ptr_; }
|
||||
bool operator!=(const Iterator& it) const { return ptr_ != it.ptr_; }
|
||||
|
||||
@@ -315,7 +315,7 @@ class BaseGraph {
|
||||
template <typename Graph, typename ArcIterator, typename PropertyT,
|
||||
PropertyT (Graph::*property)(typename Graph::ArcIndex) const>
|
||||
class ArcPropertyIterator
|
||||
#if __cplusplus < 202002L
|
||||
#if __cplusplus < 201703L
|
||||
: public std::iterator<std::input_iterator_tag, PropertyT>
|
||||
#endif
|
||||
{
|
||||
@@ -324,6 +324,11 @@ class ArcPropertyIterator
|
||||
// TODO(b/385094969): This should be `NodeIndex` for integers,
|
||||
// `NodeIndex::value_type` for strong signed integer types.
|
||||
using difference_type = std::ptrdiff_t;
|
||||
#if __cplusplus >= 201703L
|
||||
using iterator_category = std::input_iterator_tag;
|
||||
using pointer = PropertyT*;
|
||||
using reference = PropertyT&;
|
||||
#endif
|
||||
|
||||
ArcPropertyIterator() = default;
|
||||
|
||||
|
||||
@@ -124,13 +124,18 @@ class IntegerRangeIterator
|
||||
// TODO(b/385094969): In C++17, `std::iterator_traits<Iterator>` required
|
||||
// explicitly specifying the iterator category. Remove this when backwards
|
||||
// compatibility with C++17 is no longer needed.
|
||||
#if __cplusplus < 202002L
|
||||
#if __cplusplus < 201703L
|
||||
: public std::iterator<std::input_iterator_tag, IntegerType>
|
||||
#endif
|
||||
{
|
||||
public:
|
||||
using difference_type = ptrdiff_t;
|
||||
using value_type = IntegerType;
|
||||
#if __cplusplus >= 201703L
|
||||
using iterator_category = std::input_iterator_tag;
|
||||
using pointer = IntegerType*;
|
||||
using reference = IntegerType&;
|
||||
#endif
|
||||
|
||||
IntegerRangeIterator() : index_{} {}
|
||||
|
||||
@@ -243,13 +248,18 @@ class IntegerRange : public BeginEndWrapper<IntegerRangeIterator<IntegerType>> {
|
||||
// different iterators with the same index type and sentinel.
|
||||
template <typename IndexT, const IndexT& sentinel, typename Tag>
|
||||
class ChasingIterator
|
||||
#if __cplusplus < 202002L
|
||||
#if __cplusplus < 201703L
|
||||
: public std::iterator<std::input_iterator_tag, IndexT>
|
||||
#endif
|
||||
{
|
||||
public:
|
||||
using difference_type = ptrdiff_t;
|
||||
using value_type = IndexT;
|
||||
#if __cplusplus >= 201703L
|
||||
using iterator_category = std::input_iterator_tag;
|
||||
using pointer = IndexT*;
|
||||
using reference = IndexT&;
|
||||
#endif
|
||||
|
||||
ChasingIterator() : index_(sentinel), next_(nullptr) {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user