2
0
mirror of https://github.com/boostorg/gil.git synced 2026-01-28 19:22:11 +00:00
Files
gil/html/reference/planar__pixel__iterator_8hpp_source.html
2019-10-30 00:58:20 +00:00

80 lines
43 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- HTML header for doxygen 1.8.13-->
<!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">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Generic Image Library: planar_pixel_iterator.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-boost.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div class="boost-header">
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
<tr>
<td valign="top" width="300">
<h3><a href="../index.html"><img alt="Boost GIL" src="../_static/gil.png" border="0"></a></h3>
</td>
<td ><h1 align="center"><a href="../index.html"></a></h1></td>
<td></td>
</tr>
</table>
</div>
<hr/>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_1878a3f4746a95c6aad317458cc7ef80.html">boost</a></li><li class="navelem"><a class="el" href="dir_df4750f408086f9b9c1b5ee4251365ff.html">gil</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">planar_pixel_iterator.hpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// Copyright 2005-2007 Adobe Systems Incorporated</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the Boost Software License, Version 1.0</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// See accompanying file LICENSE_1_0.txt or copy at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// http://www.boost.org/LICENSE_1_0.txt</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#ifndef BOOST_GIL_PLANAR_PIXEL_ITERATOR_HPP</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#define BOOST_GIL_PLANAR_PIXEL_ITERATOR_HPP</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;boost/gil/pixel.hpp&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;boost/gil/step_iterator.hpp&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;boost/gil/detail/mp11.hpp&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;boost/iterator/iterator_facade.hpp&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;iterator&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceboost.html">boost</a> { <span class="keyword">namespace </span>gil {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">//forward declaration (as this file is included in planar_pixel_reference.hpp)</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ChannelReference, <span class="keyword">typename</span> ColorSpace&gt;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">struct </span>planar_pixel_reference;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ChannelPtr, <span class="keyword">typename</span> ColorSpace&gt;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">struct </span>planar_pixel_iterator</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; :</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; iterator_facade</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; &lt;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; planar_pixel_iterator&lt;ChannelPtr, ColorSpace&gt;,</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; pixel&lt;typename std::iterator_traits&lt;ChannelPtr&gt;::value_type,layout&lt;ColorSpace&gt;&gt;,</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; std::random_access_iterator_tag,</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; planar_pixel_reference&lt;typename std::iterator_traits&lt;ChannelPtr&gt;::reference, ColorSpace&gt; const</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; &gt;,</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; detail::homogeneous_color_base</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; &lt;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; ChannelPtr,</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; layout&lt;ColorSpace&gt;,</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; mp11::mp_size&lt;ColorSpace&gt;::value</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; &gt;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">using</span> parent_t = iterator_facade</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; &lt;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; planar_pixel_iterator&lt;ChannelPtr, ColorSpace&gt;,</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; pixel&lt;typename std::iterator_traits&lt;ChannelPtr&gt;::value_type,layout&lt;ColorSpace&gt;&gt;,</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; std::random_access_iterator_tag,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; planar_pixel_reference&lt;typename std::iterator_traits&lt;ChannelPtr&gt;::reference, ColorSpace&gt; <span class="keyword">const</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &gt;;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">using</span> color_base_parent_t = detail::homogeneous_color_base</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; &lt;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; ChannelPtr,</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; layout&lt;ColorSpace&gt;,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; mp11::mp_size&lt;ColorSpace&gt;::value</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; &gt;;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">using</span> channel_t = <span class="keyword">typename</span> std::iterator_traits&lt;ChannelPtr&gt;::value_type;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">using</span> value_type = <span class="keyword">typename</span> parent_t::value_type;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">using</span> reference = <span class="keyword">typename</span> parent_t::reference;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">using</span> difference_type = <span class="keyword">typename</span> parent_t::difference_type;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; planar_pixel_iterator() : color_base_parent_t(0) {}</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; planar_pixel_iterator(<span class="keywordtype">bool</span>) {} <span class="comment">// constructor that does not fill with zero (for performance)</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; planar_pixel_iterator(<span class="keyword">const</span> ChannelPtr&amp; v0, <span class="keyword">const</span> ChannelPtr&amp; v1) : color_base_parent_t(v0,v1) {}</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; planar_pixel_iterator(<span class="keyword">const</span> ChannelPtr&amp; v0, <span class="keyword">const</span> ChannelPtr&amp; v1, <span class="keyword">const</span> ChannelPtr&amp; v2) : color_base_parent_t(v0,v1,v2) {}</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; planar_pixel_iterator(<span class="keyword">const</span> ChannelPtr&amp; v0, <span class="keyword">const</span> ChannelPtr&amp; v1, <span class="keyword">const</span> ChannelPtr&amp; v2, <span class="keyword">const</span> ChannelPtr&amp; v3) : color_base_parent_t(v0,v1,v2,v3) {}</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; planar_pixel_iterator(<span class="keyword">const</span> ChannelPtr&amp; v0, <span class="keyword">const</span> ChannelPtr&amp; v1, <span class="keyword">const</span> ChannelPtr&amp; v2, <span class="keyword">const</span> ChannelPtr&amp; v3, <span class="keyword">const</span> ChannelPtr&amp; v4) : color_base_parent_t(v0,v1,v2,v3,v4) {}</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC1,<span class="keyword">typename</span> C1&gt;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; planar_pixel_iterator(<span class="keyword">const</span> planar_pixel_iterator&lt;IC1,C1&gt;&amp; ptr) : color_base_parent_t(ptr) {}</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P&gt;</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="structboost_1_1gil_1_1planar__pixel__iterator.html#a17b05b4a8da5c31609da1e02bd7ebed1"> 97</a></span>&#160; <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html#a17b05b4a8da5c31609da1e02bd7ebed1">planar_pixel_iterator</a>(P* pix) : color_base_parent_t(pix, true) {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; function_requires&lt;PixelsCompatibleConcept&lt;P,value_type&gt; &gt;();</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">struct </span>address_of { <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; T* operator()(T&amp; t) { <span class="keywordflow">return</span> &amp;t; } };</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> P&gt;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator</a>&amp; operator=(P* pix) {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; function_requires&lt;PixelsCompatibleConcept&lt;P,value_type&gt; &gt;();</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; static_transform(*pix,*<span class="keyword">this</span>, address_of());</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// PERFORMANCE_CHECK: Compare to this:</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">//this-&gt;template semantic_at_c&lt;0&gt;()=&amp;pix-&gt;template semantic_at_c&lt;0&gt;();</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">//this-&gt;template semantic_at_c&lt;1&gt;()=&amp;pix-&gt;template semantic_at_c&lt;1&gt;();</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">//this-&gt;template semantic_at_c&lt;2&gt;()=&amp;pix-&gt;template semantic_at_c&lt;2&gt;();</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="structboost_1_1gil_1_1planar__pixel__iterator.html#ade1279c4ed222b6efb0867c038765ea1"> 116</a></span>&#160; reference <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html#ade1279c4ed222b6efb0867c038765ea1">operator[]</a>(difference_type d)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> memunit_advanced_ref(*<span class="keyword">this</span>,d*<span class="keyword">sizeof</span>(channel_t));}</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; reference operator-&gt;()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> **<span class="keyword">this</span>; }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// PERFORMANCE_CHECK: Remove?</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordtype">bool</span> operator&lt; (<span class="keyword">const</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator</a>&amp; ptr)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> gil::at_c&lt;0&gt;(*this)&lt; gil::at_c&lt;0&gt;(ptr); }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator</a>&amp; ptr)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> gil::at_c&lt;0&gt;(*this)!=gil::at_c&lt;0&gt;(ptr); }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>boost::iterator_core_access;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordtype">void</span> increment() { static_transform(*<span class="keyword">this</span>,*<span class="keyword">this</span>,<a class="code" href="structboost_1_1gil_1_1detail_1_1inc.html">detail::inc&lt;ChannelPtr&gt;</a>()); }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordtype">void</span> decrement() { static_transform(*<span class="keyword">this</span>,*<span class="keyword">this</span>,<a class="code" href="structboost_1_1gil_1_1detail_1_1dec.html">detail::dec&lt;ChannelPtr&gt;</a>()); }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">void</span> advance(std::ptrdiff_t d){ static_transform(*<span class="keyword">this</span>,*<span class="keyword">this</span>,std::bind(<a class="code" href="structboost_1_1gil_1_1detail_1_1plus__asymmetric.html">detail::plus_asymmetric&lt;ChannelPtr,std::ptrdiff_t&gt;</a>(),std::placeholders::_1,d)); }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; reference dereference()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this-&gt;<span class="keyword">template</span> deref&lt;reference&gt;(); }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; std::ptrdiff_t distance_to(<span class="keyword">const</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator</a>&amp; it)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> gil::at_c&lt;0&gt;(it)-gil::at_c&lt;0&gt;(*<span class="keyword">this</span>); }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="group___s_t_l_optimizations.html#ga2902a23650ef266e80874ce5df076079">equal</a>(<span class="keyword">const</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator</a>&amp; it)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> gil::at_c&lt;0&gt;(*this)==gil::at_c&lt;0&gt;(it); }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;};</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="keyword">namespace </span>detail {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> I&gt;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="keyword">struct </span>channel_iterator_is_mutable : std::true_type {};</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> I&gt;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="keyword">struct </span>channel_iterator_is_mutable&lt;I const*&gt; : std::false_type {};</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;} <span class="comment">// namespace detail</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="keyword">struct </span><a class="code" href="structboost_1_1gil_1_1const__iterator__type.html">const_iterator_type&lt;planar_pixel_iterator&lt;IC,C&gt;</a> &gt; {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keyword">using</span> channel_t = <span class="keyword">typename</span> std::iterator_traits&lt;IC&gt;::value_type;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">using</span> type = <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator&lt;typename channel_traits&lt;channel_t&gt;::const_pointer</a>,C&gt;;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;};</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">// The default implementation when the iterator is a C pointer is to use the standard constness semantics</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="keyword">struct </span><a class="code" href="structboost_1_1gil_1_1iterator__is__mutable.html">iterator_is_mutable</a>&lt;planar_pixel_iterator&lt;IC,C&gt; &gt; : <span class="keyword">public</span> detail::channel_iterator_is_mutable&lt;IC&gt; {};</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment">// ColorBasedConcept</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C, <span class="keywordtype">int</span> K&gt;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="keyword">struct </span>kth_element_type&lt;planar_pixel_iterator&lt;IC, C&gt;, K&gt;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;{</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">using</span> type = IC;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;};</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C, <span class="keywordtype">int</span> K&gt;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="keyword">struct </span>kth_element_reference_type&lt;planar_pixel_iterator&lt;IC, C&gt;, K&gt;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; : std::add_lvalue_reference&lt;IC&gt; {};</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C, <span class="keywordtype">int</span> K&gt;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="keyword">struct </span>kth_element_const_reference_type&lt;planar_pixel_iterator&lt;IC, C&gt;, K&gt;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; : std::add_lvalue_reference&lt;typename std::add_const&lt;IC&gt;::type&gt;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;{};</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment">// HomogeneousPixelBasedConcept</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="keyword">struct </span>color_space_type&lt;planar_pixel_iterator&lt;IC,C&gt;&gt;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;{</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">using</span> type = C;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;};</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="keyword">struct </span>channel_mapping_type&lt;planar_pixel_iterator&lt;IC, C&gt;&gt;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; : channel_mapping_type&lt;typename planar_pixel_iterator&lt;IC,C&gt;::value_type&gt;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;{};</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="keyword">struct </span>is_planar&lt;planar_pixel_iterator&lt;IC, C&gt;&gt; : std::true_type {};</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="keyword">struct </span><a class="code" href="structboost_1_1gil_1_1channel__type.html">channel_type</a>&lt;planar_pixel_iterator&lt;IC, C&gt;&gt;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;{</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keyword">using</span> type = <span class="keyword">typename</span> std::iterator_traits&lt;IC&gt;::value_type;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;};</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment">// MemoryBasedIteratorConcept</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="keyword">inline</span> std::ptrdiff_t memunit_step(<span class="keyword">const</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator&lt;IC,C&gt;</a>&amp;) { <span class="keywordflow">return</span> <span class="keyword">sizeof</span>(<span class="keyword">typename</span> std::iterator_traits&lt;IC&gt;::value_type); }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="keyword">inline</span> std::ptrdiff_t memunit_distance(<span class="keyword">const</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator&lt;IC,C&gt;</a>&amp; p1, <span class="keyword">const</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator&lt;IC,C&gt;</a>&amp; p2) {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span> memunit_distance(gil::at_c&lt;0&gt;(p1),gil::at_c&lt;0&gt;(p2));</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;}</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC&gt;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="keyword">struct </span>memunit_advance_fn {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; memunit_advance_fn(std::ptrdiff_t diff) : _diff(diff) {}</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; IC operator()(<span class="keyword">const</span> IC&amp; p)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> memunit_advanced(p,_diff); }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; std::ptrdiff_t _diff;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;};</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> memunit_advance(<a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator&lt;IC,C&gt;</a>&amp; p, std::ptrdiff_t diff) {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; static_transform(p, p, memunit_advance_fn&lt;IC&gt;(diff));</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;}</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="keyword">inline</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator&lt;IC,C&gt;</a> memunit_advanced(<span class="keyword">const</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator&lt;IC,C&gt;</a>&amp; p, std::ptrdiff_t diff) {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator&lt;IC,C&gt;</a> ret=p;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; memunit_advance(ret, diff);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;}</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ChannelPtr, <span class="keyword">typename</span> ColorSpace&gt;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="keyword">inline</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__reference.html">planar_pixel_reference&lt;typename std::iterator_traits&lt;ChannelPtr&gt;::reference</a>,ColorSpace&gt;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; memunit_advanced_ref(<span class="keyword">const</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__iterator.html">planar_pixel_iterator&lt;ChannelPtr,ColorSpace&gt;</a>&amp; ptr, std::ptrdiff_t diff) {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structboost_1_1gil_1_1planar__pixel__reference.html">planar_pixel_reference&lt;typename std::iterator_traits&lt;ChannelPtr&gt;::reference</a>,ColorSpace&gt;(ptr, diff);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;}</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="comment">// HasDynamicXStepTypeConcept</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IC, <span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="keyword">struct </span><a class="code" href="structboost_1_1gil_1_1dynamic__x__step__type.html">dynamic_x_step_type</a>&lt;planar_pixel_iterator&lt;IC,C&gt; &gt; {</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keyword">using</span> type = <a class="code" href="classboost_1_1gil_1_1memory__based__step__iterator.html">memory_based_step_iterator&lt;planar_pixel_iterator&lt;IC,C&gt;</a>&gt;;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;};</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;} } <span class="comment">// namespace boost::gil</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="structboost_1_1gil_1_1planar__pixel__reference_html"><div class="ttname"><a href="structboost_1_1gil_1_1planar__pixel__reference.html">boost::gil::planar_pixel_reference</a></div><div class="ttdoc">A reference proxy to a planar pixel. </div><div class="ttdef"><b>Definition:</b> metafunctions.hpp:25</div></div>
<div class="ttc" id="structboost_1_1gil_1_1detail_1_1plus__asymmetric_html"><div class="ttname"><a href="structboost_1_1gil_1_1detail_1_1plus__asymmetric.html">boost::gil::detail::plus_asymmetric</a></div><div class="ttdoc">plus function object whose arguments may be of different type. </div><div class="ttdef"><b>Definition:</b> utilities.hpp:218</div></div>
<div class="ttc" id="namespaceboost_html"><div class="ttname"><a href="namespaceboost.html">boost</a></div><div class="ttdef"><b>Definition:</b> algorithm.hpp:30</div></div>
<div class="ttc" id="structboost_1_1gil_1_1planar__pixel__iterator_html"><div class="ttname"><a href="structboost_1_1gil_1_1planar__pixel__iterator.html">boost::gil::planar_pixel_iterator</a></div><div class="ttdoc">An iterator over planar pixels. Models HomogeneousColorBaseConcept, PixelIteratorConcept, HomogeneousPixelBasedConcept, MemoryBasedIteratorConcept, HasDynamicXStepTypeConcept. </div><div class="ttdef"><b>Definition:</b> algorithm.hpp:34</div></div>
<div class="ttc" id="structboost_1_1gil_1_1detail_1_1dec_html"><div class="ttname"><a href="structboost_1_1gil_1_1detail_1_1dec.html">boost::gil::detail::dec</a></div><div class="ttdoc">operator wrapped in a function object </div><div class="ttdef"><b>Definition:</b> utilities.hpp:239</div></div>
<div class="ttc" id="structboost_1_1gil_1_1detail_1_1inc_html"><div class="ttname"><a href="structboost_1_1gil_1_1detail_1_1inc.html">boost::gil::detail::inc</a></div><div class="ttdoc">operator++ wrapped in a function object </div><div class="ttdef"><b>Definition:</b> utilities.hpp:230</div></div>
<div class="ttc" id="group___s_t_l_optimizations_html_ga2902a23650ef266e80874ce5df076079"><div class="ttname"><a href="group___s_t_l_optimizations.html#ga2902a23650ef266e80874ce5df076079">std::equal</a></div><div class="ttdeci">BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d&lt; Loc1 &gt; first, boost::gil::iterator_from_2d&lt; Loc1 &gt; last, boost::gil::iterator_from_2d&lt; Loc2 &gt; first2)</div><div class="ttdoc">std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d </div><div class="ttdef"><b>Definition:</b> algorithm.hpp:1029</div></div>
<div class="ttc" id="structboost_1_1gil_1_1channel__type_html"><div class="ttname"><a href="structboost_1_1gil_1_1channel__type.html">boost::gil::channel_type</a></div><div class="ttdef"><b>Definition:</b> color_convert.hpp:31</div></div>
<div class="ttc" id="structboost_1_1gil_1_1planar__pixel__iterator_html_a17b05b4a8da5c31609da1e02bd7ebed1"><div class="ttname"><a href="structboost_1_1gil_1_1planar__pixel__iterator.html#a17b05b4a8da5c31609da1e02bd7ebed1">boost::gil::planar_pixel_iterator::planar_pixel_iterator</a></div><div class="ttdeci">planar_pixel_iterator(P *pix)</div><div class="ttdef"><b>Definition:</b> planar_pixel_iterator.hpp:97</div></div>
<div class="ttc" id="structboost_1_1gil_1_1iterator__is__mutable_html"><div class="ttname"><a href="structboost_1_1gil_1_1iterator__is__mutable.html">boost::gil::iterator_is_mutable</a></div><div class="ttdoc">Metafunction predicate returning whether the given iterator allows for changing its values...</div><div class="ttdef"><b>Definition:</b> pixel_iterator.hpp:49</div></div>
<div class="ttc" id="structboost_1_1gil_1_1const__iterator__type_html"><div class="ttname"><a href="structboost_1_1gil_1_1const__iterator__type.html">boost::gil::const_iterator_type</a></div><div class="ttdoc">Returns the type of an iterator just like the input iterator, except operating over immutable values...</div><div class="ttdef"><b>Definition:</b> pixel_iterator.hpp:40</div></div>
<div class="ttc" id="structboost_1_1gil_1_1planar__pixel__iterator_html_ade1279c4ed222b6efb0867c038765ea1"><div class="ttname"><a href="structboost_1_1gil_1_1planar__pixel__iterator.html#ade1279c4ed222b6efb0867c038765ea1">boost::gil::planar_pixel_iterator::operator[]</a></div><div class="ttdeci">reference operator[](difference_type d) const </div><div class="ttdef"><b>Definition:</b> planar_pixel_iterator.hpp:116</div></div>
<div class="ttc" id="structboost_1_1gil_1_1dynamic__x__step__type_html"><div class="ttname"><a href="structboost_1_1gil_1_1dynamic__x__step__type.html">boost::gil::dynamic_x_step_type</a></div><div class="ttdoc">Base template for types that model HasDynamicXStepTypeConcept. </div><div class="ttdef"><b>Definition:</b> dynamic_step.hpp:17</div></div>
<div class="ttc" id="classboost_1_1gil_1_1memory__based__step__iterator_html"><div class="ttname"><a href="classboost_1_1gil_1_1memory__based__step__iterator.html">boost::gil::memory_based_step_iterator</a></div><div class="ttdoc">MEMORY-BASED STEP ITERATOR. </div><div class="ttdef"><b>Definition:</b> algorithm.hpp:36</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- HTML footer for doxygen 1.8.13-->
<!-- start footer part -->
<hr class="footer"/>
<address class="footer">
<small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">doxygen</a> 1.8.11
</small>
</address>
</body>
</html>