<!-- Copyright 2008 Lubomir Bourdev and Hailin Jin

     Distributed under the Boost Software License, Version 1.0.
     (See accompanying file LICENSE_1_0.txt or copy at
     http://www.boost.org/LICENSE_1_0.txt)
  -->

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

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

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

<head>
    <TITLE>Generic Image Library: static_transform</TITLE>
    <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=ISO-8859-1"/>
    <LINK TYPE="text/css" REL="stylesheet" HREF="adobe_source.css"/>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" style='width: 100%; margin: 0; padding: 0'><tr>
<td width="100%" valign="top" style='padding-left: 10px; padding-right: 10px; padding-bottom: 10px'>
<div class="qindex"><a class="qindex" href="index.html">Modules</a> 
                  | <a class="qindex" href="classes.html">Alphabetical List</a> 
                  | <a class="qindex" href="annotated.html">Class List</a> 
                  | <a class="qindex" href="dirs.html">Directories</a> 
                  | <a class="qindex" href="files.html">File List</a> 
                  | <a class="qindex" href="../index.html">GIL Home Page</a> 
</div>
<!-- End Header -->
<!-- Generated by Doxygen 1.5.6 -->
<div class="contents">
<h1>static_transform<br>
<small>
[<a class="el" href="g_i_l_0105.html">Algorithms and Utility Functions</a>]</small>
</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
Equivalent to std::transform. Pairs the elements semantically. 
<p>
Example: Write a generic function that adds two pixels into a homogeneous result <a class="el" href="g_i_l_0599.html" title="Represents a pixel value (a container of channels). Models: HomogeneousColorBaseValueConcept...">pixel</a>. <div class="fragment"><pre class="fragment"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Result&gt;
<span class="keyword">struct </span>my_plus {
    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;
    Result operator()(T1 f1, T2 f2)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> f1+f2; }
};

<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Pixel1, <span class="keyword">typename</span> Pixel2, <span class="keyword">typename</span> Pixel3&gt;
<span class="keywordtype">void</span> sum_channels(<span class="keyword">const</span> Pixel1&amp; p1, <span class="keyword">const</span> Pixel2&amp; p2, Pixel3&amp; result) {
    <span class="keyword">typedef</span> <span class="keyword">typename</span> channel_type&lt;Pixel3&gt;::type result_channel_t;
    static_transform(p1,p2,result,my_plus&lt;result_channel_t&gt;());
}

rgb8_pixel_t p1(1,2,3);
bgr8_pixel_t p2(3,2,1);
rgb8_pixel_t result;
sum_channels(p1,p2,result);
assert(result == rgb8_pixel_t(2,4,6));
</pre></div> 
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gdf8ef33ad4bb6d1db4890aa699dd8ef1"></a><!-- doxytag: member="ColorBaseAlgorithmTransform::static_transform" ref="gdf8ef33ad4bb6d1db4890aa699dd8ef1" args="(Src &amp;src, Dst &amp;dst, Op op)" -->
template&lt;typename Src, typename Dst, typename Op&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">GIL_FORCEINLINE Op&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>static_transform</b> (Src &amp;src, Dst &amp;dst, Op op)</td></tr>

<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb1b2f61b29c26b2218ca4febdf5a18fe"></a><!-- doxytag: member="ColorBaseAlgorithmTransform::static_transform" ref="gb1b2f61b29c26b2218ca4febdf5a18fe" args="(const Src &amp;src, Dst &amp;dst, Op op)" -->
template&lt;typename Src, typename Dst, typename Op&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">GIL_FORCEINLINE Op&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>static_transform</b> (const Src &amp;src, Dst &amp;dst, Op op)</td></tr>

<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g18161a949303722201be29fb24bf7713"></a><!-- doxytag: member="ColorBaseAlgorithmTransform::static_transform" ref="g18161a949303722201be29fb24bf7713" args="(P2 &amp;p2, P3 &amp;p3, Dst &amp;dst, Op op)" -->
template&lt;typename P2, typename P3, typename Dst, typename Op&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">GIL_FORCEINLINE Op&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>static_transform</b> (P2 &amp;p2, P3 &amp;p3, Dst &amp;dst, Op op)</td></tr>

<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g00bb2f6cecdb909728902f6ffda6d87b"></a><!-- doxytag: member="ColorBaseAlgorithmTransform::static_transform" ref="g00bb2f6cecdb909728902f6ffda6d87b" args="(P2 &amp;p2, const P3 &amp;p3, Dst &amp;dst, Op op)" -->
template&lt;typename P2, typename P3, typename Dst, typename Op&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">GIL_FORCEINLINE Op&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>static_transform</b> (P2 &amp;p2, const P3 &amp;p3, Dst &amp;dst, Op op)</td></tr>

<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="g6dcb068577ee0fe134c8651a03900d36"></a><!-- doxytag: member="ColorBaseAlgorithmTransform::static_transform" ref="g6dcb068577ee0fe134c8651a03900d36" args="(const P2 &amp;p2, P3 &amp;p3, Dst &amp;dst, Op op)" -->
template&lt;typename P2, typename P3, typename Dst, typename Op&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">GIL_FORCEINLINE Op&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>static_transform</b> (const P2 &amp;p2, P3 &amp;p3, Dst &amp;dst, Op op)</td></tr>

<tr><td class="memTemplParams" nowrap colspan="2"><a class="anchor" name="gb92367233f5a2a088762c2bf4bae07c4"></a><!-- doxytag: member="ColorBaseAlgorithmTransform::static_transform" ref="gb92367233f5a2a088762c2bf4bae07c4" args="(const P2 &amp;p2, const P3 &amp;p3, Dst &amp;dst, Op op)" -->
template&lt;typename P2, typename P3, typename Dst, typename Op&gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">GIL_FORCEINLINE Op&nbsp;</td><td class="memTemplItemRight" valign="bottom"><b>static_transform</b> (const P2 &amp;p2, const P3 &amp;p3, Dst &amp;dst, Op op)</td></tr>

</table>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat May 2 13:50:17 2009 for Generic Image Library by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>
