summaryrefslogtreecommitdiff
path: root/boost/gil/concepts/pixel_based.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/gil/concepts/pixel_based.hpp')
-rw-r--r--boost/gil/concepts/pixel_based.hpp103
1 files changed, 103 insertions, 0 deletions
diff --git a/boost/gil/concepts/pixel_based.hpp b/boost/gil/concepts/pixel_based.hpp
new file mode 100644
index 0000000000..4c06abebf2
--- /dev/null
+++ b/boost/gil/concepts/pixel_based.hpp
@@ -0,0 +1,103 @@
+//
+// Copyright 2005-2007 Adobe Systems Incorporated
+//
+// Distributed under the Boost Software License, Version 1.0
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+//
+#ifndef BOOST_GIL_CONCEPTS_PIXEL_BASED_HPP
+#define BOOST_GIL_CONCEPTS_PIXEL_BASED_HPP
+
+#include <boost/gil/concepts/basic.hpp>
+#include <boost/gil/concepts/channel.hpp>
+#include <boost/gil/concepts/color.hpp>
+#include <boost/gil/concepts/concept_check.hpp>
+#include <boost/gil/concepts/fwd.hpp>
+
+#include <cstddef>
+
+#if defined(BOOST_CLANG)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-local-typedefs"
+#endif
+
+#if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
+#endif
+
+namespace boost { namespace gil {
+
+/// \ingroup PixelBasedConcept
+/// \brief Concept for all pixel-based GIL constructs.
+///
+/// Pixel-based constructs include pixels, iterators, locators, views and
+/// images whose value type is a pixel.
+///
+/// \code
+/// concept PixelBasedConcept<typename T>
+/// {
+/// typename color_space_type<T>;
+/// where Metafunction<color_space_type<T> >;
+/// where ColorSpaceConcept<color_space_type<T>::type>;
+/// typename channel_mapping_type<T>;
+/// where Metafunction<channel_mapping_type<T> >;
+/// where ChannelMappingConcept<channel_mapping_type<T>::type>;
+/// typename is_planar<T>;
+/// where Metafunction<is_planar<T> >;
+/// where SameType<is_planar<T>::type, bool>;
+/// };
+/// \endcode
+template <typename P>
+struct PixelBasedConcept
+{
+ void constraints()
+ {
+ using color_space_t = typename color_space_type<P>::type;
+ gil_function_requires<ColorSpaceConcept<color_space_t>>();
+
+ using channel_mapping_t = typename channel_mapping_type<P>::type ;
+ gil_function_requires<ChannelMappingConcept<channel_mapping_t>>();
+
+ static const bool planar = is_planar<P>::value;
+ ignore_unused_variable_warning(planar);
+
+ // This is not part of the concept, but should still work
+ static const std::size_t nc = num_channels<P>::value;
+ ignore_unused_variable_warning(nc);
+ }
+};
+
+/// \brief Concept for homogeneous pixel-based GIL constructs
+/// \ingroup PixelBasedConcept
+/// \code
+/// concept HomogeneousPixelBasedConcept<PixelBasedConcept T>
+/// {
+/// typename channel_type<T>;
+/// where Metafunction<channel_type<T>>;
+/// where ChannelConcept<channel_type<T>::type>;
+/// };
+/// \endcode
+template <typename P>
+struct HomogeneousPixelBasedConcept
+{
+ void constraints()
+ {
+ gil_function_requires<PixelBasedConcept<P>>();
+
+ using channel_t = typename channel_type<P>::type;
+ gil_function_requires<ChannelConcept<channel_t>>();
+ }
+};
+
+}} // namespace boost::gil
+
+#if defined(BOOST_CLANG)
+#pragma clang diagnostic pop
+#endif
+
+#if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
+#pragma GCC diagnostic pop
+#endif
+
+#endif