1 #ifndef color_yuv_convert_yuv
2 #define color_yuv_convert_yuv
3 
4 //#include "../place/place.hpp"
5 
6 #include "../../_internal/convert.hpp"
7 
8 #include "../../_internal/reformat.hpp"
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 namespace color
19  {
20   namespace _internal
21    {
22 
23     template
24      <
25        typename tag_left_name,  ::color::constant::yuv::reference_enum left_reference_number
26       ,typename tag_right_name, ::color::constant::yuv::reference_enum right_reference_number
27      >
28      struct convert
29       <
30         ::color::category::yuv< tag_left_name,  left_reference_number  >
31        ,::color::category::yuv< tag_right_name, right_reference_number >
32       >
33       {
34        public:
35          typedef ::color::category::yuv< tag_left_name , left_reference_number  > category_left_type;
36          typedef ::color::category::yuv< tag_right_name, right_reference_number > category_right_type;
37 
38          typedef typename ::color::trait::scalar<category_left_type>::instance_type scalar_type;
39 
40 
41          typedef ::color::model< category_left_type >    left_model_type;
42          typedef ::color::model< category_right_type >  right_model_type;
43 
44          typedef ::color::rgb< scalar_type >  rgb_model_type;
45 
46          typedef ::color::trait::container<category_left_type>     container_left_trait_type;
47          typedef ::color::trait::container<category_right_type>    container_right_trait_type;
48 
49          typedef typename container_left_trait_type::input_type         container_left_input_type;
50          typedef typename container_right_trait_type::model_type  container_right_const_input_type;
51 
processcolor::_internal::convert52          static void process
53           (
54             container_left_input_type         left
55            ,container_right_const_input_type  right
56           )
57           {
58            left = left_model_type( rgb_model_type( right_model_type( right ) ) ).container();
59           }
60         };
61 
62 
63     template
64      <
65        typename ::color::constant::yuv::reference_enum reference_number
66       ,typename tag_left_name
67       ,typename tag_right_name
68      >
69      struct convert
70       <
71         ::color::category::yuv< tag_left_name,  reference_number >
72        ,::color::category::yuv< tag_right_name, reference_number >
73       >
74       {
75        public:
76          typedef ::color::category::yuv< tag_left_name , reference_number  > category_left_type;
77          typedef ::color::category::yuv< tag_right_name, reference_number > category_right_type;
78 
79          typedef ::color::trait::container<category_left_type>     container_left_trait_type;
80          typedef ::color::trait::container<category_right_type>    container_right_trait_type;
81 
82          typedef ::color::_internal::reformat< category_left_type, category_right_type >    reformat_type;
83 
84          typedef typename container_left_trait_type::input_type         container_left_input_type;
85          typedef typename container_right_trait_type::model_type  container_right_const_input_type;
86 
processcolor::_internal::convert87          static void process
88           (
89             container_left_input_type         left
90            ,container_right_const_input_type  right
91           )
92           {
93            container_left_trait_type::template set<0>( left, reformat_type::template process<0,0>( container_right_trait_type::template get<0>( right ) ) );
94            container_left_trait_type::template set<1>( left, reformat_type::template process<1,1>( container_right_trait_type::template get<1>( right ) ) );
95            container_left_trait_type::template set<2>( left, reformat_type::template process<2,2>( container_right_trait_type::template get<2>( right ) ) );
96           }
97         };
98 
99    }
100  }
101 
102 #endif
103