File: g_i_l_0239.html

package info (click to toggle)
boost1.55 1.55.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 487,824 kB
  • ctags: 673,349
  • sloc: cpp: 2,098,430; xml: 106,036; ansic: 46,744; python: 32,427; sh: 11,864; cs: 2,121; asm: 1,640; makefile: 984; perl: 714; yacc: 456; php: 132; fortran: 43; sql: 13; csh: 6
file content (195 lines) | stat: -rw-r--r-- 23,991 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
<!-- Copyright 2008 Lubomir Bourdev and Hailin Jin

     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)
  -->

<!--
    Copyright 2005-2007 Adobe Systems Incorporated
    Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
    or a copy at http://stlab.adobe.com/licenses.html)

    Some files are held under additional license.
    Please see "http://stlab.adobe.com/licenses.html" for more information.
-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<head>
    <TITLE>Generic Image Library: packed_pixel.hpp Source File</TITLE>
    <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=ISO-8859-1"/>
    <LINK TYPE="text/css" REL="stylesheet" HREF="adobe_source.css"/>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" style='width: 100%; margin: 0; padding: 0'><tr>
<td width="100%" valign="top" style='padding-left: 10px; padding-right: 10px; padding-bottom: 10px'>
<div class="qindex"><a class="qindex" href="index.html">Modules</a> 
                  | <a class="qindex" href="classes.html">Alphabetical List</a> 
                  | <a class="qindex" href="annotated.html">Class List</a> 
                  | <a class="qindex" href="dirs.html">Directories</a> 
                  | <a class="qindex" href="files.html">File List</a> 
                  | <a class="qindex" href="../index.html">GIL Home Page</a> 
</div>
<!-- End Header -->
<!-- Generated by Doxygen 1.5.6 -->
  <div class="navpath"><a class="el" href="g_i_l_0076.html">boost</a>&nbsp;&raquo&nbsp;<a class="el" href="g_i_l_0079.html">gil</a>
  </div>
