1 #ifndef color_cmy_get_red
2 #define color_cmy_get_red
3 
4 // ::color::get::red( c )
5 
6 #include "../../rgb/place/place.hpp"
7 #include "../../rgb/akin/cmy.hpp"
8 #include "../../rgb/trait/component.hpp"
9 
10 #include "../category.hpp"
11 #include "../place/place.hpp"
12 
13 #include "../../generic/operation/invert.hpp"
14 #include "../../_internal/reformat.hpp"
15 #include "../../generic/trait/scalar.hpp"
16 #include "../../generic/get/red.hpp"
17 
18 
19 
20  namespace color
21   {
22    namespace get
23     {
24 
25      template< typename tag_name >
26       inline
27       typename ::color::trait::component< typename ::color::akin::rgb< ::color::category::cmy< tag_name > >::akin_type >::return_type
red(::color::model<::color::category::cmy<tag_name>> const & color_parameter)28       red( ::color::model< ::color::category::cmy<tag_name> > const& color_parameter )
29        {
30         typedef ::color::category::cmy<tag_name> category_type;
31 
32         typedef typename ::color::akin::rgb<category_type>::akin_type     akin_type;
33         enum { red_p  = ::color::place::_internal::red<akin_type>::position_enum };
34         enum { cyan_p = ::color::place::_internal::cyan<category_type>::position_enum };
35 
36         typedef  ::color::operation::_internal::invert< category_type > invert_type;
37         typedef  ::color::_internal::reformat< akin_type, category_type > reformat_type;
38 
39         return reformat_type::template process<red_p,cyan_p>( invert_type::template component<cyan_p>( color_parameter.template get<cyan_p>() ) );
40        }
41 
42     }
43   }
44 
45 #endif
46