2
0
mirror of https://github.com/boostorg/gil.git synced 2026-01-24 18:02:17 +00:00
Files
gil/develop/doc/html/reference/utilities_8hpp_source.html

334 lines
49 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.6"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Generic Image Library: utilities.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.6 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</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">utilities.hpp</div> </div>
</div><!--header-->
<div class="contents">
<a href="utilities_8hpp.html">Go to the documentation of this file.</a><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"> Use, modification and distribution are subject to the Boost Software License,</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> Version 1.0. (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="comment"> See http://opensource.adobe.com/gil for most recent version including documentation.</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">*/</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="comment">/*************************************************************************************************/</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#ifndef GIL_UTILITIES_H</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define GIL_UTILITIES_H</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor"></span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="gil__config_8hpp.html">gil_config.hpp</a>&quot;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;boost/config/no_tr1/cmath.hpp&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;iterator&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;boost/static_assert.hpp&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;boost/type_traits.hpp&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;boost/mpl/size.hpp&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;boost/mpl/distance.hpp&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;boost/mpl/begin.hpp&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;boost/mpl/find.hpp&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;boost/mpl/range_c.hpp&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;boost/iterator/iterator_adaptor.hpp&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;boost/iterator/iterator_facade.hpp&gt;</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">namespace </span>boost { <span class="keyword">namespace </span>gil {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">// CLASS point2</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword">class </span>point2 {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">typedef</span> T value_type;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">template</span> &lt;std::<span class="keywordtype">size_t</span> D&gt; <span class="keyword">struct </span>axis { <span class="keyword">typedef</span> value_type coord_t; };</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> std::size_t num_dimensions=2;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; point2() : x(0), y(0) {}</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; point2(T newX, T newY) : x(newX), y(newY) {}</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; point2(<span class="keyword">const</span> point2&amp; p) : x(p.x), y(p.y) {}</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; ~point2() {}</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; point2&amp; operator=(<span class="keyword">const</span> point2&amp; p) { x=p.x; y=p.y; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; point2 operator&lt;&lt;(std::ptrdiff_t shift)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> point2(x&lt;&lt;shift,y&lt;&lt;shift); }</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; point2 operator&gt;&gt;(std::ptrdiff_t shift)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> point2(x&gt;&gt;shift,y&gt;&gt;shift); }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; point2&amp; operator+=(<span class="keyword">const</span> point2&amp; p) { x+=p.x; y+=p.y; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; point2&amp; operator-=(<span class="keyword">const</span> point2&amp; p) { x-=p.x; y-=p.y; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; point2&amp; operator/=(<span class="keywordtype">double</span> t) { <span class="keywordflow">if</span> (t&lt;0 || 0&lt;t) { x/=t; y/=t; } <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> T&amp; operator[](std::size_t i)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this-&gt;*mem_array[i]; }</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; T&amp; operator[](std::size_t i) { <span class="keywordflow">return</span> this-&gt;*mem_array[i]; }</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; T x,y;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">// this static array of pointers to member variables makes operator[] safe and doesn&#39;t seem to exhibit any performance penalty</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">static</span> T point2&lt;T&gt;::* <span class="keyword">const</span> mem_array[num_dimensions];</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;};</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;T point2&lt;T&gt;::* <span class="keyword">const</span> point2&lt;T&gt;::mem_array[point2&lt;T&gt;::num_dimensions] = { &amp;point2&lt;T&gt;::x, &amp;point2&lt;T&gt;::y };</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> point2&lt;T&gt;&amp; p1, <span class="keyword">const</span> point2&lt;T&gt;&amp; p2) { <span class="keywordflow">return</span> (p1.x==p2.x &amp;&amp; p1.y==p2.y); }</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> T&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> point2&lt;T&gt;&amp; p1, <span class="keyword">const</span> point2&lt;T&gt;&amp; p2) { <span class="keywordflow">return</span> p1.x!=p2.x || p1.y!=p2.y; }</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;point2&lt;T&gt; operator+(<span class="keyword">const</span> point2&lt;T&gt;&amp; p1, <span class="keyword">const</span> point2&lt;T&gt;&amp; p2) { <span class="keywordflow">return</span> point2&lt;T&gt;(p1.x+p2.x,p1.y+p2.y); }</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;point2&lt;T&gt; operator-(<span class="keyword">const</span> point2&lt;T&gt;&amp; p) { <span class="keywordflow">return</span> point2&lt;T&gt;(-p.x,-p.y); }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;point2&lt;T&gt; operator-(<span class="keyword">const</span> point2&lt;T&gt;&amp; p1, <span class="keyword">const</span> point2&lt;T&gt;&amp; p2) { <span class="keywordflow">return</span> point2&lt;T&gt;(p1.x-p2.x,p1.y-p2.y); }</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;point2&lt;double&gt; operator/(<span class="keyword">const</span> point2&lt;T&gt;&amp; p, <span class="keywordtype">double</span> t) { <span class="keywordflow">return</span> (t&lt;0 || 0&lt;t) ? point2&lt;double&gt;(p.x/t,p.y/t) : point2&lt;double&gt;(0,0); }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;point2&lt;T&gt; operator*(<span class="keyword">const</span> point2&lt;T&gt;&amp; p, std::ptrdiff_t t) { <span class="keywordflow">return</span> point2&lt;T&gt;(p.x*t,p.y*t); }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;point2&lt;T&gt; operator*(std::ptrdiff_t t, <span class="keyword">const</span> point2&lt;T&gt;&amp; p) { <span class="keywordflow">return</span> point2&lt;T&gt;(p.x*t,p.y*t); }</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="keyword">template</span> &lt;std::<span class="keywordtype">size_t</span> K, <span class="keyword">typename</span> T&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="keyword">const</span> T&amp; axis_value(<span class="keyword">const</span> point2&lt;T&gt;&amp; p) { <span class="keywordflow">return</span> p[K]; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="keyword">template</span> &lt;std::<span class="keywordtype">size_t</span> K, <span class="keyword">typename</span> T&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; T&amp; axis_value( point2&lt;T&gt;&amp; p) { <span class="keywordflow">return</span> p[K]; }</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="keyword">inline</span> std::ptrdiff_t iround(<span class="keywordtype">float</span> x ) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>std::ptrdiff_t<span class="keyword">&gt;</span>(x + (x &lt; 0.0f ? -0.5f : 0.5f)); }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="keyword">inline</span> std::ptrdiff_t iround(<span class="keywordtype">double</span> x) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>std::ptrdiff_t<span class="keyword">&gt;</span>(x + (x &lt; 0.0 ? -0.5 : 0.5)); }</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="keyword">inline</span> std::ptrdiff_t ifloor(<span class="keywordtype">float</span> x ) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>std::ptrdiff_t<span class="keyword">&gt;</span>(std::floor(x)); }</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="keyword">inline</span> std::ptrdiff_t ifloor(<span class="keywordtype">double</span> x) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>std::ptrdiff_t<span class="keyword">&gt;</span>(std::floor(x)); }</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keyword">inline</span> std::ptrdiff_t iceil(<span class="keywordtype">float</span> x ) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>std::ptrdiff_t<span class="keyword">&gt;</span>(std::ceil(x)); }</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="keyword">inline</span> std::ptrdiff_t iceil(<span class="keywordtype">double</span> x) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>std::ptrdiff_t<span class="keyword">&gt;</span>(std::ceil(x)); }</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="keyword">inline</span> point2&lt;std::ptrdiff_t&gt; iround(<span class="keyword">const</span> point2&lt;float &gt;&amp; p) { <span class="keywordflow">return</span> point2&lt;std::ptrdiff_t&gt;(iround(p.x),iround(p.y)); }</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="keyword">inline</span> point2&lt;std::ptrdiff_t&gt; iround(<span class="keyword">const</span> point2&lt;double&gt;&amp; p) { <span class="keywordflow">return</span> point2&lt;std::ptrdiff_t&gt;(iround(p.x),iround(p.y)); }</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="keyword">inline</span> point2&lt;std::ptrdiff_t&gt; ifloor(<span class="keyword">const</span> point2&lt;float &gt;&amp; p) { <span class="keywordflow">return</span> point2&lt;std::ptrdiff_t&gt;(ifloor(p.x),ifloor(p.y)); }</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="keyword">inline</span> point2&lt;std::ptrdiff_t&gt; ifloor(<span class="keyword">const</span> point2&lt;double&gt;&amp; p) { <span class="keywordflow">return</span> point2&lt;std::ptrdiff_t&gt;(ifloor(p.x),ifloor(p.y)); }</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="keyword">inline</span> point2&lt;std::ptrdiff_t&gt; iceil (<span class="keyword">const</span> point2&lt;float &gt;&amp; p) { <span class="keywordflow">return</span> point2&lt;std::ptrdiff_t&gt;(iceil(p.x), iceil(p.y)); }</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="keyword">inline</span> point2&lt;std::ptrdiff_t&gt; iceil (<span class="keyword">const</span> point2&lt;double&gt;&amp; p) { <span class="keywordflow">return</span> point2&lt;std::ptrdiff_t&gt;(iceil(p.x), iceil(p.y)); }</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; </div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="keyword">inline</span> T align(T val, std::size_t alignment) { </div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> val+(alignment - val%alignment)%alignment; </div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;}</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ConstT, <span class="keyword">typename</span> Value, <span class="keyword">typename</span> Reference, <span class="keyword">typename</span> ConstReference,</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">typename</span> ArgType, <span class="keyword">typename</span> ResultType, <span class="keywordtype">bool</span> IsMutable&gt;</div>
<div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="structboost_1_1gil_1_1deref__base.html"> 182</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structboost_1_1gil_1_1deref__base.html">deref_base</a> {</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keyword">typedef</span> ArgType argument_type;</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">typedef</span> ResultType result_type;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">typedef</span> ConstT const_t;</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keyword">typedef</span> Value value_type;</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keyword">typedef</span> Reference reference;</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keyword">typedef</span> ConstReference const_reference;</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; BOOST_STATIC_CONSTANT(<span class="keywordtype">bool</span>, is_mutable = IsMutable);</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;};</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> D1, <span class="keyword">typename</span> D2&gt;</div>
<div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classboost_1_1gil_1_1deref__compose.html"> 196</a></span>&#160;<span class="keyword">class </span><a class="code" href="classboost_1_1gil_1_1deref__compose.html">deref_compose</a> : <span class="keyword">public</span> <a class="code" href="structboost_1_1gil_1_1deref__base.html">deref_base</a>&lt;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; deref_compose&lt;typename D1::const_t, typename D2::const_t&gt;,</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; typename D1::value_type, typename D1::reference, typename D1::const_reference, </div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; typename D2::argument_type, typename D1::result_type, D1::is_mutable &amp;&amp; D2::is_mutable&gt;</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;{</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; D1 _fn1;</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; D2 _fn2;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> D2::argument_type argument_type;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> D1::result_type result_type;</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classboost_1_1gil_1_1deref__compose.html">deref_compose</a>() {}</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="classboost_1_1gil_1_1deref__compose.html">deref_compose</a>(<span class="keyword">const</span> D1&amp; x, <span class="keyword">const</span> D2&amp; y) : _fn1(x), _fn2(y) {}</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="classboost_1_1gil_1_1deref__compose.html">deref_compose</a>(<span class="keyword">const</span> <a class="code" href="classboost_1_1gil_1_1deref__compose.html">deref_compose</a>&amp; dc) : _fn1(dc._fn1), _fn2(dc._fn2) {}</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> _D1, <span class="keyword">typename</span> _D2&gt; <a class="code" href="classboost_1_1gil_1_1deref__compose.html">deref_compose</a>(<span class="keyword">const</span> <a class="code" href="classboost_1_1gil_1_1deref__compose.html">deref_compose&lt;_D1,_D2&gt;</a>&amp; dc) : _fn1(dc._fn1), _fn2(dc._fn2) {}</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; result_type operator()(argument_type x)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _fn1(_fn2(x)); }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; result_type operator()(argument_type x) { <span class="keywordflow">return</span> _fn1(_fn2(x)); }</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;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="comment">// reinterpret_cast is implementation-defined. Static cast is not.</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> OutPtr, <span class="keyword">typename</span> In&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; OutPtr gil_reinterpret_cast( In* p) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>OutPtr<span class="keyword">&gt;</span>(<span class="keyword">static_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(p)); }</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> OutPtr, <span class="keyword">typename</span> In&gt; BOOST_FORCEINLINE</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="keyword">const</span> OutPtr gil_reinterpret_cast_c(<span class="keyword">const</span> In* p) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>OutPtr<span class="keyword">&gt;</span>(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(p)); }</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">namespace </span>detail {</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> InputIter, <span class="keyword">class</span> Size, <span class="keyword">class</span> OutputIter&gt;</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;std::pair&lt;InputIter, OutputIter&gt; _copy_n(InputIter first, Size count,</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; OutputIter result,</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; std::input_iterator_tag) {</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">for</span> ( ; count &gt; 0; --count) {</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; *result = *first;</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; ++first;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; ++result;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span> std::pair&lt;InputIter, OutputIter&gt;(first, result);</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;}</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RAIter, <span class="keyword">class</span> Size, <span class="keyword">class</span> OutputIter&gt;</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="keyword">inline</span> std::pair&lt;RAIter, OutputIter&gt;</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;_copy_n(RAIter first, Size count, OutputIter result, std::random_access_iterator_tag) {</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; RAIter last = first + count;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">return</span> std::pair&lt;RAIter, OutputIter&gt;(last, <a class="code" href="group___s_t_l_optimizations.html#ga0881964a0319aa859cda6408c5a1cda2">std::copy</a>(first, last, result));</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;}</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> InputIter, <span class="keyword">class</span> Size, <span class="keyword">class</span> OutputIter&gt;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="keyword">inline</span> std::pair&lt;InputIter, OutputIter&gt;</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;_copy_n(InputIter first, Size count, OutputIter result) {</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> _copy_n(first, count, result, <span class="keyword">typename</span> std::iterator_traits&lt;InputIter&gt;::iterator_category());</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;}</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> InputIter, <span class="keyword">class</span> Size, <span class="keyword">class</span> OutputIter&gt;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="keyword">inline</span> std::pair&lt;InputIter, OutputIter&gt;</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;copy_n(InputIter first, Size count, OutputIter result) {</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">return</span> detail::_copy_n(first, count, result);</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;}</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="structboost_1_1gil_1_1detail_1_1identity.html"> 265</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structboost_1_1gil_1_1detail_1_1identity.html">identity</a> {</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">typedef</span> T argument_type;</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keyword">typedef</span> T result_type;</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">const</span> T&amp; operator()(<span class="keyword">const</span> T&amp; val)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> val; }</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;};</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment">/*************************************************************************************************/</span></div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div>
<div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="structboost_1_1gil_1_1detail_1_1plus__asymmetric.html"> 275</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structboost_1_1gil_1_1detail_1_1plus__asymmetric.html">plus_asymmetric</a> {</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keyword">typedef</span> T1 first_argument_type;</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">typedef</span> T2 second_argument_type;</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keyword">typedef</span> T1 result_type;</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; T1 operator()(T1 f1, T2 f2)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> f1+f2;</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;};</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="comment">/*************************************************************************************************/</span></div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="structboost_1_1gil_1_1detail_1_1inc.html"> 288</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structboost_1_1gil_1_1detail_1_1inc.html">inc</a> {</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">typedef</span> T argument_type;</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keyword">typedef</span> T result_type;</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; T operator()(T x)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ++x; }</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;};</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment">/*************************************************************************************************/</span></div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="structboost_1_1gil_1_1detail_1_1dec.html"> 298</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structboost_1_1gil_1_1detail_1_1dec.html">dec</a> {</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">typedef</span> T argument_type;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keyword">typedef</span> T result_type;</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; T operator()(T x)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> --x; }</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;};</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="comment">// a given MPL RandomAccessSequence (or size if the type is not present)</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Types, <span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="structboost_1_1gil_1_1detail_1_1type__to__index.html"> 307</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structboost_1_1gil_1_1detail_1_1type__to__index.html">type_to_index</a> </div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; : <span class="keyword">public</span> mpl::distance&lt;typename mpl::begin&lt;Types&gt;::type, </div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; typename mpl::find&lt;Types,T&gt;::type&gt;::type {};</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;} <span class="comment">// namespace detail</span></div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;template &lt;typename ColorSpace, typename ChannelMapping = mpl::range_c&lt;int,0,mpl::size&lt;ColorSpace&gt;::value&gt; &gt;</div>
<div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="structboost_1_1gil_1_1layout.html"> 317</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structboost_1_1gil_1_1layout.html">layout</a> {</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">typedef</span> ColorSpace color_space_t;</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">typedef</span> ChannelMapping channel_mapping_t;</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;};</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Value, <span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt; <span class="comment">// where value_type&lt;T1&gt; == value_type&lt;T2&gt; == Value</span></div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="keywordtype">void</span> swap_proxy(T1&amp; left, T2&amp; right) {</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; Value tmp = left;</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; left = right;</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; right = tmp;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;}</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> little_endian() {</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordtype">short</span> tester = 0x0001;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> *(<span class="keywordtype">char</span>*)&amp;tester!=0;</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;}</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> big_endian() {</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">return</span> !little_endian();</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;}</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;} } <span class="comment">// namespace boost::gil</span></div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="preprocessor">#endif</span></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:275</div></div>
<div class="ttc" id="group___s_t_l_optimizations_html_ga0881964a0319aa859cda6408c5a1cda2"><div class="ttname"><a href="group___s_t_l_optimizations.html#ga0881964a0319aa859cda6408c5a1cda2">std::copy</a></div><div class="ttdeci">BOOST_FORCEINLINE boost::gil::pixel&lt; T, Cs &gt; * copy(boost::gil::pixel&lt; T, Cs &gt; *first, boost::gil::pixel&lt; T, Cs &gt; *last, boost::gil::pixel&lt; T, Cs &gt; *dst)</div><div class="ttdoc">Copy when both src and dst are interleaved and of the same type can be just memmove. </div><div class="ttdef"><b>Definition:</b> algorithm.hpp:151</div></div>
<div class="ttc" id="structboost_1_1gil_1_1deref__base_html"><div class="ttname"><a href="structboost_1_1gil_1_1deref__base.html">boost::gil::deref_base</a></div><div class="ttdoc">Helper base class for pixel dereference adaptors. </div><div class="ttdef"><b>Definition:</b> utilities.hpp:182</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:298</div></div>
<div class="ttc" id="structboost_1_1gil_1_1detail_1_1identity_html"><div class="ttname"><a href="structboost_1_1gil_1_1detail_1_1identity.html">boost::gil::detail::identity</a></div><div class="ttdoc">identity taken from SGI STL. </div><div class="ttdef"><b>Definition:</b> utilities.hpp:265</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:288</div></div>
<div class="ttc" id="structboost_1_1gil_1_1layout_html"><div class="ttname"><a href="structboost_1_1gil_1_1layout.html">boost::gil::layout</a></div><div class="ttdoc">Represents a color space and ordering of channels in memory. </div><div class="ttdef"><b>Definition:</b> utilities.hpp:317</div></div>
<div class="ttc" id="classboost_1_1gil_1_1deref__compose_html"><div class="ttname"><a href="classboost_1_1gil_1_1deref__compose.html">boost::gil::deref_compose</a></div><div class="ttdoc">Composes two dereference function objects. Similar to std::unary_compose but needs to pull some typed...</div><div class="ttdef"><b>Definition:</b> utilities.hpp:196</div></div>
<div class="ttc" id="gil__config_8hpp_html"><div class="ttname"><a href="gil__config_8hpp.html">gil_config.hpp</a></div><div class="ttdoc">GIL configuration file. </div></div>
<div class="ttc" id="structboost_1_1gil_1_1detail_1_1type__to__index_html"><div class="ttname"><a href="structboost_1_1gil_1_1detail_1_1type__to__index.html">boost::gil::detail::type_to_index</a></div><div class="ttdoc">Returns the index corresponding to the first occurrance of a given given type in. ...</div><div class="ttdef"><b>Definition:</b> utilities.hpp:307</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- HTML footer for doxygen 1.8.13-->
<!-- start footer part -->
<hr class="footer"/>
<address class="footer">
<small>
Generated on Wed Apr 25 2018 20:27:25 for Generic Image Library by &#160;<a href="http://www.doxygen.org/index.html">doxygen</a> 1.8.6
</small>
</address>
</body>
</html>