8 #ifndef BOOST_GIL_CONCEPTS_IMAGE_VIEW_HPP     9 #define BOOST_GIL_CONCEPTS_IMAGE_VIEW_HPP    11 #include <boost/gil/concepts/basic.hpp>    12 #include <boost/gil/concepts/concept_check.hpp>    13 #include <boost/gil/concepts/fwd.hpp>    14 #include <boost/gil/concepts/pixel.hpp>    15 #include <boost/gil/concepts/pixel_dereference.hpp>    16 #include <boost/gil/concepts/pixel_iterator.hpp>    17 #include <boost/gil/concepts/pixel_locator.hpp>    18 #include <boost/gil/concepts/point.hpp>    19 #include <boost/gil/concepts/detail/utility.hpp>    23 #include <type_traits>    25 #if defined(BOOST_CLANG)    26 #pragma clang diagnostic push    27 #pragma clang diagnostic ignored "-Wunknown-pragmas"    28 #pragma clang diagnostic ignored "-Wunused-local-typedefs"    31 #if defined(BOOST_GCC) && (BOOST_GCC >= 40900)    32 #pragma GCC diagnostic push    33 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"    34 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"    37 namespace boost { 
namespace gil {
   102 template <
typename View>
   107         gil_function_requires<Regular<View>>();
   109         using value_type = 
typename View::value_type;
   110         using reference = 
typename View::reference; 
   111         using pointer = 
typename View::pointer;
   112         using difference_type = 
typename View::difference_type; 
   113         using const_t = 
typename View::const_t; 
   114         using point_t = 
typename View::point_t; 
   115         using locator = 
typename View::locator; 
   116         using iterator = 
typename View::iterator;
   117         using const_iterator = 
typename View::const_iterator;
   118         using reverse_iterator = 
typename View::reverse_iterator;
   119         using size_type = 
typename View::size_type;
   120         static const std::size_t N=View::num_dimensions;
   122         gil_function_requires<RandomAccessNDLocatorConcept<locator>>();
   123         gil_function_requires<boost_concepts::RandomAccessTraversalConcept<iterator>>();
   124         gil_function_requires<boost_concepts::RandomAccessTraversalConcept<reverse_iterator>>();
   126         using first_it_type = 
typename View::template axis<0>::iterator;
   127         using last_it_type = 
typename View::template axis<N-1>::iterator;
   128         gil_function_requires<boost_concepts::RandomAccessTraversalConcept<first_it_type>>();
   129         gil_function_requires<boost_concepts::RandomAccessTraversalConcept<last_it_type>>();
   135         gil_function_requires<PointNDConcept<point_t>>();
   136         static_assert(point_t::num_dimensions == N, 
"");
   137         static_assert(std::is_same
   139                 typename std::iterator_traits<first_it_type>::difference_type,
   140                 typename point_t::template axis<0>::coord_t
   142         static_assert(std::is_same
   144                 typename std::iterator_traits<last_it_type>::difference_type,
   145                 typename point_t::template axis<N-1>::coord_t
   151         reverse_iterator rit;
   152         difference_type d; detail::initialize_it(d); ignore_unused_variable_warning(d);
   156         p = view.dimensions();
   158         size_type sz = view.size(); ignore_unused_variable_warning(sz);
   159         bool is_contiguous = view.is_1d_traversable();
   160         ignore_unused_variable_warning(is_contiguous);
   167         reference r1 = view[d]; ignore_unused_variable_warning(r1); 
   168         reference r2 = view(p); ignore_unused_variable_warning(r2); 
   171         first_it_type fi = view.template axis_iterator<0>(p);
   172         ignore_unused_variable_warning(fi);
   173         last_it_type li = view.template axis_iterator<N-1>(p);
   174         ignore_unused_variable_warning(li);
   176         using deref_t = PixelDereferenceAdaptorArchetype<typename View::value_type>;
   177         using dtype = 
typename View::template add_deref<deref_t>::type;
   220 template <
typename View>
   225         gil_function_requires<RandomAccessNDImageViewConcept<View>>();
   226         static_assert(View::num_dimensions == 2, 
"");
   229         gil_function_requires<RandomAccess2DLocatorConcept<typename View::locator>>();
   233         using transposed_t = 
typename transposed_type<View>::type;
   234         using x_iterator = 
typename View::x_iterator;
   235         using y_iterator = 
typename View::y_iterator;
   236         using x_coord_t = 
typename View::x_coord_t;
   237         using y_coord_t = 
typename View::y_coord_t;
   238         using xy_locator = 
typename View::xy_locator;
   240         x_coord_t xd = 0; ignore_unused_variable_warning(xd);
   241         y_coord_t yd = 0; ignore_unused_variable_warning(yd);
   244         typename View::point_t d;
   246         View(xd, yd, xy_locator()); 
   248         xy_locator lc = view.xy_at(xd, yd);
   251         typename View::reference r = view(xd, yd);
   252         ignore_unused_variable_warning(r);
   257         xit = view.x_at(xd,yd);
   258         xit = view.row_begin(xd);
   259         xit = view.row_end(xd);
   262         yit = view.y_at(xd,yd);
   263         yit = view.col_begin(xd);
   264         yit = view.col_end(xd);
   273 template <
typename View>
   278         using value_type = 
typename View::value_type;
   279         using iterator = 
typename View::iterator;
   280         using const_iterator =  
typename View::const_iterator;
   281         using reference = 
typename View::reference;
   282         using const_reference = 
typename View::const_reference;
   283         using pointer = 
typename View::pointer;
   284         using difference_type = 
typename View::difference_type;
   285         using size_type=  
typename View::size_type;
   298         ignore_unused_variable_warning(s);
   312 template <
typename View>
   317         gil_function_requires<CollectionImageViewConcept<View>>();
   319         using reference = 
typename View::reference;
   320         using const_reference = 
typename View::const_reference;
   322         reference r = view.front();
   323         ignore_unused_variable_warning(r);
   325         const_reference cr = view.front();
   326         ignore_unused_variable_warning(cr);
   335 template <
typename View>
   340         gil_function_requires<CollectionImageViewConcept<View>>();
   342         using reverse_iterator = 
typename View::reverse_iterator;
   343         using reference = 
typename View::reference;
   344         using const_reference = 
typename View::const_reference;
   350         reference r = view.back();
   351         ignore_unused_variable_warning(r);
   353         const_reference cr = view.back();
   354         ignore_unused_variable_warning(cr);
   374 template <
typename View>
   379         gil_function_requires<RandomAccess2DImageViewConcept<View>>();
   382         gil_function_requires<PixelLocatorConcept<typename View::xy_locator>>();
   384         static_assert(std::is_same<typename View::x_coord_t, typename View::y_coord_t>::value, 
"");
   386         using coord_t = 
typename View::coord_t; 
   387         std::size_t num_chan = view.num_channels(); ignore_unused_variable_warning(num_chan);
   395 template <
typename View>
   400         gil_function_requires<detail::RandomAccessNDLocatorIsMutableConcept<typename View::locator>>();
   402         gil_function_requires<detail::RandomAccessIteratorIsMutableConcept<typename View::iterator>>();
   404         gil_function_requires<detail::RandomAccessIteratorIsMutableConcept
   406                 typename View::reverse_iterator
   409         gil_function_requires<detail::RandomAccessIteratorIsMutableConcept
   411                 typename View::template axis<0>::iterator
   414         gil_function_requires<detail::RandomAccessIteratorIsMutableConcept
   416                 typename View::template axis<View::num_dimensions - 1>::iterator
   419         typename View::difference_type diff;
   421         ignore_unused_variable_warning(diff);
   423         typename View::point_t pt;
   424         typename View::value_type v;
   434 template <
typename View>
   439         gil_function_requires<detail::RandomAccessNDImageViewIsMutableConcept<View>>();
   440         typename View::x_coord_t xd = 0; ignore_unused_variable_warning(xd);
   441         typename View::y_coord_t yd = 0; ignore_unused_variable_warning(yd);
   442         typename View::value_type v; initialize_it(v);
   449 template <
typename View>
   454         gil_function_requires<detail::RandomAccess2DImageViewIsMutableConcept<View>>();
   469 template <
typename View>
   474         gil_function_requires<RandomAccessNDImageViewConcept<View>>();
   475         gil_function_requires<detail::RandomAccessNDImageViewIsMutableConcept<View>>();
   486 template <
typename View>
   491         gil_function_requires<RandomAccess2DImageViewConcept<View>>();
   492         gil_function_requires<detail::RandomAccess2DImageViewIsMutableConcept<View>>();
   503 template <
typename View>
   508         gil_function_requires<ImageViewConcept<View>>();
   509         gil_function_requires<detail::PixelImageViewIsMutableConcept<View>>();
   521 template <
typename V1, 
typename V2>
   538 template <
typename V1, 
typename V2>
   549 #if defined(BOOST_CLANG)   550 #pragma clang diagnostic pop   553 #if defined(BOOST_GCC) && (BOOST_GCC >= 40900)   554 #pragma GCC diagnostic pop 2-dimensional view over mutable values
Definition: concepts/image_view.hpp:487
Definition: concepts/image_view.hpp:396
N-dimensional view over mutable values.
Definition: concepts/image_view.hpp:470
GIL view as Collection.
Definition: concepts/image_view.hpp:274
Returns whether two views are compatible.
Definition: concepts/image_view.hpp:522
GIL view as ReversibleCollection.
Definition: concepts/image_view.hpp:336
Definition: concepts/image_view.hpp:435
Base template for types that model HasDynamicYStepTypeConcept.
Definition: dynamic_step.hpp:21
GIL's 2-dimensional view over mutable GIL pixels.
Definition: concepts/image_view.hpp:504
Returns whether two pixels are compatible Pixels are compatible if their channels and color space typ...
Definition: concepts/pixel.hpp:226
GIL's 2-dimensional view over immutable GIL pixels.
Definition: concepts/image_view.hpp:375
2-dimensional view over immutable values
Definition: concepts/image_view.hpp:221
GIL view as ForwardCollection.
Definition: concepts/image_view.hpp:313
Views are compatible if they have the same color spaces and compatible channel values.
Definition: concepts/image_view.hpp:539
N-dimensional view over immutable values.
Definition: concepts/image_view.hpp:103
Definition: concepts/image_view.hpp:450
Base template for types that model HasDynamicXStepTypeConcept.
Definition: dynamic_step.hpp:17