diff options
Diffstat (limited to 'boost/gil/concepts/pixel_based.hpp')
-rw-r--r-- | boost/gil/concepts/pixel_based.hpp | 103 |
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 |