<!-- 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: IteratorAdaptorConcept Struct Template Reference</TITLE>
    <META HTTP-EQUIV="content-type" CONTENT="text/html;charset=ISO-8859-1"/>
    <LINK TYPE="text/css" REL="stylesheet" HREF="adobe_source.css"/>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" style='width: 100%; margin: 0; padding: 0'><tr>
<td width="100%" valign="top" style='padding-left: 10px; padding-right: 10px; padding-bottom: 10px'>
<div class="qindex"><a class="qindex" href="index.html">Modules</a> 
                  | <a class="qindex" href="classes.html">Alphabetical List</a> 
                  | <a class="qindex" href="annotated.html">Class List</a> 
                  | <a class="qindex" href="dirs.html">Directories</a> 
                  | <a class="qindex" href="files.html">File List</a> 
                  | <a class="qindex" href="../index.html">GIL Home Page</a> 
</div>
<!-- End Header -->
<!-- Generated by Doxygen 1.5.6 -->
  <div class="navpath"><a class="el" href="namespaceboost.html">boost</a>::<b>gil</b>::<a class="el" href="g_i_l_0310.html">IteratorAdaptorConcept</a>
  </div>
<div class="contents">
<h1>IteratorAdaptorConcept Struct Template Reference<br>
<small>
[<a class="el" href="g_i_l_0190.html">IteratorAdaptorConcept</a>]</small>
</h1><!-- doxytag: class="boost::gil::IteratorAdaptorConcept" --><code>#include &lt;<a class="el" href="g_i_l_0091.html">gil_concept.hpp</a>&gt;</code>
<p>

<p>
<a href="g_i_l_0309.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
<h3>template&lt;typename Iterator&gt;<br>
 struct boost::gil::IteratorAdaptorConcept&lt; Iterator &gt;</h3>

Iterator adaptor is a forward iterator adapting another forward iterator. 
<p>
In addition to GIL iterator requirements, GIL iterator adaptors must provide the following metafunctions:<ul>
<li><code>is_iterator_adaptor&lt;Iterator&gt;</code>: Returns <code>mpl::true_</code> </li><li><code>iterator_adaptor_get_base&lt;Iterator&gt;</code>: Returns the base iterator type</li><li><code>iterator_adaptor_rebind&lt;Iterator,NewBase&gt;</code>: Replaces the base iterator with the new one</li></ul>
<p>
The adaptee can be obtained from the iterator via the "base()" method.<p>
<div class="fragment"><pre class="fragment">concept IteratorAdaptorConcept&lt;boost_concepts::ForwardTraversalConcept Iterator&gt; {
    where SameType&lt;is_iterator_adaptor&lt;Iterator&gt;::type, mpl::true_&gt;;

    <span class="keyword">typename</span> iterator_adaptor_get_base&lt;Iterator&gt;;
        where Metafunction&lt;iterator_adaptor_get_base&lt;Iterator&gt; &gt;;
        where boost_concepts::ForwardTraversalConcept&lt;iterator_adaptor_get_base&lt;Iterator&gt;::type&gt;;
    
    <span class="keyword">typename</span> another_iterator; 
    <span class="keyword">typename</span> iterator_adaptor_rebind&lt;Iterator,another_iterator&gt;::type;
        where boost_concepts::ForwardTraversalConcept&lt;another_iterator&gt;;
        where IteratorAdaptorConcept&lt;iterator_adaptor_rebind&lt;Iterator,another_iterator&gt;::type&gt;;

    <span class="keyword">const</span> iterator_adaptor_get_base&lt;Iterator&gt;::type&amp; Iterator::base() <span class="keyword">const</span>;
};
</pre></div> <table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b0a0dbf6ca9028bbbb2240cad5882537"></a><!-- doxytag: member="boost::gil::IteratorAdaptorConcept::constraints" ref="b0a0dbf6ca9028bbbb2240cad5882537" args="()" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>constraints</b> ()</td></tr>

<tr><td colspan="2"><br><h2>Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8e5a0f604de6507cf17b22c030d0f079"></a><!-- doxytag: member="boost::gil::IteratorAdaptorConcept::it" ref="8e5a0f604de6507cf17b22c030d0f079" args="" -->
Iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>it</b></td></tr>

</table>
<hr>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="g_i_l_0091.html">gil_concept.hpp</a></ul>
</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>
