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

N-dimensional container of values. 
<p>
IMAGE CONCEPTS <div class="fragment"><pre class="fragment">concept RandomAccessNDImageConcept&lt;typename Img&gt; : Regular&lt;Img&gt; {
    <span class="keyword">typename</span> view_t; where MutableRandomAccessNDImageViewConcept&lt;view_t&gt;;
    <span class="keyword">typename</span> const_view_t = view_t::const_t;
    <span class="keyword">typename</span> point_t      = view_t::point_t;
    <span class="keyword">typename</span> value_type   = view_t::value_type;
    <span class="keyword">typename</span> allocator_type;

    Img::Img(point_t dims, std::size_t alignment=1);
    Img::Img(point_t dims, value_type fill_value, std::size_t alignment);
    
    <span class="keywordtype">void</span> Img::recreate(point_t new_dims, std::size_t alignment=1);
    <span class="keywordtype">void</span> Img::recreate(point_t new_dims, value_type fill_value, std::size_t alignment);

    <span class="keyword">const</span> point_t&amp;        Img::dimensions() <span class="keyword">const</span>;
    <span class="keyword">const</span> const_view_t&amp;   <a class="code" href="g_i_l_0135.html#ged731349e60a30a3a241fd1809729996" title="Returns the constant-pixel view of an image.">const_view</a>(<span class="keyword">const</span> Img&amp;);
    <span class="keyword">const</span> view_t&amp;         <a class="code" href="g_i_l_0135.html#gad0335b7d343667d626556681486f198" title="Returns the non-constant-pixel view of an image.">view</a>(Img&amp;);
};
</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::RandomAccessNDImageConcept::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="c33d320ecd1a2e0b1df5bb42071fc24d"></a><!-- doxytag: member="boost::gil::RandomAccessNDImageConcept::img" ref="c33d320ecd1a2e0b1df5bb42071fc24d" args="" -->
Img&nbsp;</td><td class="memItemRight" valign="bottom"><b>img</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>
