// // Copyright 2012 Christian Henning, Andreas Pokorny, Lubomir Bourdev // // 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_EXTENSION_TOOLBOX_METAFUNCTIONS_IS_HOMOGENEOUS_HPP #define BOOST_GIL_EXTENSION_TOOLBOX_METAFUNCTIONS_IS_HOMOGENEOUS_HPP #include #include #include namespace boost{ namespace gil { /// is_homogeneous metafunctions /// \brief Determines if a pixel types are homogeneous. template struct is_homogeneous_impl; template struct is_homogeneous_impl : mpl::true_{}; template struct is_homogeneous_impl : mpl::and_< is_homogeneous_impl< C, CMP,Next + 1, Last > , is_same< CMP, typename mpl::at_c::type > > {}; template < typename P > struct is_homogeneous : mpl::false_ {}; // pixel template < typename C, typename L > struct is_homogeneous< pixel > : mpl::true_ {}; template < typename C, typename L > struct is_homogeneous > : mpl::true_ {}; template < typename C, typename L > struct is_homogeneous< pixel& > : mpl::true_ {}; template < typename C, typename L > struct is_homogeneous& > : mpl::true_ {}; // planar pixel reference template struct is_homogeneous< planar_pixel_reference< Channel, ColorSpace > > : mpl::true_ {}; template struct is_homogeneous< const planar_pixel_reference< Channel, ColorSpace > > : mpl::true_ {}; template struct is_homogeneous_impl_p {}; // for packed_pixel template struct is_homogeneous > : is_homogeneous_impl_p< C , typename mpl::at_c< C, 0 >::type , 1 , mpl::size< C >::value > {}; template< typename B , typename C , typename L > struct is_homogeneous< const packed_pixel< B, C, L > > : is_homogeneous_impl_p< C , typename mpl::at_c::type , 1 , mpl::size< C >::value > {}; // for bit_aligned_pixel_reference template struct is_homogeneous > : is_homogeneous_impl::type,1,mpl::size::value> {}; template struct is_homogeneous > : is_homogeneous_impl::type,1,mpl::size::value> {}; } // namespace gil } // namespace boost #endif