PageRenderTime 12ms CodeModel.GetById 1ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

/Src/Dependencies/Boost/libs/property_map/doc/iterator_property_map.html

http://hadesmem.googlecode.com/
HTML | 234 lines | 172 code | 55 blank | 7 comment | 0 complexity | 7e29111d4f29754e2bd8ff984c385edb MD5 | raw file
  1<HTML>
  2<!--
  3     Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
  4    
  5     Distributed under the Boost Software License, Version 1.0.
  6     (See accompanying file LICENSE_1_0.txt or copy at
  7     http://www.boost.org/LICENSE_1_0.txt)
  8  -->
  9<Head>
 10<Title>Iterator Property Map Adaptor</Title>
 11<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b" 
 12	ALINK="#ff0000"> 
 13<IMG SRC="../../../boost.png" 
 14     ALT="C++ Boost" width="277" height="86"> 
 15
 16<BR Clear>
 17
 18
 19<H2><A NAME="sec:iterator-property-map"></A>
 20</h2>
 21<PRE>
 22iterator_property_map&lt;<a href="http://www.sgi.com/tech/stl/RandomAccessIterator.html">RandomAccessIterator</a>, OffsetMap, T, R&gt;
 23</PRE>
 24
 25<P>
 26This property map is an adaptor that converts any random access
 27iterator into a <a
 28href="./LvaluePropertyMap.html">Lvalue Property Map</a>.
 29The <tt>OffsetMap</tt> type is responsible for converting
 30key objects to integers that can be used as offsets with the
 31random access iterator.
 32
 33<P>
 34
 35<h3>Example</h3>
 36
 37<pre>
 38// print out the capacity and flow for all the edges in the graph
 39template &lt;class Graph, class CapacityPMap, class FlowPMap&gt;
 40void print_network(Graph&amp; G, CapacityPMap capacity, FlowPMap flow)
 41{
 42  typedef typename boost::graph_traits&lt;Graph&gt;::vertex_iterator    Viter;
 43  typedef typename boost::graph_traits&lt;Graph&gt;::out_edge_iterator OutEdgeIter;
 44  typedef typename boost::graph_traits&lt;Graph&gt;::in_edge_iterator InEdgeIter;
 45
 46  Viter ui, uiend;
 47  for (boost::tie(ui, uiend) = vertices(G); ui != uiend; ++ui) {
 48    OutEdgeIter out, out_end;
 49    std::cout &lt;&lt; *ui &lt;&lt; &quot;\t&quot;;
 50
 51    for(boost::tie(out, out_end) = out_edges(*ui, G); out != out_end; ++out)
 52      std::cout &lt;&lt; &quot;--(&quot; &lt;&lt; get(capacity, *out) &lt;&lt; &quot;, &quot; 
 53	   &lt;&lt; get(flow, *out) &lt;&lt; &quot;)--&gt; &quot; &lt;&lt; target(*out,G) &lt;&lt; &quot;\t&quot;;
 54    std::cout &lt;&lt; std::endl &lt;&lt; &quot;\t&quot;;
 55
 56    InEdgeIter in, in_end;    
 57    for(boost::tie(in, in_end) = in_edges(*ui, G); in != in_end; ++in)
 58      std::cout &lt;&lt; &quot;&lt;--(&quot; &lt;&lt; get(capacity, *in) &lt;&lt; &quot;,&quot; &lt;&lt; get(flow, *in) &lt;&lt; &quot;)-- &quot;
 59           &lt;&lt; source(*in,G) &lt;&lt; &quot;\t&quot;;
 60    std::cout &lt;&lt; std::endl;
 61  }
 62}
 63
 64int main(int, char*[])
 65{
 66  typedef boost::adjacency_list&lt;boost::vecS, boost::vecS, 
 67    boost::bidirectionalS, boost::no_plugin, 
 68    boost::plugin&lt;boost::id_tag, std::size_t&gt; &gt; Graph;
 69
 70  const int num_vertices = 9;
 71  Graph G(num_vertices);
 72
 73  int capacity[] = { 10, 20, 20, 20, 40, 40, 20, 20, 20, 10 };
 74  int flow[] = { 8, 12, 12, 12, 12, 12, 16, 16, 16, 8 };
 75
 76  // add edges to the graph, and assign each edge an ID number
 77  // to index into the property arrays
 78  add_edge(G, 0, 1, 0);
 79  // ...
 80
 81  typedef boost::graph_traits&lt;Graph&gt;::edge_descriptor Edge;
 82  typedef boost::property_map&lt;Graph, boost::id_tag&gt;::type EdgeID_PMap;
 83  EdgeID_PMap edge_id = get(boost::edge_index(), G);
 84
 85  boost::iterator_property_map&lt;int*, EdgeID_PMap, int, int&amp;&gt;
 86     capacity_pa(capacity, edge_id),
 87     flow_pa(flow, edge_id);
 88
 89  print_network(G, capacity_pa, flow_pa);
 90          
 91  return 0;
 92}
 93</pre>
 94
 95<H3>Where Defined</H3>
 96
 97<P>
 98<a href="../../../boost/property_map/property_map.hpp"><TT>boost/property_map/property_map.hpp</TT></a>
 99
100<p>
101<H3>Model Of</H3>
102
103<a href="./LvaluePropertyMap.html">Lvalue Property Map</a>
104
105<P>
106
107<H3>Template Parameters</H3>
108
109<P>
110
111<TABLE border>
112<TR>
113<th>Parameter</th><th>Description</th><th>Default</th>
114</tr>
115
116
117<TR>
118<TD><TT>Iterator</TT></TD> 
119<TD>Must be a model of <a href="http://www.sgi.com/tech/stl/RandomAccessIterator.html">Random Access Iterator</a>.</TD>
120<TD>&nbsp;</td>
121</tr>
122
123<TR>
124<TD><TT>OffsetMap</TT></TD> <TD>Must be a model of <a
125href="./ReadablePropertyMap.html">Readable Property Map</a>
126and the value type must be convertible to the difference type of the
127iterator.</TD> <TD>&nbsp;</TD>
128</TR>
129
130<TR>
131<TD><TT>T</TT></TD>
132<TD>The value type of the iterator.</TD>
133<TD><TT>std::iterator_traits&lt;RandomAccessIterator&gt;::value_type</TT></TD>
134</TR>
135
136
137<TR>
138<TD><TT>R</TT></TD>
139<TD>The reference type of the iterator.</TD>
140<TD><TT>std::iterator_traits&lt;RandomAccessIterator&gt;::reference</TT></TD>
141</TR>
142
143</TABLE>
144<P>
145
146<H3>Members</H3>
147
148<P>
149In addition to the methods and functions required by <a
150href="./LvaluePropertyMap.html">Lvalue Property Map</a>, this
151class has the following members.
152
153<hr>
154
155<pre>
156property_traits&lt;iterator_property_map&gt;::value_type
157</pre>
158This is the same type as
159<TT>std::iterator_traits&lt;Iterator&gt;::value_type</TT>.
160
161<hr>
162
163<pre>
164iterator_property_map(Iterator i)
165</pre>
166Constructor. The OffsetMap is default constructed.
167
168<hr>
169
170<pre>
171iterator_property_map(Iterator i, OffsetMap m)
172</pre>
173Constructor.
174
175<hr>
176
177<pre>
178reference operator[](difference_type v) const
179</pre>
180The operator bracket for property access. The <TT>reference</TT> and
181<TT>difference_type</TT> types are from  
182<TT>std::iterator_traits&lt;Iterator&gt;</TT>.
183
184<hr>
185
186<h3>Non-Member functions</h3>
187
188<hr>
189
190<pre>
191  template &lt;class RAIter, class OffsetMap&gt;
192  iterator_property_map&lt;RAIter, OffsetMap,
193    typename std::iterator_traits&lt;RAIter&gt;::value_type,
194    typename std::iterator_traits&lt;RAIter&gt;::reference
195    &gt;
196  make_iterator_property_map(RAIter iter, OffsetMap omap)
197</pre>
198A function for conveniently creating an iterator map.
199
200
201<hr>
202
203<pre>
204  template &lt;class RAIter, class OffsetMap, class ValueType&gt;
205  iterator_property_map&lt;RAIter, OffsetMap,
206    typename std::iterator_traits&lt;RAIter&gt;::value_type,
207    typename std::iterator_traits&lt;RAIter&gt;::reference
208    &gt;
209  make_iterator_property_map(RAIter iter, OffsetMap omap, ValueType dummy_arg)
210</pre>
211Use this function instead of the 2-argument version if
212your compiler does not support partial specialization
213(like Visual C++).
214
215
216<hr>
217
218
219<br>
220<HR>
221<TABLE>
222<TR valign=top>
223<TD nowrap>Copyright &copy 2000-2002</TD><TD>
224<a HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</a>,
225Univ.of Notre Dame (<A
226HREF="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</A>)<br>
227<A HREF="http://www.boost.org/people/liequan_lee.htm">Lie-Quan Lee</A>, Univ.of Notre Dame (<A HREF="mailto:llee1@osl.iu.edu">llee1@osl.iu.edu</A>)<br>
228<A HREF="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</A>,
229Univ.of Notre Dame (<A
230HREF="mailto:lums@osl.iu.edu">lums@osl.iu.edu</A>)
231</TD></TR></TABLE>
232
233</BODY>
234</HTML>