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
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