8 #ifndef BOOST_GIL_CONCEPTS_COLOR_BASE_HPP     9 #define BOOST_GIL_CONCEPTS_COLOR_BASE_HPP    11 #include <boost/gil/concepts/basic.hpp>    12 #include <boost/gil/concepts/color.hpp>    13 #include <boost/gil/concepts/concept_check.hpp>    14 #include <boost/gil/concepts/fwd.hpp>    16 #include <boost/core/ignore_unused.hpp>    17 #include <type_traits>    19 #if defined(BOOST_CLANG)    20 #pragma clang diagnostic push    21 #pragma clang diagnostic ignored "-Wunknown-pragmas"    22 #pragma clang diagnostic ignored "-Wunused-local-typedefs"    25 #if defined(BOOST_GCC) && (BOOST_GCC >= 40900)    26 #pragma GCC diagnostic push    27 #pragma GCC diagnostic ignored "-Wunused-local-typedefs"    30 namespace boost { 
namespace gil {
    35 template <
typename Element, 
typename Layout, 
int K>
    36 struct homogeneous_color_base;
    40 template <
int K, 
typename E, 
typename L, 
int N>
    41 auto at_c(detail::homogeneous_color_base<E, L, N>& p)
    42     -> 
typename std::add_lvalue_reference<E>::type;
    44 template <
int K, 
typename E, 
typename L, 
int N>
    45 auto at_c(detail::homogeneous_color_base<E, L, N> 
const& p)
    46     -> 
typename std::add_lvalue_reference<typename std::add_const<E>::type>::type;
    48 template <
typename P, 
typename C, 
typename L>
    51 template <
int K, 
typename P, 
typename C, 
typename L>
    52 auto at_c(packed_pixel<P, C, L>& p)
    53     -> 
typename kth_element_reference_type<packed_pixel<P, C, L>, K>::type;
    55 template <
int K, 
typename P, 
typename C, 
typename L>
    56 auto at_c(packed_pixel<P, C, L> 
const& p)
    57     -> 
typename kth_element_const_reference_type<packed_pixel<P, C, L>, K>::type;
    59 template <
typename B, 
typename C, 
typename L, 
bool M>
    60 struct bit_aligned_pixel_reference;
    62 template <
int K, 
typename B, 
typename C, 
typename L, 
bool M>
    63 inline auto at_c(bit_aligned_pixel_reference<B, C, L, M> 
const& p)
    64     -> 
typename kth_element_reference_type
    66             bit_aligned_pixel_reference<B, C, L, M>,
    71 template <
int K, 
typename ColorBase>
    73     -> 
typename std::enable_if
    75             !std::is_const<ColorBase>::value,
    76             typename kth_semantic_element_reference_type<ColorBase, K>::type
    79 template <
int K, 
typename ColorBase>
    81     -> 
typename kth_semantic_element_const_reference_type<ColorBase, K>::type;
   136 template <
typename ColorBase>
   141         gil_function_requires<CopyConstructible<ColorBase>>();
   142         gil_function_requires<EqualityComparable<ColorBase>>();
   144         using color_space_t = 
typename ColorBase::layout_t::color_space_t;
   145         gil_function_requires<ColorSpaceConcept<color_space_t>>();
   147         using channel_mapping_t = 
typename ColorBase::layout_t::channel_mapping_t;
   152         using TN = 
typename kth_element_type<ColorBase, num_elements - 1>::type;
   153         using RN = 
typename kth_element_const_reference_type<ColorBase, num_elements - 1>::type;
   156         boost::ignore_unused(r);
   159         semantic_at_c<0>(cb);
   182 template <
typename ColorBase>
   187         gil_function_requires<ColorBaseConcept<ColorBase>>();
   188         gil_function_requires<Assignable<ColorBase>>();
   189         gil_function_requires<Swappable<ColorBase>>();
   191         using R0 = 
typename kth_element_reference_type<ColorBase, 0>::type;
   193         R0 r = gil::at_c<0>(cb);
   194         gil::at_c<0>(cb) = r;
   206 template <
typename ColorBase>
   211         gil_function_requires<MutableColorBaseConcept<ColorBase>>();
   212         gil_function_requires<Regular<ColorBase>>();
   226 template <
typename ColorBase>
   231         gil_function_requires<ColorBaseConcept<ColorBase>>();
   235         using T0 = 
typename kth_element_type<ColorBase, 0>::type;
   236         using TN = 
typename kth_element_type<ColorBase, num_elements - 1>::type;
   238         static_assert(std::is_same<T0, TN>::value, 
"");   
   240         using R0 = 
typename kth_element_const_reference_type<ColorBase, 0>::type;
   241         R0 r = dynamic_at_c(cb, 0);
   242         boost::ignore_unused(r);
   256 template <
typename ColorBase>
   261         gil_function_requires<ColorBaseConcept<ColorBase>>();
   262         gil_function_requires<HomogeneousColorBaseConcept<ColorBase>>();
   263         using R0 = 
typename kth_element_reference_type<ColorBase, 0>::type;
   264         R0 r = dynamic_at_c(cb, 0);
   265         boost::ignore_unused(r);
   266         dynamic_at_c(cb, 0) = dynamic_at_c(cb, 0);
   281 template <
typename ColorBase>
   286         gil_function_requires<MutableHomogeneousColorBaseConcept<ColorBase>>();
   287         gil_function_requires<Regular<ColorBase>>();
   302 template <
typename ColorBase1, 
typename ColorBase2>
   307         static_assert(std::is_same
   309                 typename ColorBase1::layout_t::color_space_t,
   310                 typename ColorBase2::layout_t::color_space_t
   321 #if defined(BOOST_CLANG)   322 #pragma clang diagnostic pop   325 #if defined(BOOST_GCC) && (BOOST_GCC >= 40900)   326 #pragma GCC diagnostic pop Homogeneous color base that also has a default constructor. Refines Regular.
Definition: concepts/color_base.hpp:282
Homogeneous color base that allows for modifying its elements.
Definition: concepts/color_base.hpp:257
Two color bases are compatible if they have the same color space and their elements are compatible,...
Definition: concepts/color_base.hpp:303
A color base is a container of color elements (such as channels, channel references or channel pointe...
Definition: concepts/color_base.hpp:137
Color base which allows for modifying its elements.
Definition: concepts/color_base.hpp:183
auto semantic_at_c(ColorBase &p) -> typename std::enable_if< !std::is_const< ColorBase >::value, typename kth_semantic_element_reference_type< ColorBase, K >::type >::type
A mutable accessor to the K-th semantic element of a color base.
Definition: color_base_algorithm.hpp:119
auto at_c(detail::homogeneous_color_base< E, L, N > &p) -> typename std::add_lvalue_reference< E >::type
Provides mutable access to the K-th element, in physical order.
Definition: color_base.hpp:597
Color base that also has a default-constructor. Refines Regular.
Definition: concepts/color_base.hpp:207
Returns an integral constant type specifying the number of elements in a color base.
Definition: color_base_algorithm.hpp:42
Color base whose elements all have the same type.
Definition: concepts/color_base.hpp:227