<!-- 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: RandomAccess2DImageViewConcept 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_0366.html">RandomAccess2DImageViewConcept</a>
  </div>
<div class="contents">
<h1>RandomAccess2DImageViewConcept Struct Template Reference<br>
<small>
[<a class="el" href="g_i_l_0137.html">ImageView2DConcept</a>]</small>
</h1><!-- doxytag: class="boost::gil::RandomAccess2DImageViewConcept" --><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_0365.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
<h3>template&lt;typename View&gt;<br>
 struct boost::gil::RandomAccess2DImageViewConcept&lt; View &gt;</h3>

2-dimensional view over immutable values 
<p>
<div class="fragment"><pre class="fragment">concept RandomAccess2DImageViewConcept&lt;RandomAccessNDImageViewConcept View&gt; {
    where num_dimensions==2;

    <span class="keyword">typename</span> x_iterator = axis&lt;0&gt;::iterator;
    <span class="keyword">typename</span> y_iterator = axis&lt;1&gt;::iterator;
    <span class="keyword">typename</span> x_coord_t  = axis&lt;0&gt;::coord_t;
    <span class="keyword">typename</span> y_coord_t  = axis&lt;1&gt;::coord_t;
    <span class="keyword">typename</span> xy_locator = locator;
    
    x_coord_t View::width()  <span class="keyword">const</span>;
    y_coord_t View::height() <span class="keyword">const</span>;
    
    <span class="comment">// X-navigation</span>
    x_iterator View::x_at(<span class="keyword">const</span> point_t&amp;) <span class="keyword">const</span>;
    x_iterator View::row_begin(y_coord_t) <span class="keyword">const</span>;
    x_iterator View::row_end  (y_coord_t) <span class="keyword">const</span>;

    <span class="comment">// Y-navigation</span>
    y_iterator View::y_at(<span class="keyword">const</span> point_t&amp;) <span class="keyword">const</span>;
    y_iterator View::col_begin(x_coord_t) <span class="keyword">const</span>;
    y_iterator View::col_end  (x_coord_t) <span class="keyword">const</span>;
       
    <span class="comment">// navigating in 2D</span>
    xy_locator View::xy_at(<span class="keyword">const</span> point_t&amp;) <span class="keyword">const</span>;

    <span class="comment">// (x,y) versions of all methods taking point_t    </span>
    View::View(x_coord_t,y_coord_t,<span class="keyword">const</span> locator&amp;);
    iterator View::at(x_coord_t,y_coord_t) <span class="keyword">const</span>;
    reference operator()(View,x_coord_t,y_coord_t) <span class="keyword">const</span>;
    xy_locator View::xy_at(x_coord_t,y_coord_t) <span class="keyword">const</span>;
    x_iterator View::x_at(x_coord_t,y_coord_t) <span class="keyword">const</span>;
    y_iterator View::y_at(x_coord_t,y_coord_t) <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::RandomAccess2DImageViewConcept::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="ac435eb4d053aa36fa4760f634ca37ca"></a><!-- doxytag: member="boost::gil::RandomAccess2DImageViewConcept::view" ref="ac435eb4d053aa36fa4760f634ca37ca" args="" -->
View&nbsp;</td><td class="memItemRight" valign="bottom"><b>view</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:18 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>
