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>
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"
35namespace boost {
namespace gil {
38template <
typename It>
struct const_iterator_type;
39template <
typename It>
struct iterator_is_mutable;
40template <
typename It>
struct is_iterator_adaptor;
41template <
typename It,
typename NewBaseIt>
struct iterator_adaptor_rebind;
42template <
typename It>
struct iterator_adaptor_get_base;
50struct ForwardIteratorIsMutableConcept
62struct BidirectionalIteratorIsMutableConcept
66 gil_function_requires< ForwardIteratorIsMutableConcept<TT>>();
75struct RandomAccessIteratorIsMutableConcept
79 gil_function_requires<BidirectionalIteratorIsMutableConcept<TT>>();
81 typename std::iterator_traits<TT>::difference_type n = 0;
82 ignore_unused_variable_warning(n);
90template <
typename Iterator>
91struct 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);
109template <
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>>();
141 using type =
typename transposed_type<T>::type;
142 ignore_unused_variable_warning(type{});
169template <
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>>();
208template <
typename Iterator>
213 gil_function_requires<PixelIteratorConcept<Iterator>>();
214 gil_function_requires<detail::PixelIteratorIsMutableConcept<Iterator>>();
235template <
typename Iterator>
240 gil_function_requires<boost_concepts::RandomAccessTraversalConcept<Iterator>>();
241 gil_function_requires<detail::RandomAccessIteratorIsMemoryBasedConcept<Iterator>>();
256template <
typename Iterator>
261 gil_function_requires<boost_concepts::ForwardTraversalConcept<Iterator>>();
274template <
typename Iterator>
279 gil_function_requires<StepIteratorConcept<Iterator>>();
280 gil_function_requires<detail::ForwardIteratorIsMutableConcept<Iterator>>();
316template <
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);
341template <
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
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition algorithm.hpp:36
Concept for locators and views that can define a type just like the given locator or view,...
Definition concepts/pixel_iterator.hpp:138
Iterator adaptor is a forward iterator adapting another forward iterator.
Definition concepts/pixel_iterator.hpp:318
Concept of a random-access iterator that can be advanced in memory units (bytes or bits)
Definition concepts/pixel_iterator.hpp:237
Iterator adaptor that is mutable.
Definition concepts/pixel_iterator.hpp:343
Pixel iterator that allows for changing its pixel.
Definition concepts/pixel_iterator.hpp:210
Step iterator that allows for modifying its current value.
Definition concepts/pixel_iterator.hpp:276
An STL random access traversal iterator over a model of PixelConcept.
Definition concepts/pixel_iterator.hpp:171
Step iterator concept.
Definition concepts/pixel_iterator.hpp:258
Returns the type of an iterator just like the input iterator, except operating over immutable values.
Definition pixel_iterator.hpp:40
Definition concepts/pixel_iterator.hpp:111
Specifies the element type of a homogeneous color base.
Definition color_base_algorithm.hpp:225
metafunction predicate determining whether the given iterator is a plain one or an adaptor over anoth...
Definition pixel_iterator.hpp:28
returns the base iterator for a given iterator adaptor. Provide an specialization when introducing ne...
Definition metafunctions.hpp:36
Changes the base iterator of an iterator adaptor. Provide an specialization when introducing new iter...
Definition pixel_iterator.hpp:36
Metafunction predicate returning whether the given iterator allows for changing its values.
Definition pixel_iterator.hpp:49