8 #ifndef BOOST_GIL_PIXEL_ITERATOR_HPP
9 #define BOOST_GIL_PIXEL_ITERATOR_HPP
11 #include <boost/gil/concepts.hpp>
12 #include <boost/gil/dynamic_step.hpp>
13 #include <boost/gil/utilities.hpp>
14 #include <boost/gil/pixel.hpp>
17 #include <type_traits>
19 namespace boost {
namespace gil {
22 template <
typename Iterator>
23 class memory_based_step_iterator;
27 template <
typename It>
31 template <
typename It>
35 template <
typename It,
typename NewBaseIt>
39 template <
typename It>
48 template <
typename It>
56 struct iterator_is_mutable<T const*> : std::false_type {};
70 template <
typename Pixel>
71 struct dynamic_x_step_type<Pixel*> {
72 using type = memory_based_step_iterator<Pixel *>;
76 template <
typename Pixel>
77 struct dynamic_x_step_type<const Pixel*> {
78 using type = memory_based_step_iterator<const Pixel *>;
86 template <
typename Pixel>
87 struct color_space_type<Pixel*> : color_space_type<Pixel> {};
89 template <
typename Pixel>
90 struct color_space_type<Pixel const*> : color_space_type<Pixel> {};
92 template <
typename Pixel>
93 struct channel_mapping_type<Pixel*> : channel_mapping_type<Pixel> {};
95 template <
typename Pixel>
96 struct channel_mapping_type<Pixel const*> : channel_mapping_type<Pixel> {};
98 template <
typename Pixel>
99 struct is_planar<Pixel*> : is_planar<Pixel> {};
101 template <
typename Pixel>
102 struct is_planar<Pixel const*> : is_planar<Pixel> {};
108 template <
typename Pixel>
109 struct channel_type<Pixel*> : channel_type<Pixel> {};
111 template <
typename Pixel>
112 struct channel_type<Pixel const*> : channel_type<Pixel> {};
123 template <
typename T>
126 template <
typename P>
127 inline std::ptrdiff_t memunit_step(P
const*) {
return sizeof(P); }
129 template <
typename P>
130 inline std::ptrdiff_t memunit_distance(P
const* p1, P
const* p2)
133 gil_reinterpret_cast_c<unsigned char const*>(p2) -
134 gil_reinterpret_cast_c<unsigned char const*>(p1));
137 template <
typename P>
138 inline void memunit_advance(P* &p, std::ptrdiff_t diff)
140 p = (P*)((
unsigned char*)(p)+diff);
143 template <
typename P>
144 inline P* memunit_advanced(
const P* p, std::ptrdiff_t diff)
146 return (P*)((
char*)(p)+diff);
152 template <
typename P>
153 inline P& memunit_advanced_ref(P* p, std::ptrdiff_t diff) {
154 return *memunit_advanced(p,diff);
defined(BOOST_NO_CXX17_HDR_MEMORY_RESOURCE)
Definition: algorithm.hpp:36
Definition: pixel_iterator.hpp:124
Returns the type of an iterator just like the input iterator, except operating over immutable values.
Definition: pixel_iterator.hpp:40
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