]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/gil/concepts/image.hpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / boost / gil / concepts / image.hpp
CommitLineData
92f5a8d4
TL
1//
2// Copyright 2005-2007 Adobe Systems Incorporated
3//
4// Distributed under the Boost Software License, Version 1.0
5// See accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt
7//
8#ifndef BOOST_GIL_CONCEPTS_IMAGE_HPP
9#define BOOST_GIL_CONCEPTS_IMAGE_HPP
10
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/image_view.hpp>
15#include <boost/gil/concepts/point.hpp>
16#include <boost/gil/detail/mp11.hpp>
17
18#include <type_traits>
19
20#if defined(BOOST_CLANG)
21#pragma clang diagnostic push
f67539c2 22#pragma clang diagnostic ignored "-Wunknown-pragmas"
92f5a8d4
TL
23#pragma clang diagnostic ignored "-Wunused-local-typedefs"
24#endif
25
26#if defined(BOOST_GCC) && (BOOST_GCC >= 40900)
27#pragma GCC diagnostic push
28#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
29#endif
30
31namespace boost { namespace gil {
32
33/// \ingroup ImageConcept
34/// \brief N-dimensional container of values
35///
36/// \code
37/// concept RandomAccessNDImageConcept<typename Image> : Regular<Image>
38/// {
39/// typename view_t; where MutableRandomAccessNDImageViewConcept<view_t>;
40/// typename const_view_t = view_t::const_t;
41/// typename point_t = view_t::point_t;
42/// typename value_type = view_t::value_type;
43/// typename allocator_type;
44///
45/// Image::Image(point_t dims, std::size_t alignment=1);
46/// Image::Image(point_t dims, value_type fill_value, std::size_t alignment);
47///
48/// void Image::recreate(point_t new_dims, std::size_t alignment=1);
49/// void Image::recreate(point_t new_dims, value_type fill_value, std::size_t alignment);
50///
51/// const point_t& Image::dimensions() const;
52/// const const_view_t& const_view(const Image&);
53/// const view_t& view(Image&);
54/// };
55/// \endcode
56template <typename Image>
57struct RandomAccessNDImageConcept
58{
59 void constraints()
60 {
61 gil_function_requires<Regular<Image>>();
62
63 using view_t = typename Image::view_t;
64 gil_function_requires<MutableRandomAccessNDImageViewConcept<view_t>>();
65
66 using const_view_t = typename Image::const_view_t;
67 using pixel_t = typename Image::value_type;
68 using point_t = typename Image::point_t;
69 gil_function_requires<PointNDConcept<point_t>>();
70
71 const_view_t cv = const_view(image);
72 ignore_unused_variable_warning(cv);
73 view_t v = view(image);
74 ignore_unused_variable_warning(v);
75
76 pixel_t fill_value;
77 point_t pt = image.dimensions();
78 Image image1(pt);
79 Image image2(pt, 1);
80 Image image3(pt, fill_value, 1);
81 image.recreate(pt);
82 image.recreate(pt, 1);
83 image.recreate(pt, fill_value, 1);
84 }
85 Image image;
86};
87
88
89/// \ingroup ImageConcept
90/// \brief 2-dimensional container of values
91///
92/// \code
93/// concept RandomAccess2DImageConcept<RandomAccessNDImageConcept Image>
94/// {
95/// typename x_coord_t = const_view_t::x_coord_t;
96/// typename y_coord_t = const_view_t::y_coord_t;
97///
98/// Image::Image(x_coord_t width, y_coord_t height, std::size_t alignment=1);
99/// Image::Image(x_coord_t width, y_coord_t height, value_type fill_value, std::size_t alignment);
100///
101/// x_coord_t Image::width() const;
102/// y_coord_t Image::height() const;
103///
104/// void Image::recreate(x_coord_t width, y_coord_t height, std::size_t alignment=1);
105/// void Image::recreate(x_coord_t width, y_coord_t height, value_type fill_value, std::size_t alignment);
106/// };
107/// \endcode
108template <typename Image>
109struct RandomAccess2DImageConcept
110{
111 void constraints()
112 {
113 gil_function_requires<RandomAccessNDImageConcept<Image>>();
114 using x_coord_t = typename Image::x_coord_t;
115 using y_coord_t = typename Image::y_coord_t;
116 using value_t = typename Image::value_type;
117
118 gil_function_requires<MutableRandomAccess2DImageViewConcept<typename Image::view_t>>();
119
120 x_coord_t w=image.width();
121 y_coord_t h=image.height();
122 value_t fill_value;
123 Image im1(w,h);
124 Image im2(w,h,1);
125 Image im3(w,h,fill_value,1);
126 image.recreate(w,h);
127 image.recreate(w,h,1);
128 image.recreate(w,h,fill_value,1);
129 }
130 Image image;
131};
132
133/// \ingroup ImageConcept
134/// \brief 2-dimensional image whose value type models PixelValueConcept
135///
136/// \code
137/// concept ImageConcept<RandomAccess2DImageConcept Image>
138/// {
139/// where MutableImageViewConcept<view_t>;
140/// typename coord_t = view_t::coord_t;
141/// };
142/// \endcode
143template <typename Image>
144struct ImageConcept
145{
146 void constraints()
147 {
148 gil_function_requires<RandomAccess2DImageConcept<Image>>();
149 gil_function_requires<MutableImageViewConcept<typename Image::view_t>>();
150 using coord_t = typename Image::coord_t;
151 static_assert(num_channels<Image>::value == mp11::mp_size<typename color_space_type<Image>::type>::value, "");
152
153 static_assert(std::is_same<coord_t, typename Image::x_coord_t>::value, "");
154 static_assert(std::is_same<coord_t, typename Image::y_coord_t>::value, "");
155 }
156 Image image;
157};
158
159}} // namespace boost::gil
160
161#if defined(BOOST_CLANG)
162#pragma clang diagnostic pop
163#endif
164
165#if defined(BOOST_GCC) && (BOOST_GCC >= 40900)
166#pragma GCC diagnostic pop
167#endif
168
169#endif