<div class="contents">
<h1>packed_pixel.hpp</h1><a href="g_i_l_0240.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">    Copyright 2005-2007 Adobe Systems Incorporated</span>
<a name="l00003"></a>00003 <span class="comment">   </span>
<a name="l00004"></a>00004 <span class="comment">    Use, modification and distribution are subject to the Boost Software License,</span>
<a name="l00005"></a>00005 <span class="comment">    Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at</span>
<a name="l00006"></a>00006 <span class="comment">    http://www.boost.org/LICENSE_1_0.txt).</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment">    See http://opensource.adobe.com/gil for most recent version including documentation.</span>
<a name="l00009"></a>00009 <span class="comment">*/</span>
<a name="l00010"></a>00010 
<a name="l00011"></a>00011 <span class="comment">/*************************************************************************************************/</span>
<a name="l00012"></a>00012 
<a name="l00013"></a>00013 <span class="preprocessor">#ifndef GIL_PACKED_PIXEL_H</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span><span class="preprocessor">#define GIL_PACKED_PIXEL_H</span>
<a name="l00015"></a>00015 <span class="preprocessor"></span>
<a name="l00024"></a>00024 
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;functional&gt;</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;boost/utility/enable_if.hpp&gt;</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;boost/mpl/bool.hpp&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;boost/mpl/front.hpp&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "<a class="code" href="g_i_l_0094.html" title="GIL configuration file.">gil_config.hpp</a>"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="pixel_8hpp.html" title="pixel class and related utilities">pixel.hpp</a>"</span>
<a name="l00031"></a>00031 
<a name="l00032"></a>00032 <span class="keyword">namespace </span>boost { <span class="keyword">namespace </span>gil {
<a name="l00033"></a>00033 
<a name="l00037"></a>00037 
<a name="l00056"></a>00056 
<a name="l00057"></a>00057 
<a name="l00058"></a>00058 
<a name="l00059"></a>00059 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> BitField,      <span class="comment">// A type that holds the bits of the pixel. Typically an integral type, like boost::uint16_t</span>
<a name="l00060"></a>00060           <span class="keyword">typename</span> ChannelRefVec, <span class="comment">// An MPL vector whose elements are packed channels. They must be constructible from BitField. GIL uses packed_channel_reference</span>
<a name="l00061"></a>00061           <span class="keyword">typename</span> Layout&gt;        <span class="comment">// Layout defining the color space and ordering of the channels. Example value: rgb_layout_t</span>
<a name="l00062"></a><a class="code" href="g_i_l_0595.html">00062</a> <span class="keyword">struct </span><a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a> {
<a name="l00063"></a>00063     BitField _bitfield;
<a name="l00064"></a>00064 
<a name="l00065"></a>00065     <span class="keyword">typedef</span> Layout                layout_t;
<a name="l00066"></a>00066     <span class="keyword">typedef</span> <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>          <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">value_type</a>;
<a name="l00067"></a>00067     <span class="keyword">typedef</span> <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">value_type</a>&amp;           <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">reference</a>;
<a name="l00068"></a>00068     <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">value_type</a>&amp;     <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">const_reference</a>;
<a name="l00069"></a>00069 
<a name="l00070"></a>00070     BOOST_STATIC_CONSTANT(<span class="keywordtype">bool</span>, is_mutable = <a class="code" href="g_i_l_0429.html" title="Traits for channels. Contains the following members:.">channel_traits</a>&lt;<span class="keyword">typename</span> mpl::front&lt;ChannelRefVec&gt;::type&gt;::is_mutable);
<a name="l00071"></a>00071 
<a name="l00072"></a>00072     <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>(){}
<a name="l00073"></a>00073     <span class="keyword">explicit</span> <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>(<span class="keyword">const</span> BitField&amp; bitfield) : _bitfield(bitfield) {}
<a name="l00074"></a>00074 
<a name="l00075"></a>00075     <span class="comment">// Construct from another compatible pixel type</span>
<a name="l00076"></a>00076     <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>(<span class="keyword">const</span> <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>&amp; p) : _bitfield(p.<a class="code" href="g_i_l_0595.html#be60dad4ae2eb0daf0d399e66fc2c11a">_bitfield</a>) {}
<a name="l00077"></a>00077     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P&gt; <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>(<span class="keyword">const</span> P&amp; p, <span class="keyword">typename</span> enable_if_c&lt;is_pixel&lt;P&gt;::value&gt;::type* d=0)            { check_compatible&lt;P&gt;(); static_copy(p,*<span class="keyword">this</span>); }   
<a name="l00078"></a>00078     <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>(<span class="keywordtype">int</span> chan0, <span class="keywordtype">int</span> chan1) : _bitfield(0) { 
<a name="l00079"></a>00079         BOOST_STATIC_ASSERT((<a class="code" href="g_i_l_0581.html" title="Returns the number of channels of a pixel-based GIL construct.">num_channels&lt;packed_pixel&gt;::value</a>==2)); 
<a name="l00080"></a>00080         at_c&lt;0&gt;(*this)=chan0; at_c&lt;1&gt;(*this)=chan1; 
<a name="l00081"></a>00081     } 
<a name="l00082"></a>00082     <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>(<span class="keywordtype">int</span> chan0, <span class="keywordtype">int</span> chan1, <span class="keywordtype">int</span> chan2) : _bitfield(0) { 
<a name="l00083"></a>00083         BOOST_STATIC_ASSERT((<a class="code" href="g_i_l_0581.html" title="Returns the number of channels of a pixel-based GIL construct.">num_channels&lt;packed_pixel&gt;::value</a>==3)); 
<a name="l00084"></a>00084         at_c&lt;0&gt;(*this)=chan0; at_c&lt;1&gt;(*this)=chan1; at_c&lt;2&gt;(*this)=chan2; 
<a name="l00085"></a>00085     } 
<a name="l00086"></a>00086     <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>(<span class="keywordtype">int</span> chan0, <span class="keywordtype">int</span> chan1, <span class="keywordtype">int</span> chan2, <span class="keywordtype">int</span> chan3) : _bitfield(0) { 
<a name="l00087"></a>00087         BOOST_STATIC_ASSERT((<a class="code" href="g_i_l_0581.html" title="Returns the number of channels of a pixel-based GIL construct.">num_channels&lt;packed_pixel&gt;::value</a>==4)); 
<a name="l00088"></a>00088         at_c&lt;0&gt;(*this)=chan0; at_c&lt;1&gt;(*this)=chan1; at_c&lt;2&gt;(*this)=chan2; at_c&lt;3&gt;(*this)=chan3; 
<a name="l00089"></a>00089     } 
<a name="l00090"></a>00090     <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>(<span class="keywordtype">int</span> chan0, <span class="keywordtype">int</span> chan1, <span class="keywordtype">int</span> chan2, <span class="keywordtype">int</span> chan3, <span class="keywordtype">int</span> chan4) : _bitfield(0) { 
<a name="l00091"></a>00091         BOOST_STATIC_ASSERT((<a class="code" href="g_i_l_0581.html" title="Returns the number of channels of a pixel-based GIL construct.">num_channels&lt;packed_pixel&gt;::value</a>==5)); 
<a name="l00092"></a>00092         at_c&lt;0&gt;(*this)=chan0; at_c&lt;1&gt;(*this)=chan1; at_c&lt;2&gt;(*this)=chan2; at_c&lt;3&gt;(*this)=chan3; at_c&lt;4&gt;(*this)=chan4;
<a name="l00093"></a>00093     } 
<a name="l00094"></a>00094 
<a name="l00095"></a>00095     <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>&amp; p)     { _bitfield=p.<a class="code" href="g_i_l_0595.html#be60dad4ae2eb0daf0d399e66fc2c11a">_bitfield</a>; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
<a name="l00096"></a>00096 
<a name="l00097"></a>00097     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P&gt; <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>&amp; operator=(<span class="keyword">const</span> P&amp; p)        { assign(p, mpl::bool_&lt;is_pixel&lt;P&gt;::value&gt;()); <span class="keywordflow">return</span> *<span class="keyword">this</span>; } 
<a name="l00098"></a>00098     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P&gt; <span class="keywordtype">bool</span>          operator==(<span class="keyword">const</span> P&amp; p)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> equal(p, mpl::bool_&lt;is_pixel&lt;P&gt;::value&gt;()); } 
<a name="l00099"></a>00099 
<a name="l00100"></a>00100     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P&gt; <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> P&amp; p)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !(*<span class="keyword">this</span>==p); }
<a name="l00101"></a>00101 
<a name="l00102"></a>00102 <span class="keyword">private</span>:
<a name="l00103"></a>00103     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Pixel&gt; <span class="keyword">static</span> <span class="keywordtype">void</span> check_compatible() { gil_function_requires&lt;PixelsCompatibleConcept&lt;Pixel,packed_pixel&gt; &gt;(); }
<a name="l00104"></a>00104     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Pixel&gt; <span class="keywordtype">void</span> assign(<span class="keyword">const</span> Pixel&amp; p, mpl::true_)       { check_compatible&lt;Pixel&gt;(); static_copy(p,*<span class="keyword">this</span>); } 
<a name="l00105"></a>00105     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Pixel&gt; <span class="keywordtype">bool</span>  equal(<span class="keyword">const</span> Pixel&amp; p, mpl::true_)<span class="keyword"> const </span>{ check_compatible&lt;Pixel&gt;(); <span class="keywordflow">return</span> static_equal(*<span class="keyword">this</span>,p); } 
<a name="l00106"></a>00106 
<a name="l00107"></a>00107 <span class="comment">// Support for assignment/equality comparison of a channel with a grayscale pixel</span>
<a name="l00108"></a>00108     <span class="keyword">static</span> <span class="keywordtype">void</span> check_gray() {  BOOST_STATIC_ASSERT((is_same&lt;typename Layout::color_space_t, gray_t&gt;::value)); }
<a name="l00109"></a>00109     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Channel&gt; <span class="keywordtype">void</span> assign(<span class="keyword">const</span> Channel&amp; chan, mpl::false_)       { check_gray(); at_c&lt;0&gt;(*this)=chan; }
<a name="l00110"></a>00110     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Channel&gt; <span class="keywordtype">bool</span> equal (<span class="keyword">const</span> Channel&amp; chan, mpl::false_)<span class="keyword"> const </span>{ check_gray(); <span class="keywordflow">return</span> at_c&lt;0&gt;(*this)==chan; }
<a name="l00111"></a>00111 <span class="keyword">public</span>:
<a name="l00112"></a>00112     <a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>&amp;  operator= (<span class="keywordtype">int</span> chan)       { check_gray(); at_c&lt;0&gt;(*this)=chan; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
<a name="l00113"></a>00113     <span class="keywordtype">bool</span>           operator==(<span class="keywordtype">int</span> chan)<span class="keyword"> const </span>{ check_gray(); <span class="keywordflow">return</span> at_c&lt;0&gt;(*this)==chan; }
<a name="l00114"></a>00114 };
<a name="l00115"></a>00115 
<a name="l00117"></a>00117 <span class="comment">//  ColorBasedConcept</span>
<a name="l00119"></a>00119 <span class="comment"></span>
<a name="l00120"></a>00120 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> BitField, <span class="keyword">typename</span> ChannelRefVec, <span class="keyword">typename</span> Layout, <span class="keywordtype">int</span> K&gt;  
<a name="l00121"></a>00121 <span class="keyword">struct </span>kth_element_type&lt;<a class="code" href="g_i_l_0595.html" title="Heterogeneous pixel value whose channel references can be constructed from the pixel...">packed_pixel</a>&lt;BitField,ChannelRefVec,Layout&gt;,K&gt; : <span class="keyword">public</span> mpl::at_c&lt;ChannelRefVec,K&gt; {};
<a name="l00122"></a>00122 
<a name="l00123"></a>00123 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> BitField, <span class="keyword">typename</span> ChannelRefVec, <span class="keyword">typename</span> Layout, <span class="keywordtype">int</span> K&gt;  
<a name="l00124"></a>00124 <span class="keyword">struct </span>kth_element_reference_type&lt;packed_pixel&lt;BitField,ChannelRefVec,Layout&gt;,K&gt; : <span class="keyword">public</span> mpl::at_c&lt;ChannelRefVec,K&gt; {};
<a name="l00125"></a>00125 
<a name="l00126"></a>00126 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> BitField, <span class="keyword">typename</span> ChannelRefVec, <span class="keyword">typename</span> Layout, <span class="keywordtype">int</span> K&gt;  
<a name="l00127"></a>00127 <span class="keyword">struct </span>kth_element_const_reference_type&lt;packed_pixel&lt;BitField,ChannelRefVec,Layout&gt;,K&gt; {
<a name="l00128"></a>00128     <span class="keyword">typedef</span> <span class="keyword">typename</span> channel_traits&lt;typename mpl::at_c&lt;ChannelRefVec,K&gt;::type&gt;::const_reference type;
<a name="l00129"></a>00129 };
<a name="l00130"></a>00130 
<a name="l00131"></a>00131 <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> K, <span class="keyword">typename</span> P, <span class="keyword">typename</span> C, <span class="keyword">typename</span> L&gt; <span class="keyword">inline</span>
<a name="l00132"></a>00132 <span class="keyword">typename</span> kth_element_reference_type&lt;packed_pixel&lt;P,C,L&gt;, K&gt;::type 
<a name="l00133"></a>00133 at_c(packed_pixel&lt;P,C,L&gt;&amp; p) { 
<a name="l00134"></a>00134     <span class="keywordflow">return</span> <span class="keyword">typename</span> kth_element_reference_type&lt;packed_pixel&lt;P,C,L&gt;, K&gt;::type(&amp;p._bitfield); 
<a name="l00135"></a>00135 }
<a name="l00136"></a>00136 
<a name="l00137"></a>00137 <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> K, <span class="keyword">typename</span> P, <span class="keyword">typename</span> C, <span class="keyword">typename</span> L&gt; <span class="keyword">inline</span>
<a name="l00138"></a>00138 <span class="keyword">typename</span> kth_element_const_reference_type&lt;packed_pixel&lt;P,C,L&gt;, K&gt;::type 
<a name="l00139"></a>00139 at_c(<span class="keyword">const</span> packed_pixel&lt;P,C,L&gt;&amp; p) { 
<a name="l00140"></a>00140     <span class="keywordflow">return</span> <span class="keyword">typename</span> kth_element_const_reference_type&lt;packed_pixel&lt;P,C,L&gt;, K&gt;::type(&amp;p._bitfield);
<a name="l00141"></a>00141 }
<a name="l00142"></a>00142 
<a name="l00144"></a>00144 <span class="comment">//  PixelConcept</span>
<a name="l00146"></a>00146 <span class="comment"></span>
<a name="l00147"></a>00147 <span class="comment">// Metafunction predicate that flags packed_pixel as a model of PixelConcept. Required by PixelConcept</span>
<a name="l00148"></a>00148 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> BitField, <span class="keyword">typename</span> ChannelRefVec, <span class="keyword">typename</span> Layout&gt;  
<a name="l00149"></a>00149 <span class="keyword">struct </span>is_pixel&lt;packed_pixel&lt;BitField,ChannelRefVec,Layout&gt; &gt; : <span class="keyword">public</span> mpl::true_{};
<a name="l00150"></a>00150 
<a name="l00152"></a>00152 <span class="comment">//  PixelBasedConcept</span>
<a name="l00154"></a>00154 <span class="comment"></span>
<a name="l00155"></a>00155 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P, <span class="keyword">typename</span> C, <span class="keyword">typename</span> Layout&gt;
<a name="l00156"></a>00156 <span class="keyword">struct </span>color_space_type&lt;packed_pixel&lt;P,C,Layout&gt; &gt; {
<a name="l00157"></a>00157     <span class="keyword">typedef</span> <span class="keyword">typename</span> Layout::color_space_t type;
<a name="l00158"></a>00158 }; 
<a name="l00159"></a>00159 
<a name="l00160"></a>00160 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P, <span class="keyword">typename</span> C, <span class="keyword">typename</span> Layout&gt;
<a name="l00161"></a>00161 <span class="keyword">struct </span>channel_mapping_type&lt;packed_pixel&lt;P,C,Layout&gt; &gt; {
<a name="l00162"></a>00162     <span class="keyword">typedef</span> <span class="keyword">typename</span> Layout::channel_mapping_t type;
<a name="l00163"></a>00163 }; 
<a name="l00164"></a>00164 
<a name="l00165"></a>00165 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P, <span class="keyword">typename</span> C, <span class="keyword">typename</span> Layout&gt;
<a name="l00166"></a>00166 <span class="keyword">struct </span>is_planar&lt;packed_pixel&lt;P,C,Layout&gt; &gt; : mpl::false_ {}; 
<a name="l00167"></a>00167 
<a name="l00168"></a>00168 
<a name="l00174"></a>00174 
<a name="l00179"></a>00179 
<a name="l00180"></a>00180 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P, <span class="keyword">typename</span> C, <span class="keyword">typename</span> L&gt;  
<a name="l00181"></a>00181 <span class="keyword">struct </span>iterator_is_mutable&lt;packed_pixel&lt;P,C,L&gt;*&gt; : <span class="keyword">public</span> mpl::bool_&lt;packed_pixel&lt;P,C,L&gt;::is_mutable&gt; {};
<a name="l00182"></a>00182 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P, <span class="keyword">typename</span> C, <span class="keyword">typename</span> L&gt;  
<a name="l00183"></a>00183 <span class="keyword">struct </span>iterator_is_mutable&lt;const packed_pixel&lt;P,C,L&gt;*&gt; : <span class="keyword">public</span> mpl::false_ {};
<a name="l00184"></a>00184 
<a name="l00185"></a>00185 
<a name="l00186"></a>00186 
<a name="l00187"></a>00187 } }  <span class="comment">// namespace boost::gil</span>
<a name="l00188"></a>00188 
<a name="l00189"></a>00189 <span class="keyword">namespace </span>boost {
<a name="l00190"></a>00190     <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P, <span class="keyword">typename</span> C, <span class="keyword">typename</span> L&gt;
<a name="l00191"></a>00191     <span class="keyword">struct </span>has_trivial_constructor&lt;gil::packed_pixel&lt;P,C,L&gt; &gt; : <span class="keyword">public</span> has_trivial_constructor&lt;P&gt; {};
<a name="l00192"></a>00192 }
<a name="l00193"></a>00193 <span class="preprocessor">#endif</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat May 2 13:50:14 2009 for Generic Image Library by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>