// // 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 #include #include #include #include #include #if defined(BOOST_CLANG) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-local-typedefs" #endif #if defined(BOOST_GCC) && (BOOST_GCC >= 40900) #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 color_space_type; /// where Metafunction >; /// where ColorSpaceConcept::type>; /// typename channel_mapping_type; /// where Metafunction >; /// where ChannelMappingConcept::type>; /// typename is_planar; /// where Metafunction >; /// where SameType::type, bool>; /// }; /// \endcode template struct PixelBasedConcept { void constraints() { using color_space_t = typename color_space_type

::type; gil_function_requires>(); using channel_mapping_t = typename channel_mapping_type

::type ; gil_function_requires>(); static const bool planar = is_planar

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

::value; ignore_unused_variable_warning(nc); } }; /// \brief Concept for homogeneous pixel-based GIL constructs /// \ingroup PixelBasedConcept /// \code /// concept HomogeneousPixelBasedConcept /// { /// typename channel_type; /// where Metafunction>; /// where ChannelConcept::type>; /// }; /// \endcode template struct HomogeneousPixelBasedConcept { void constraints() { gil_function_requires>(); using channel_t = typename channel_type

::type; gil_function_requires>(); } }; }} // namespace boost::gil #if defined(BOOST_CLANG) #pragma clang diagnostic pop #endif #if defined(BOOST_GCC) && (BOOST_GCC >= 40900) #pragma GCC diagnostic pop #endif #endif