Imported Upstream version 1.72.0
[platform/upstream/boost.git] / boost / gil / position_iterator.hpp
index 0e29c2f..8d88804 100644 (file)
 
 #include <boost/iterator/iterator_facade.hpp>
 
+#include <type_traits>
+
 namespace boost { namespace gil {
 
 /// \defgroup PixelIteratorModelVirtual position_iterator
 /// \ingroup PixelIteratorModel
-/// \brief An iterator that remembers its current X,Y position and invokes a function object with it upon dereferencing. Models PixelIteratorConcept, PixelBasedConcept, HasDynamicXStepTypeConcept. Used to create virtual image views.
-
+/// \brief An iterator that remembers its current X,Y position and invokes a function object with it upon dereferencing.
+/// Models PixelIteratorConcept, PixelBasedConcept, HasDynamicXStepTypeConcept. Used to create virtual image views.
 
-/// \brief An iterator that remembers its current X,Y position and invokes a function object with it upon dereferencing. Models PixelIteratorConcept. Used to create virtual image views.
-///    Models: StepIteratorConcept, PixelIteratorConcept, PixelBasedConcept, HasDynamicXStepTypeConcept
+/// \brief An iterator that remembers its current X,Y position and invokes a function object with it upon dereferencing.
+/// Used to create virtual image views.
+/// Models: StepIteratorConcept, PixelIteratorConcept, PixelBasedConcept, HasDynamicXStepTypeConcept
 /// \ingroup PixelIteratorModelVirtual PixelBasedModel
-template <typename Deref, // A function object that given a point returns a pixel reference. Models PixelDereferenceAdaptorConcept
-          int Dim>        // the dimension to advance along
+/// \tparam Deref A function object that given a point returns a pixel reference. Models PixelDereferenceAdaptorConcept
+/// \tparam Dim Dimension to advance along
+template <typename Deref, int Dim>
 struct position_iterator : public iterator_facade<position_iterator<Deref,Dim>,
                                                   typename Deref::value_type,
                                                   std::random_access_iterator_tag,
@@ -74,8 +78,10 @@ struct const_iterator_type<position_iterator<Deref,Dim> > {
     using type = position_iterator<typename Deref::const_t,Dim>;
 };
 
-template <typename Deref,int Dim>
-struct iterator_is_mutable<position_iterator<Deref,Dim> > : public mpl::bool_<Deref::is_mutable> {
+template <typename Deref, int Dim>
+struct iterator_is_mutable<position_iterator<Deref, Dim>>
+    : std::integral_constant<bool, Deref::is_mutable>
+{
 };
 
 /////////////////////////////
@@ -89,7 +95,7 @@ template <typename Deref,int Dim>
 struct channel_mapping_type<position_iterator<Deref,Dim> > : public channel_mapping_type<typename Deref::value_type> {};
 
 template <typename Deref,int Dim>
-struct is_planar<position_iterator<Deref,Dim> > : public mpl::false_ {};
+struct is_planar<position_iterator<Deref, Dim>> : std::false_type {};
 
 template <typename Deref,int Dim>
 struct channel_type<position_iterator<Deref,Dim> > : public channel_type<typename Deref::value_type> {};