8 #ifndef BOOST_GIL_CONCEPTS_PIXEL_ITERATOR_HPP     9 #define BOOST_GIL_CONCEPTS_PIXEL_ITERATOR_HPP    11 #include <boost/gil/concepts/channel.hpp>    12 #include <boost/gil/concepts/color.hpp>    13 #include <boost/gil/concepts/concept_check.hpp>    14 #include <boost/gil/concepts/fwd.hpp>    15 #include <boost/gil/concepts/pixel.hpp>    16 #include <boost/gil/concepts/pixel_based.hpp>    18 #include <boost/iterator/iterator_concepts.hpp>    22 #include <type_traits>    24 #if defined(BOOST_CLANG)    25 #pragma clang diagnostic push    26 #pragma clang diagnostic ignored "-Wunknown-pragmas"    27 #pragma clang diagnostic ignored "-Wunused-local-typedefs"    30 #if defined(BOOST_GCC) && (BOOST_GCC >= 40900)    31 #pragma GCC diagnostic push    32 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"    35 namespace boost { 
namespace gil {
    38 template <
typename It> 
struct const_iterator_type;
    39 template <
typename It> 
struct iterator_is_mutable;
    40 template <
typename It> 
struct is_iterator_adaptor;
    41 template <
typename It, 
typename NewBaseIt> 
struct iterator_adaptor_rebind;
    42 template <
typename It> 
struct iterator_adaptor_get_base;
    50 struct ForwardIteratorIsMutableConcept
    62 struct BidirectionalIteratorIsMutableConcept
    66         gil_function_requires< ForwardIteratorIsMutableConcept<TT>>();
    75 struct RandomAccessIteratorIsMutableConcept
    79         gil_function_requires<BidirectionalIteratorIsMutableConcept<TT>>();
    81         typename std::iterator_traits<TT>::difference_type n = 0;
    82         ignore_unused_variable_warning(n);
    90 template <
typename Iterator>
    91 struct RandomAccessIteratorIsMemoryBasedConcept
    95         std::ptrdiff_t bs = memunit_step(it);
    96         ignore_unused_variable_warning(bs);
    98         it = memunit_advanced(it, 3);
    99         std::ptrdiff_t bd = memunit_distance(it, it);
   100         ignore_unused_variable_warning(bd);
   102         memunit_advance(it,3);
   109 template <
typename Iterator>
   114         gil_function_requires<detail::RandomAccessIteratorIsMutableConcept<Iterator>>();
   116         using ref_t = 
typename std::remove_reference
   118                 typename std::iterator_traits<Iterator>::reference
   121         gil_function_requires<detail::ChannelIsMutableConcept<channel_t>>();
   136 template <
typename T>
   141         using type = 
typename transposed_type<T>::type;
   142         ignore_unused_variable_warning(type{});
   169 template <
typename Iterator>
   174         gil_function_requires<boost_concepts::RandomAccessTraversalConcept<Iterator>>();
   175         gil_function_requires<PixelBasedConcept<Iterator>>();
   177         using value_type = 
typename std::iterator_traits<Iterator>::value_type;
   178         gil_function_requires<PixelValueConcept<value_type>>();
   182         ignore_unused_variable_warning(is_mutable);
   185         const_t const_it(it);
   186         ignore_unused_variable_warning(const_it);
   191     void check_base(std::false_type) {}
   193     void check_base(std::true_type)
   196         gil_function_requires<PixelIteratorConcept<base_t>>();
   208 template <
typename Iterator>
   213         gil_function_requires<PixelIteratorConcept<Iterator>>();
   214         gil_function_requires<detail::PixelIteratorIsMutableConcept<Iterator>>();
   235 template <
typename Iterator>
   240         gil_function_requires<boost_concepts::RandomAccessTraversalConcept<Iterator>>();
   241         gil_function_requires<detail::RandomAccessIteratorIsMemoryBasedConcept<Iterator>>();
   256 template <
typename Iterator>
   261         gil_function_requires<boost_concepts::ForwardTraversalConcept<Iterator>>();
   274 template <
typename Iterator>
   279         gil_function_requires<StepIteratorConcept<Iterator>>();
   280         gil_function_requires<detail::ForwardIteratorIsMutableConcept<Iterator>>();
   316 template <
typename Iterator>
   321         gil_function_requires<boost_concepts::ForwardTraversalConcept<Iterator>>();
   324         gil_function_requires<boost_concepts::ForwardTraversalConcept<base_t>>();
   329         base_t base = it.base();
   330         ignore_unused_variable_warning(base);
   341 template <
typename Iterator>
   346         gil_function_requires<IteratorAdaptorConcept<Iterator>>();
   347         gil_function_requires<detail::ForwardIteratorIsMutableConcept<Iterator>>();
   353 #if defined(BOOST_CLANG)   354 #pragma clang diagnostic pop   357 #if defined(BOOST_GCC) && (BOOST_GCC >= 40900)   358 #pragma GCC diagnostic pop metafunction predicate determining whether the given iterator is a plain one or an adaptor over anoth...
Definition: metafunctions.hpp:34
Pixel iterator that allows for changing its pixel.
Definition: concepts/pixel_iterator.hpp:209
Concept of a random-access iterator that can be advanced in memory units (bytes or bits)
Definition: concepts/pixel_iterator.hpp:236
returns the base iterator for a given iterator adaptor. Provide an specialization when introducing ne...
Definition: metafunctions.hpp:35
Iterator adaptor is a forward iterator adapting another forward iterator.
Definition: concepts/pixel_iterator.hpp:317
Step iterator that allows for modifying its current value.
Definition: concepts/pixel_iterator.hpp:275
Specifies the element type of a homogeneous color base.
Definition: color_base_algorithm.hpp:221
Concept for locators and views that can define a type just like the given locator or view,...
Definition: concepts/pixel_iterator.hpp:137
Changes the base iterator of an iterator adaptor. Provide an specialization when introducing new iter...
Definition: pixel_iterator.hpp:36
Iterator adaptor that is mutable.
Definition: concepts/pixel_iterator.hpp:342
Metafunction predicate returning whether the given iterator allows for changing its values.
Definition: pixel_iterator.hpp:49
Definition: concepts/pixel_iterator.hpp:110
An STL random access traversal iterator over a model of PixelConcept.
Definition: concepts/pixel_iterator.hpp:170
Returns the type of an iterator just like the input iterator, except operating over immutable values.
Definition: pixel_iterator.hpp:40
Step iterator concept.
Definition: concepts/pixel_iterator.hpp:257