Imported Upstream version 1.51.0
[platform/upstream/boost.git] / libs / numeric / ublas / doc / html / matrix__expression_8hpp_source.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5 <title>ublas: matrix_expression.hpp Source File</title>
6 <link href="tabs.css" rel="stylesheet" type="text/css"/>
7 <link href="doxygen.css" rel="stylesheet" type="text/css"/>
8 </head>
9 <body>
10 <!-- Generated by Doxygen 1.6.1 -->
11 <div class="navigation" id="top">
12   <div class="tabs">
13     <ul>
14       <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
15       <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
16       <li><a href="annotated.html"><span>Classes</span></a></li>
17       <li class="current"><a href="files.html"><span>Files</span></a></li>
18     </ul>
19   </div>
20   <div class="tabs">
21     <ul>
22       <li><a href="files.html"><span>File&nbsp;List</span></a></li>
23     </ul>
24   </div>
25 <h1>matrix_expression.hpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//</span>
26 <a name="l00002"></a>00002 <span class="comment">//  Copyright (c) 2000-2002</span>
27 <a name="l00003"></a>00003 <span class="comment">//  Joerg Walter, Mathias Koch</span>
28 <a name="l00004"></a>00004 <span class="comment">//</span>
29 <a name="l00005"></a>00005 <span class="comment">//  Distributed under the Boost Software License, Version 1.0. (See</span>
30 <a name="l00006"></a>00006 <span class="comment">//  accompanying file LICENSE_1_0.txt or copy at</span>
31 <a name="l00007"></a>00007 <span class="comment">//  http://www.boost.org/LICENSE_1_0.txt)</span>
32 <a name="l00008"></a>00008 <span class="comment">//</span>
33 <a name="l00009"></a>00009 <span class="comment">//  The authors gratefully acknowledge the support of</span>
34 <a name="l00010"></a>00010 <span class="comment">//  GeNeSys mbH &amp; Co. KG in producing this work.</span>
35 <a name="l00011"></a>00011 <span class="comment">//</span>
36 <a name="l00012"></a>00012 
37 <a name="l00013"></a>00013 <span class="preprocessor">#ifndef _BOOST_UBLAS_MATRIX_EXPRESSION_</span>
38 <a name="l00014"></a>00014 <span class="preprocessor"></span><span class="preprocessor">#define _BOOST_UBLAS_MATRIX_EXPRESSION_</span>
39 <a name="l00015"></a>00015 <span class="preprocessor"></span>
40 <a name="l00016"></a>00016 <span class="preprocessor">#include &lt;boost/numeric/ublas/vector_expression.hpp&gt;</span>
41 <a name="l00017"></a>00017 
42 <a name="l00018"></a>00018 <span class="comment">// Expression templates based on ideas of Todd Veldhuizen and Geoffrey Furnish</span>
43 <a name="l00019"></a>00019 <span class="comment">// Iterators based on ideas of Jeremy Siek</span>
44 <a name="l00020"></a>00020 <span class="comment">//</span>
45 <a name="l00021"></a>00021 <span class="comment">// Classes that model the Matrix Expression concept</span>
46 <a name="l00022"></a>00022 
47 <a name="l00023"></a>00023 <span class="keyword">namespace </span>boost { <span class="keyword">namespace </span>numeric { <span class="keyword">namespace </span>ublas {
48 <a name="l00024"></a>00024 
49 <a name="l00025"></a>00025     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt;
50 <a name="l00026"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__reference.html">00026</a>     <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__reference.html">matrix_reference</a>:
51 <a name="l00027"></a>00027         <span class="keyword">public</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression</a>&lt;matrix_reference&lt;E&gt; &gt; {
52 <a name="l00028"></a>00028 
53 <a name="l00029"></a>00029         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__reference.html">matrix_reference&lt;E&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__reference.html">self_type</a>;
54 <a name="l00030"></a>00030     <span class="keyword">public</span>:
55 <a name="l00031"></a>00031 <span class="preprocessor">#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS</span>
56 <a name="l00032"></a>00032 <span class="preprocessor"></span>        <span class="keyword">using</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;self_type&gt;::operator </a>();
57 <a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
58 <a name="l00034"></a>00034 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E::size_type size_type;
59 <a name="l00035"></a>00035         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::difference_type difference_type;
60 <a name="l00036"></a>00036         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::value_type value_type;
61 <a name="l00037"></a>00037         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_reference const_reference;
62 <a name="l00038"></a>00038         <span class="keyword">typedef</span> <span class="keyword">typename</span> boost::mpl::if_&lt;boost::is_const&lt;E&gt;,
63 <a name="l00039"></a>00039                                           <span class="keyword">typename</span> E::const_reference,
64 <a name="l00040"></a>00040                                           <span class="keyword">typename</span> E::reference&gt;::type reference;
65 <a name="l00041"></a>00041         <span class="keyword">typedef</span> E referred_type;
66 <a name="l00042"></a>00042         <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__reference.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__reference.html">const_closure_type</a>;
67 <a name="l00043"></a>00043         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__reference.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__reference.html">closure_type</a>;
68 <a name="l00044"></a>00044         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::orientation_category orientation_category;
69 <a name="l00045"></a>00045         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::storage_category storage_category;
70 <a name="l00046"></a>00046 
71 <a name="l00047"></a>00047         <span class="comment">// Construction and destruction</span>
72 <a name="l00048"></a>00048         BOOST_UBLAS_INLINE
73 <a name="l00049"></a>00049         <span class="keyword">explicit</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__reference.html">matrix_reference</a> (referred_type &amp;e):
74 <a name="l00050"></a>00050               e_ (e) {}
75 <a name="l00051"></a>00051 
76 <a name="l00052"></a>00052         <span class="comment">// Accessors</span>
77 <a name="l00053"></a>00053         BOOST_UBLAS_INLINE
78 <a name="l00054"></a>00054         size_type size1 ()<span class="keyword"> const </span>{
79 <a name="l00055"></a>00055             <span class="keywordflow">return</span> e_.size1 ();
80 <a name="l00056"></a>00056         }
81 <a name="l00057"></a>00057         BOOST_UBLAS_INLINE
82 <a name="l00058"></a>00058         size_type size2 ()<span class="keyword"> const </span>{
83 <a name="l00059"></a>00059             <span class="keywordflow">return</span> e_.size2 ();
84 <a name="l00060"></a>00060         }
85 <a name="l00061"></a>00061 
86 <a name="l00062"></a>00062     <span class="keyword">public</span>:
87 <a name="l00063"></a>00063         <span class="comment">// Expression accessors - const correct</span>
88 <a name="l00064"></a>00064         BOOST_UBLAS_INLINE
89 <a name="l00065"></a>00065         <span class="keyword">const</span> referred_type &amp;expression ()<span class="keyword"> const </span>{
90 <a name="l00066"></a>00066             <span class="keywordflow">return</span> e_;
91 <a name="l00067"></a>00067         }
92 <a name="l00068"></a>00068         BOOST_UBLAS_INLINE
93 <a name="l00069"></a>00069         referred_type &amp;expression () {
94 <a name="l00070"></a>00070             <span class="keywordflow">return</span> e_;
95 <a name="l00071"></a>00071         }
96 <a name="l00072"></a>00072 
97 <a name="l00073"></a>00073     <span class="keyword">public</span>:
98 <a name="l00074"></a>00074         <span class="comment">// Element access</span>
99 <a name="l00075"></a>00075 <span class="preprocessor">#ifndef BOOST_UBLAS_REFERENCE_CONST_MEMBER</span>
100 <a name="l00076"></a>00076 <span class="preprocessor"></span>        BOOST_UBLAS_INLINE
101 <a name="l00077"></a>00077         const_reference operator () (size_type i, size_type j)<span class="keyword"> const </span>{
102 <a name="l00078"></a>00078             <span class="keywordflow">return</span> expression () (i, j);
103 <a name="l00079"></a>00079         }
104 <a name="l00080"></a>00080         BOOST_UBLAS_INLINE
105 <a name="l00081"></a>00081         reference operator () (size_type i, size_type j) {
106 <a name="l00082"></a>00082             <span class="keywordflow">return</span> expression () (i, j);
107 <a name="l00083"></a>00083         }
108 <a name="l00084"></a>00084 <span class="preprocessor">#else</span>
109 <a name="l00085"></a>00085 <span class="preprocessor"></span>        BOOST_UBLAS_INLINE
110 <a name="l00086"></a>00086         reference operator () (size_type i, size_type j)<span class="keyword"> const </span>{
111 <a name="l00087"></a>00087             <span class="keywordflow">return</span> expression () (i, j);
112 <a name="l00088"></a>00088         }
113 <a name="l00089"></a>00089 <span class="preprocessor">#endif</span>
114 <a name="l00090"></a>00090 <span class="preprocessor"></span>
115 <a name="l00091"></a>00091         <span class="comment">// Assignment</span>
116 <a name="l00092"></a>00092         BOOST_UBLAS_INLINE
117 <a name="l00093"></a>00093         matrix_reference &amp;operator = (<span class="keyword">const</span> matrix_reference &amp;m) {
118 <a name="l00094"></a>00094             expression ().operator = (m);
119 <a name="l00095"></a>00095             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
120 <a name="l00096"></a>00096         }
121 <a name="l00097"></a>00097         <span class="keyword">template</span>&lt;<span class="keyword">class</span> AE&gt;
122 <a name="l00098"></a>00098         BOOST_UBLAS_INLINE
123 <a name="l00099"></a>00099         matrix_reference &amp;operator = (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;AE&gt;</a> &amp;ae) {
124 <a name="l00100"></a>00100             expression ().operator = (ae);
125 <a name="l00101"></a>00101             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
126 <a name="l00102"></a>00102         }
127 <a name="l00103"></a>00103         <span class="keyword">template</span>&lt;<span class="keyword">class</span> AE&gt;
128 <a name="l00104"></a>00104         BOOST_UBLAS_INLINE
129 <a name="l00105"></a>00105         matrix_reference &amp;assign (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;AE&gt;</a> &amp;ae) {
130 <a name="l00106"></a>00106             expression ().assign (ae);
131 <a name="l00107"></a>00107             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
132 <a name="l00108"></a>00108         }
133 <a name="l00109"></a>00109         <span class="keyword">template</span>&lt;<span class="keyword">class</span> AE&gt;
134 <a name="l00110"></a>00110         BOOST_UBLAS_INLINE
135 <a name="l00111"></a>00111         matrix_reference &amp;operator += (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;AE&gt;</a> &amp;ae) {
136 <a name="l00112"></a>00112             expression ().operator += (ae);
137 <a name="l00113"></a>00113             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
138 <a name="l00114"></a>00114         }
139 <a name="l00115"></a>00115         <span class="keyword">template</span>&lt;<span class="keyword">class</span> AE&gt;
140 <a name="l00116"></a>00116         BOOST_UBLAS_INLINE
141 <a name="l00117"></a>00117         matrix_reference &amp;plus_assign (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;AE&gt;</a> &amp;ae) {
142 <a name="l00118"></a>00118             expression ().plus_assign (ae);
143 <a name="l00119"></a>00119             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
144 <a name="l00120"></a>00120         }
145 <a name="l00121"></a>00121         <span class="keyword">template</span>&lt;<span class="keyword">class</span> AE&gt;
146 <a name="l00122"></a>00122         BOOST_UBLAS_INLINE
147 <a name="l00123"></a>00123         matrix_reference &amp;operator -= (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;AE&gt;</a> &amp;ae) {
148 <a name="l00124"></a>00124             expression ().operator -= (ae);
149 <a name="l00125"></a>00125             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
150 <a name="l00126"></a>00126         }
151 <a name="l00127"></a>00127         <span class="keyword">template</span>&lt;<span class="keyword">class</span> AE&gt;
152 <a name="l00128"></a>00128         BOOST_UBLAS_INLINE
153 <a name="l00129"></a>00129         matrix_reference &amp;minus_assign (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;AE&gt;</a> &amp;ae) {
154 <a name="l00130"></a>00130             expression ().minus_assign (ae);
155 <a name="l00131"></a>00131             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
156 <a name="l00132"></a>00132         }
157 <a name="l00133"></a>00133         <span class="keyword">template</span>&lt;<span class="keyword">class</span> AT&gt;
158 <a name="l00134"></a>00134         BOOST_UBLAS_INLINE
159 <a name="l00135"></a>00135         matrix_reference &amp;operator *= (<span class="keyword">const</span> AT &amp;at) {
160 <a name="l00136"></a>00136             expression ().operator *= (at);
161 <a name="l00137"></a>00137             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
162 <a name="l00138"></a>00138         }
163 <a name="l00139"></a>00139         <span class="keyword">template</span>&lt;<span class="keyword">class</span> AT&gt;
164 <a name="l00140"></a>00140         BOOST_UBLAS_INLINE
165 <a name="l00141"></a>00141         matrix_reference &amp;operator /= (<span class="keyword">const</span> AT &amp;at) {
166 <a name="l00142"></a>00142             expression ().operator /= (at);
167 <a name="l00143"></a>00143             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
168 <a name="l00144"></a>00144         }
169 <a name="l00145"></a>00145 
170 <a name="l00146"></a>00146          <span class="comment">// Swapping</span>
171 <a name="l00147"></a>00147         BOOST_UBLAS_INLINE
172 <a name="l00148"></a>00148         <span class="keywordtype">void</span> swap (matrix_reference &amp;m) {
173 <a name="l00149"></a>00149             expression ().swap (m.expression ());
174 <a name="l00150"></a>00150         }
175 <a name="l00151"></a>00151 
176 <a name="l00152"></a>00152         <span class="comment">// Closure comparison</span>
177 <a name="l00153"></a>00153         BOOST_UBLAS_INLINE
178 <a name="l00154"></a>00154         <span class="keywordtype">bool</span> same_closure (<span class="keyword">const</span> matrix_reference &amp;mr)<span class="keyword"> const </span>{
179 <a name="l00155"></a>00155             <span class="keywordflow">return</span> &amp;(*this).e_ == &amp;mr.e_;
180 <a name="l00156"></a>00156         }
181 <a name="l00157"></a>00157 
182 <a name="l00158"></a>00158         <span class="comment">// Iterator types</span>
183 <a name="l00159"></a>00159         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_iterator1 const_iterator1;
184 <a name="l00160"></a>00160         <span class="keyword">typedef</span> <span class="keyword">typename</span> boost::mpl::if_&lt;boost::is_const&lt;E&gt;,
185 <a name="l00161"></a>00161                                           <span class="keyword">typename</span> E::const_iterator1,
186 <a name="l00162"></a>00162                                           <span class="keyword">typename</span> E::iterator1&gt;::type iterator1;
187 <a name="l00163"></a>00163         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_iterator2 const_iterator2;
188 <a name="l00164"></a>00164         <span class="keyword">typedef</span> <span class="keyword">typename</span> boost::mpl::if_&lt;boost::is_const&lt;E&gt;,
189 <a name="l00165"></a>00165                                           <span class="keyword">typename</span> E::const_iterator2,
190 <a name="l00166"></a>00166                                           <span class="keyword">typename</span> E::iterator2&gt;::type iterator2;
191 <a name="l00167"></a>00167 
192 <a name="l00168"></a>00168         <span class="comment">// Element lookup</span>
193 <a name="l00169"></a>00169         BOOST_UBLAS_INLINE
194 <a name="l00170"></a>00170         const_iterator1 find1 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
195 <a name="l00171"></a>00171             <span class="keywordflow">return</span> expression ().find1 (rank, i, j);
196 <a name="l00172"></a>00172         }
197 <a name="l00173"></a>00173         BOOST_UBLAS_INLINE
198 <a name="l00174"></a>00174         iterator1 find1 (<span class="keywordtype">int</span> rank, size_type i, size_type j) {
199 <a name="l00175"></a>00175             <span class="keywordflow">return</span> expression ().find1 (rank, i, j);
200 <a name="l00176"></a>00176         }
201 <a name="l00177"></a>00177         BOOST_UBLAS_INLINE
202 <a name="l00178"></a>00178         const_iterator2 find2 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
203 <a name="l00179"></a>00179             <span class="keywordflow">return</span> expression ().find2 (rank, i, j);
204 <a name="l00180"></a>00180         }
205 <a name="l00181"></a>00181         BOOST_UBLAS_INLINE
206 <a name="l00182"></a>00182         iterator2 find2 (<span class="keywordtype">int</span> rank, size_type i, size_type j) {
207 <a name="l00183"></a>00183             <span class="keywordflow">return</span> expression ().find2 (rank, i, j);
208 <a name="l00184"></a>00184         }
209 <a name="l00185"></a>00185 
210 <a name="l00186"></a>00186         <span class="comment">// Iterators are the iterators of the referenced expression.</span>
211 <a name="l00187"></a>00187 
212 <a name="l00188"></a>00188         BOOST_UBLAS_INLINE
213 <a name="l00189"></a>00189         const_iterator1 begin1 ()<span class="keyword"> const </span>{
214 <a name="l00190"></a>00190             <span class="keywordflow">return</span> expression ().begin1 ();
215 <a name="l00191"></a>00191         }
216 <a name="l00192"></a>00192         BOOST_UBLAS_INLINE
217 <a name="l00193"></a>00193         const_iterator1 end1 ()<span class="keyword"> const </span>{
218 <a name="l00194"></a>00194             <span class="keywordflow">return</span> expression ().end1 ();
219 <a name="l00195"></a>00195         }
220 <a name="l00196"></a>00196 
221 <a name="l00197"></a>00197         BOOST_UBLAS_INLINE
222 <a name="l00198"></a>00198         iterator1 begin1 () {
223 <a name="l00199"></a>00199             <span class="keywordflow">return</span> expression ().begin1 ();
224 <a name="l00200"></a>00200         }
225 <a name="l00201"></a>00201         BOOST_UBLAS_INLINE
226 <a name="l00202"></a>00202         iterator1 end1 () {
227 <a name="l00203"></a>00203             <span class="keywordflow">return</span> expression ().end1 ();
228 <a name="l00204"></a>00204         }
229 <a name="l00205"></a>00205 
230 <a name="l00206"></a>00206         BOOST_UBLAS_INLINE
231 <a name="l00207"></a>00207         const_iterator2 begin2 ()<span class="keyword"> const </span>{
232 <a name="l00208"></a>00208             <span class="keywordflow">return</span> expression ().begin2 ();
233 <a name="l00209"></a>00209         }
234 <a name="l00210"></a>00210         BOOST_UBLAS_INLINE
235 <a name="l00211"></a>00211         const_iterator2 end2 ()<span class="keyword"> const </span>{
236 <a name="l00212"></a>00212             <span class="keywordflow">return</span> expression ().end2 ();
237 <a name="l00213"></a>00213         }
238 <a name="l00214"></a>00214 
239 <a name="l00215"></a>00215         BOOST_UBLAS_INLINE
240 <a name="l00216"></a>00216         iterator2 begin2 () {
241 <a name="l00217"></a>00217             <span class="keywordflow">return</span> expression ().begin2 ();
242 <a name="l00218"></a>00218         }
243 <a name="l00219"></a>00219         BOOST_UBLAS_INLINE
244 <a name="l00220"></a>00220         iterator2 end2 () {
245 <a name="l00221"></a>00221             <span class="keywordflow">return</span> expression ().end2 ();
246 <a name="l00222"></a>00222         }
247 <a name="l00223"></a>00223 
248 <a name="l00224"></a>00224         <span class="comment">// Reverse iterators</span>
249 <a name="l00225"></a>00225         <span class="keyword">typedef</span> reverse_iterator_base1&lt;const_iterator1&gt; const_reverse_iterator1;
250 <a name="l00226"></a>00226         <span class="keyword">typedef</span> reverse_iterator_base1&lt;iterator1&gt; reverse_iterator1;
251 <a name="l00227"></a>00227 
252 <a name="l00228"></a>00228         BOOST_UBLAS_INLINE
253 <a name="l00229"></a>00229         const_reverse_iterator1 rbegin1 ()<span class="keyword"> const </span>{
254 <a name="l00230"></a>00230             <span class="keywordflow">return</span> const_reverse_iterator1 (end1 ());
255 <a name="l00231"></a>00231         }
256 <a name="l00232"></a>00232         BOOST_UBLAS_INLINE
257 <a name="l00233"></a>00233         const_reverse_iterator1 rend1 ()<span class="keyword"> const </span>{
258 <a name="l00234"></a>00234             <span class="keywordflow">return</span> const_reverse_iterator1 (begin1 ());
259 <a name="l00235"></a>00235         }
260 <a name="l00236"></a>00236 
261 <a name="l00237"></a>00237         BOOST_UBLAS_INLINE
262 <a name="l00238"></a>00238         reverse_iterator1 rbegin1 () {
263 <a name="l00239"></a>00239             <span class="keywordflow">return</span> reverse_iterator1 (end1 ());
264 <a name="l00240"></a>00240         }
265 <a name="l00241"></a>00241         BOOST_UBLAS_INLINE
266 <a name="l00242"></a>00242         reverse_iterator1 rend1 () {
267 <a name="l00243"></a>00243             <span class="keywordflow">return</span> reverse_iterator1 (begin1 ());
268 <a name="l00244"></a>00244         }
269 <a name="l00245"></a>00245 
270 <a name="l00246"></a>00246         <span class="keyword">typedef</span> reverse_iterator_base2&lt;const_iterator2&gt; const_reverse_iterator2;
271 <a name="l00247"></a>00247         <span class="keyword">typedef</span> reverse_iterator_base2&lt;iterator2&gt; reverse_iterator2;
272 <a name="l00248"></a>00248 
273 <a name="l00249"></a>00249         BOOST_UBLAS_INLINE
274 <a name="l00250"></a>00250         const_reverse_iterator2 rbegin2 ()<span class="keyword"> const </span>{
275 <a name="l00251"></a>00251             <span class="keywordflow">return</span> const_reverse_iterator2 (end2 ());
276 <a name="l00252"></a>00252         }
277 <a name="l00253"></a>00253         BOOST_UBLAS_INLINE
278 <a name="l00254"></a>00254         const_reverse_iterator2 rend2 ()<span class="keyword"> const </span>{
279 <a name="l00255"></a>00255             <span class="keywordflow">return</span> const_reverse_iterator2 (begin2 ());
280 <a name="l00256"></a>00256         }
281 <a name="l00257"></a>00257 
282 <a name="l00258"></a>00258         BOOST_UBLAS_INLINE
283 <a name="l00259"></a>00259         reverse_iterator2 rbegin2 () {
284 <a name="l00260"></a>00260             <span class="keywordflow">return</span> reverse_iterator2 (end2 ());
285 <a name="l00261"></a>00261         }
286 <a name="l00262"></a>00262         BOOST_UBLAS_INLINE
287 <a name="l00263"></a>00263         reverse_iterator2 rend2 () {
288 <a name="l00264"></a>00264             <span class="keywordflow">return</span> reverse_iterator2 (begin2 ());
289 <a name="l00265"></a>00265         }
290 <a name="l00266"></a>00266 
291 <a name="l00267"></a>00267     <span class="keyword">private</span>:
292 <a name="l00268"></a>00268         referred_type &amp;e_;
293 <a name="l00269"></a>00269     };
294 <a name="l00270"></a>00270 
295 <a name="l00271"></a>00271 
296 <a name="l00272"></a>00272     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2, <span class="keyword">class</span> F&gt;
297 <a name="l00273"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">00273</a>     <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">vector_matrix_binary</a>:
298 <a name="l00274"></a>00274         <span class="keyword">public</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression</a>&lt;vector_matrix_binary&lt;E1, E2, F&gt; &gt; {
299 <a name="l00275"></a>00275 
300 <a name="l00276"></a>00276         <span class="keyword">typedef</span> E1 expression1_type;
301 <a name="l00277"></a>00277         <span class="keyword">typedef</span> E2 expression2_type;
302 <a name="l00278"></a>00278     <span class="keyword">public</span>:
303 <a name="l00279"></a>00279         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_closure_type expression1_closure_type;
304 <a name="l00280"></a>00280         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_closure_type expression2_closure_type;
305 <a name="l00281"></a>00281     <span class="keyword">private</span>:
306 <a name="l00282"></a>00282         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">vector_matrix_binary&lt;E1, E2, F&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a>;
307 <a name="l00283"></a>00283     <span class="keyword">public</span>:
308 <a name="l00284"></a>00284 <span class="preprocessor">#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS</span>
309 <a name="l00285"></a>00285 <span class="preprocessor"></span>        <span class="keyword">using</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;self_type&gt;::operator </a>();
310 <a name="l00286"></a>00286 <span class="preprocessor">#endif</span>
311 <a name="l00287"></a>00287 <span class="preprocessor"></span>        <span class="keyword">typedef</span> F functor_type;
312 <a name="l00288"></a>00288         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;typename E1::size_type, typename E2::size_type&gt;::promote_type</a> size_type;
313 <a name="l00289"></a>00289         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;typename E1::difference_type, typename E2::difference_type&gt;::promote_type</a> difference_type;
314 <a name="l00290"></a>00290         <span class="keyword">typedef</span> <span class="keyword">typename</span> F::result_type value_type;
315 <a name="l00291"></a>00291         <span class="keyword">typedef</span> value_type const_reference;
316 <a name="l00292"></a>00292         <span class="keyword">typedef</span> const_reference reference;
317 <a name="l00293"></a>00293         <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">const_closure_type</a>;
318 <a name="l00294"></a>00294         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">const_closure_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">closure_type</a>;
319 <a name="l00295"></a>00295         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__orientation__tag.html">unknown_orientation_tag</a> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__orientation__tag.html">orientation_category</a>;
320 <a name="l00296"></a>00296         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">storage_category</a>;
321 <a name="l00297"></a>00297 
322 <a name="l00298"></a>00298         <span class="comment">// Construction and destruction </span>
323 <a name="l00299"></a>00299         BOOST_UBLAS_INLINE
324 <a name="l00300"></a>00300         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">vector_matrix_binary</a> (<span class="keyword">const</span> expression1_type &amp;e1, <span class="keyword">const</span> expression2_type &amp;e2): 
325 <a name="l00301"></a>00301             e1_ (e1), e2_ (e2) {}
326 <a name="l00302"></a>00302 
327 <a name="l00303"></a>00303         <span class="comment">// Accessors</span>
328 <a name="l00304"></a>00304         BOOST_UBLAS_INLINE
329 <a name="l00305"></a>00305         size_type size1 ()<span class="keyword"> const </span>{
330 <a name="l00306"></a>00306             <span class="keywordflow">return</span> e1_.size ();
331 <a name="l00307"></a>00307         }
332 <a name="l00308"></a>00308         BOOST_UBLAS_INLINE
333 <a name="l00309"></a>00309         size_type size2 ()<span class="keyword"> const </span>{ 
334 <a name="l00310"></a>00310             <span class="keywordflow">return</span> e2_.size ();
335 <a name="l00311"></a>00311         }
336 <a name="l00312"></a>00312 
337 <a name="l00313"></a>00313     <span class="keyword">public</span>:
338 <a name="l00314"></a>00314         <span class="comment">// Expression accessors</span>
339 <a name="l00315"></a>00315         BOOST_UBLAS_INLINE
340 <a name="l00316"></a>00316         <span class="keyword">const</span> expression1_closure_type &amp;expression1 ()<span class="keyword"> const </span>{
341 <a name="l00317"></a>00317             <span class="keywordflow">return</span> e1_;
342 <a name="l00318"></a>00318         }
343 <a name="l00319"></a>00319         BOOST_UBLAS_INLINE
344 <a name="l00320"></a>00320         <span class="keyword">const</span> expression2_closure_type &amp;expression2 ()<span class="keyword"> const </span>{
345 <a name="l00321"></a>00321             <span class="keywordflow">return</span> e2_;
346 <a name="l00322"></a>00322         }
347 <a name="l00323"></a>00323 
348 <a name="l00324"></a>00324     <span class="keyword">public</span>:
349 <a name="l00325"></a>00325         <span class="comment">// Element access</span>
350 <a name="l00326"></a>00326         BOOST_UBLAS_INLINE
351 <a name="l00327"></a>00327         const_reference operator () (size_type i, size_type j)<span class="keyword"> const </span>{
352 <a name="l00328"></a>00328             <span class="keywordflow">return</span> functor_type::apply (e1_ (i), e2_ (j));
353 <a name="l00329"></a>00329         }
354 <a name="l00330"></a>00330 
355 <a name="l00331"></a>00331         <span class="comment">// Closure comparison</span>
356 <a name="l00332"></a>00332         BOOST_UBLAS_INLINE
357 <a name="l00333"></a>00333         <span class="keywordtype">bool</span> same_closure (<span class="keyword">const</span> vector_matrix_binary &amp;vmb)<span class="keyword"> const </span>{
358 <a name="l00334"></a>00334             <span class="keywordflow">return</span> (*this).expression1 ().same_closure (vmb.expression1 ()) &amp;&amp;
359 <a name="l00335"></a>00335                    (*this).expression2 ().same_closure (vmb.expression2 ());
360 <a name="l00336"></a>00336         }
361 <a name="l00337"></a>00337 
362 <a name="l00338"></a>00338         <span class="comment">// Iterator types</span>
363 <a name="l00339"></a>00339     <span class="keyword">private</span>:
364 <a name="l00340"></a>00340         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_iterator const_subiterator1_type;
365 <a name="l00341"></a>00341         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_iterator const_subiterator2_type;
366 <a name="l00342"></a>00342         <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
367 <a name="l00343"></a>00343 
368 <a name="l00344"></a>00344     <span class="keyword">public</span>:
369 <a name="l00345"></a>00345 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
370 <a name="l00346"></a>00346 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> const_subiterator1_type::iterator_category,
371 <a name="l00347"></a>00347                                                   <span class="keyword">typename</span> const_subiterator2_type::iterator_category&gt;::iterator_category iterator_category;
372 <a name="l00348"></a>00348         <span class="keyword">typedef</span> indexed_const_iterator1&lt;const_closure_type, iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a>;
373 <a name="l00349"></a>00349         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">iterator1</a>;
374 <a name="l00350"></a>00350         <span class="keyword">typedef</span> indexed_const_iterator2&lt;const_closure_type, iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a>;
375 <a name="l00351"></a>00351         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">iterator2</a>;
376 <a name="l00352"></a>00352 <span class="preprocessor">#else</span>
377 <a name="l00353"></a>00353 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a>;
378 <a name="l00354"></a>00354         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">iterator1</a>;
379 <a name="l00355"></a>00355         <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a>;
380 <a name="l00356"></a>00356         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">iterator2</a>;
381 <a name="l00357"></a>00357 <span class="preprocessor">#endif</span>
382 <a name="l00358"></a>00358 <span class="preprocessor"></span>        <span class="keyword">typedef</span> reverse_iterator_base1&lt;const_iterator1&gt; const_reverse_iterator1;
383 <a name="l00359"></a>00359         <span class="keyword">typedef</span> reverse_iterator_base2&lt;const_iterator2&gt; const_reverse_iterator2;
384 <a name="l00360"></a>00360 
385 <a name="l00361"></a>00361         <span class="comment">// Element lookup</span>
386 <a name="l00362"></a>00362         BOOST_UBLAS_INLINE
387 <a name="l00363"></a>00363         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a> find1 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
388 <a name="l00364"></a>00364             const_subiterator1_type it1 (e1_.find (i));
389 <a name="l00365"></a>00365             const_subiterator1_type it1_end (e1_.find (size1 ()));
390 <a name="l00366"></a>00366             const_subiterator2_type it2 (e2_.find (j));
391 <a name="l00367"></a>00367             const_subiterator2_type it2_end (e2_.find (size2 ()));
392 <a name="l00368"></a>00368             <span class="keywordflow">if</span> (it2 == it2_end || (rank == 1 &amp;&amp; (it2.index () != j || *it2 == value_type<span class="comment">/*zero*/</span>()))) {
393 <a name="l00369"></a>00369                 it1 = it1_end;
394 <a name="l00370"></a>00370                 it2 = it2_end;
395 <a name="l00371"></a>00371             }
396 <a name="l00372"></a>00372 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
397 <a name="l00373"></a>00373 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, it1.index (), it2.index ());
398 <a name="l00374"></a>00374 <span class="preprocessor">#else</span>
399 <a name="l00375"></a>00375 <span class="preprocessor"></span><span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
400 <a name="l00376"></a>00376 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, it1, it2, it2 != it2_end ? *it2 : value_type<span class="comment">/*zero*/</span>());
401 <a name="l00377"></a>00377 <span class="preprocessor">#else</span>
402 <a name="l00378"></a>00378 <span class="preprocessor"></span>            <span class="keywordflow">return</span> const_iterator1 (*<span class="keyword">this</span>, it1, it2);
403 <a name="l00379"></a>00379 <span class="preprocessor">#endif</span>
404 <a name="l00380"></a>00380 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
405 <a name="l00381"></a>00381 <span class="preprocessor"></span>        }
406 <a name="l00382"></a>00382         BOOST_UBLAS_INLINE
407 <a name="l00383"></a>00383         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a> find2 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
408 <a name="l00384"></a>00384             const_subiterator2_type it2 (e2_.find (j));
409 <a name="l00385"></a>00385             const_subiterator2_type it2_end (e2_.find (size2 ()));
410 <a name="l00386"></a>00386             const_subiterator1_type it1 (e1_.find (i));
411 <a name="l00387"></a>00387             const_subiterator1_type it1_end (e1_.find (size1 ()));
412 <a name="l00388"></a>00388             <span class="keywordflow">if</span> (it1 == it1_end || (rank == 1 &amp;&amp; (it1.index () != i || *it1 == value_type<span class="comment">/*zero*/</span>()))) {
413 <a name="l00389"></a>00389                 it2 = it2_end;
414 <a name="l00390"></a>00390                 it1 = it1_end;
415 <a name="l00391"></a>00391             }
416 <a name="l00392"></a>00392 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
417 <a name="l00393"></a>00393 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, it1.index (), it2.index ());
418 <a name="l00394"></a>00394 <span class="preprocessor">#else</span>
419 <a name="l00395"></a>00395 <span class="preprocessor"></span><span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
420 <a name="l00396"></a>00396 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, it1, it2, it1 != it1_end ? *it1 : value_type<span class="comment">/*zero*/</span>());
421 <a name="l00397"></a>00397 <span class="preprocessor">#else</span>
422 <a name="l00398"></a>00398 <span class="preprocessor"></span>            <span class="keywordflow">return</span> const_iterator2 (*<span class="keyword">this</span>, it1, it2);
423 <a name="l00399"></a>00399 <span class="preprocessor">#endif</span>
424 <a name="l00400"></a>00400 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
425 <a name="l00401"></a>00401 <span class="preprocessor"></span>        }
426 <a name="l00402"></a>00402 
427 <a name="l00403"></a>00403         <span class="comment">// Iterators enhance the iterators of the referenced expressions</span>
428 <a name="l00404"></a>00404         <span class="comment">// with the binary functor.</span>
429 <a name="l00405"></a>00405 
430 <a name="l00406"></a>00406 <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
431 <a name="l00407"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">00407</a> <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a>:
432 <a name="l00408"></a>00408             <span class="keyword">public</span> container_const_reference&lt;vector_matrix_binary&gt;,
433 <a name="l00409"></a>00409             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename iterator_restrict_traits&lt;typename E1::const_iterator::iterator_category,
434 <a name="l00410"></a>00410                                                                           typename E2::const_iterator::iterator_category&gt;::iterator_category&gt;::template
435 <a name="l00411"></a>00411                 iterator_base&lt;const_iterator1, value_type&gt;::type {
436 <a name="l00412"></a>00412         <span class="keyword">public</span>:
437 <a name="l00413"></a>00413             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> E1::const_iterator::iterator_category,
438 <a name="l00414"></a>00414                                                       <span class="keyword">typename</span> E2::const_iterator::iterator_category&gt;::iterator_category iterator_category;
439 <a name="l00415"></a>00415             <span class="keyword">typedef</span> <span class="keyword">typename</span> vector_matrix_binary::difference_type difference_type;
440 <a name="l00416"></a>00416             <span class="keyword">typedef</span> <span class="keyword">typename</span> vector_matrix_binary::value_type value_type;
441 <a name="l00417"></a>00417             <span class="keyword">typedef</span> <span class="keyword">typename</span> vector_matrix_binary::const_reference reference;
442 <a name="l00418"></a>00418             <span class="keyword">typedef</span> <span class="keyword">typename</span> vector_matrix_binary::const_pointer pointer;
443 <a name="l00419"></a>00419 
444 <a name="l00420"></a>00420             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">dual_iterator_type</a>;
445 <a name="l00421"></a>00421             <span class="keyword">typedef</span> const_reverse_iterator2 dual_reverse_iterator_type;
446 <a name="l00422"></a>00422 
447 <a name="l00423"></a>00423             <span class="comment">// Construction and destruction</span>
448 <a name="l00424"></a>00424 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
449 <a name="l00425"></a>00425 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
450 <a name="l00426"></a>00426             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a> ():
451 <a name="l00427"></a>00427                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ (), t2_ () {}
452 <a name="l00428"></a>00428             BOOST_UBLAS_INLINE
453 <a name="l00429"></a>00429             const_iterator1 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a> &amp;vmb, <span class="keyword">const</span> const_subiterator1_type &amp;it1, <span class="keyword">const</span> const_subiterator2_type &amp;it2, value_type t2):
454 <a name="l00430"></a>00430                 container_const_reference&lt;self_type&gt; (vmb), it1_ (it1), it2_ (it2), t2_ (t2) {}
455 <a name="l00431"></a>00431 <span class="preprocessor">#else</span>
456 <a name="l00432"></a>00432 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
457 <a name="l00433"></a>00433             const_iterator1 ():
458 <a name="l00434"></a>00434                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ () {}
459 <a name="l00435"></a>00435             BOOST_UBLAS_INLINE
460 <a name="l00436"></a>00436             const_iterator1 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a> &amp;vmb, <span class="keyword">const</span> const_subiterator1_type &amp;it1, <span class="keyword">const</span> const_subiterator2_type &amp;it2):
461 <a name="l00437"></a>00437                 container_const_reference&lt;self_type&gt; (vmb), it1_ (it1), it2_ (it2) {}
462 <a name="l00438"></a>00438 <span class="preprocessor">#endif</span>
463 <a name="l00439"></a>00439 <span class="preprocessor"></span>
464 <a name="l00440"></a>00440             <span class="comment">// Arithmetic</span>
465 <a name="l00441"></a>00441             BOOST_UBLAS_INLINE
466 <a name="l00442"></a>00442             const_iterator1 &amp;operator ++ () {
467 <a name="l00443"></a>00443                 ++ it1_;
468 <a name="l00444"></a>00444                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
469 <a name="l00445"></a>00445             }
470 <a name="l00446"></a>00446             BOOST_UBLAS_INLINE
471 <a name="l00447"></a>00447             const_iterator1 &amp;operator -- () {
472 <a name="l00448"></a>00448                 -- it1_;
473 <a name="l00449"></a>00449                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
474 <a name="l00450"></a>00450             }
475 <a name="l00451"></a>00451             BOOST_UBLAS_INLINE
476 <a name="l00452"></a>00452             const_iterator1 &amp;operator += (difference_type n) {
477 <a name="l00453"></a>00453                 it1_ += n;
478 <a name="l00454"></a>00454                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
479 <a name="l00455"></a>00455             }
480 <a name="l00456"></a>00456             BOOST_UBLAS_INLINE
481 <a name="l00457"></a>00457             const_iterator1 &amp;operator -= (difference_type n) {
482 <a name="l00458"></a>00458                 it1_ -= n;
483 <a name="l00459"></a>00459                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
484 <a name="l00460"></a>00460             }
485 <a name="l00461"></a>00461             BOOST_UBLAS_INLINE
486 <a name="l00462"></a>00462             difference_type operator - (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
487 <a name="l00463"></a>00463                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
488 <a name="l00464"></a>00464                 BOOST_UBLAS_CHECK (it2_ == it.it2_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
489 <a name="l00465"></a>00465                 <span class="keywordflow">return</span> it1_ - it.it1_;
490 <a name="l00466"></a>00466             }
491 <a name="l00467"></a>00467 
492 <a name="l00468"></a>00468             <span class="comment">// Dereference</span>
493 <a name="l00469"></a>00469             BOOST_UBLAS_INLINE
494 <a name="l00470"></a>00470             const_reference operator * ()<span class="keyword"> const </span>{
495 <a name="l00471"></a>00471 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
496 <a name="l00472"></a>00472 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (*it1_, t2_);
497 <a name="l00473"></a>00473 <span class="preprocessor">#else</span>
498 <a name="l00474"></a>00474 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (*it1_, *it2_);
499 <a name="l00475"></a>00475 <span class="preprocessor">#endif</span>
500 <a name="l00476"></a>00476 <span class="preprocessor"></span>            }
501 <a name="l00477"></a>00477             BOOST_UBLAS_INLINE
502 <a name="l00478"></a>00478             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
503 <a name="l00479"></a>00479                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
504 <a name="l00480"></a>00480             }
505 <a name="l00481"></a>00481 
506 <a name="l00482"></a>00482 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
507 <a name="l00483"></a>00483 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
508 <a name="l00484"></a>00484 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
509 <a name="l00485"></a>00485 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a>::
510 <a name="l00486"></a>00486 <span class="preprocessor">#endif</span>
511 <a name="l00487"></a>00487 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a> begin ()<span class="keyword"> const </span>{
512 <a name="l00488"></a>00488                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), 0);
513 <a name="l00489"></a>00489             }
514 <a name="l00490"></a>00490             BOOST_UBLAS_INLINE
515 <a name="l00491"></a>00491 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
516 <a name="l00492"></a>00492 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a>::
517 <a name="l00493"></a>00493 <span class="preprocessor">#endif</span>
518 <a name="l00494"></a>00494 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a> end ()<span class="keyword"> const </span>{
519 <a name="l00495"></a>00495                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), (*this) ().size2 ());
520 <a name="l00496"></a>00496             }
521 <a name="l00497"></a>00497             BOOST_UBLAS_INLINE
522 <a name="l00498"></a>00498 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
523 <a name="l00499"></a>00499 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a>::
524 <a name="l00500"></a>00500 <span class="preprocessor">#endif</span>
525 <a name="l00501"></a>00501 <span class="preprocessor"></span>            const_reverse_iterator2 rbegin ()<span class="keyword"> const </span>{
526 <a name="l00502"></a>00502                 <span class="keywordflow">return</span> const_reverse_iterator2 (end ());
527 <a name="l00503"></a>00503             }
528 <a name="l00504"></a>00504             BOOST_UBLAS_INLINE
529 <a name="l00505"></a>00505 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
530 <a name="l00506"></a>00506 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a>::
531 <a name="l00507"></a>00507 <span class="preprocessor">#endif</span>
532 <a name="l00508"></a>00508 <span class="preprocessor"></span>            const_reverse_iterator2 rend ()<span class="keyword"> const </span>{
533 <a name="l00509"></a>00509                 <span class="keywordflow">return</span> const_reverse_iterator2 (begin ());
534 <a name="l00510"></a>00510             }
535 <a name="l00511"></a>00511 <span class="preprocessor">#endif</span>
536 <a name="l00512"></a>00512 <span class="preprocessor"></span>
537 <a name="l00513"></a>00513             <span class="comment">// Indices</span>
538 <a name="l00514"></a>00514             BOOST_UBLAS_INLINE
539 <a name="l00515"></a>00515             size_type index1 ()<span class="keyword"> const </span>{
540 <a name="l00516"></a>00516                 <span class="keywordflow">return</span> it1_.index ();
541 <a name="l00517"></a>00517             }
542 <a name="l00518"></a>00518             BOOST_UBLAS_INLINE
543 <a name="l00519"></a>00519             size_type  index2 ()<span class="keyword"> const </span>{
544 <a name="l00520"></a>00520                 <span class="keywordflow">return</span> it2_.index ();
545 <a name="l00521"></a>00521             }
546 <a name="l00522"></a>00522 
547 <a name="l00523"></a>00523             <span class="comment">// Assignment</span>
548 <a name="l00524"></a>00524             BOOST_UBLAS_INLINE
549 <a name="l00525"></a>00525             const_iterator1 &amp;operator = (<span class="keyword">const</span> const_iterator1 &amp;it) {
550 <a name="l00526"></a>00526                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
551 <a name="l00527"></a>00527                 it1_ = it.it1_;
552 <a name="l00528"></a>00528                 it2_ = it.it2_;
553 <a name="l00529"></a>00529 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
554 <a name="l00530"></a>00530 <span class="preprocessor"></span>                t2_ = it.t2_;
555 <a name="l00531"></a>00531 <span class="preprocessor">#endif</span>
556 <a name="l00532"></a>00532 <span class="preprocessor"></span>                <span class="keywordflow">return</span> *<span class="keyword">this</span>;
557 <a name="l00533"></a>00533             }
558 <a name="l00534"></a>00534 
559 <a name="l00535"></a>00535             <span class="comment">// Comparison</span>
560 <a name="l00536"></a>00536             BOOST_UBLAS_INLINE
561 <a name="l00537"></a>00537             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
562 <a name="l00538"></a>00538                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
563 <a name="l00539"></a>00539                 BOOST_UBLAS_CHECK (it2_ == it.it2_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
564 <a name="l00540"></a>00540                 <span class="keywordflow">return</span> it1_ == it.it1_;
565 <a name="l00541"></a>00541             }
566 <a name="l00542"></a>00542             BOOST_UBLAS_INLINE
567 <a name="l00543"></a>00543             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
568 <a name="l00544"></a>00544                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
569 <a name="l00545"></a>00545                 BOOST_UBLAS_CHECK (it2_ == it.it2_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
570 <a name="l00546"></a>00546                 <span class="keywordflow">return</span> it1_ &lt; it.it1_;
571 <a name="l00547"></a>00547             }
572 <a name="l00548"></a>00548 
573 <a name="l00549"></a>00549         <span class="keyword">private</span>:
574 <a name="l00550"></a>00550 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
575 <a name="l00551"></a>00551 <span class="preprocessor"></span>            const_subiterator1_type it1_;
576 <a name="l00552"></a>00552             <span class="comment">// Mutable due to assignment</span>
577 <a name="l00553"></a>00553             <span class="comment">/* const */</span> const_subiterator2_type it2_;
578 <a name="l00554"></a>00554             value_type t2_;
579 <a name="l00555"></a>00555 <span class="preprocessor">#else</span>
580 <a name="l00556"></a>00556 <span class="preprocessor"></span>            const_subiterator1_type it1_;
581 <a name="l00557"></a>00557             const_subiterator2_type it2_;
582 <a name="l00558"></a>00558 <span class="preprocessor">#endif</span>
583 <a name="l00559"></a>00559 <span class="preprocessor"></span>        };
584 <a name="l00560"></a>00560 <span class="preprocessor">#endif</span>
585 <a name="l00561"></a>00561 <span class="preprocessor"></span>
586 <a name="l00562"></a>00562         BOOST_UBLAS_INLINE
587 <a name="l00563"></a>00563         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a> begin1 ()<span class="keyword"> const </span>{
588 <a name="l00564"></a>00564             <span class="keywordflow">return</span> find1 (0, 0, 0);
589 <a name="l00565"></a>00565         }
590 <a name="l00566"></a>00566         BOOST_UBLAS_INLINE
591 <a name="l00567"></a>00567         const_iterator1 end1 ()<span class="keyword"> const </span>{
592 <a name="l00568"></a>00568             <span class="keywordflow">return</span> find1 (0, size1 (), 0);
593 <a name="l00569"></a>00569         }
594 <a name="l00570"></a>00570 
595 <a name="l00571"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">00571</a> <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
596 <a name="l00572"></a>00572 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a>:
597 <a name="l00573"></a>00573             <span class="keyword">public</span> container_const_reference&lt;vector_matrix_binary&gt;,
598 <a name="l00574"></a>00574             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename iterator_restrict_traits&lt;typename E1::const_iterator::iterator_category,
599 <a name="l00575"></a>00575                                                                           typename E2::const_iterator::iterator_category&gt;::iterator_category&gt;::template
600 <a name="l00576"></a>00576                 iterator_base&lt;const_iterator2, value_type&gt;::type {
601 <a name="l00577"></a>00577         <span class="keyword">public</span>:
602 <a name="l00578"></a>00578             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> E1::const_iterator::iterator_category, 
603 <a name="l00579"></a>00579                                                       <span class="keyword">typename</span> E2::const_iterator::iterator_category&gt;::iterator_category iterator_category;
604 <a name="l00580"></a>00580             <span class="keyword">typedef</span> <span class="keyword">typename</span> vector_matrix_binary::difference_type difference_type;
605 <a name="l00581"></a>00581             <span class="keyword">typedef</span> <span class="keyword">typename</span> vector_matrix_binary::value_type value_type;
606 <a name="l00582"></a>00582             <span class="keyword">typedef</span> <span class="keyword">typename</span> vector_matrix_binary::const_reference reference;
607 <a name="l00583"></a>00583             <span class="keyword">typedef</span> <span class="keyword">typename</span> vector_matrix_binary::const_pointer pointer;
608 <a name="l00584"></a>00584 
609 <a name="l00585"></a>00585             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">dual_iterator_type</a>;
610 <a name="l00586"></a>00586             <span class="keyword">typedef</span> const_reverse_iterator1 dual_reverse_iterator_type;
611 <a name="l00587"></a>00587 
612 <a name="l00588"></a>00588             <span class="comment">// Construction and destruction</span>
613 <a name="l00589"></a>00589 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
614 <a name="l00590"></a>00590 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
615 <a name="l00591"></a>00591             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a> ():
616 <a name="l00592"></a>00592                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ (), t1_ () {}
617 <a name="l00593"></a>00593             BOOST_UBLAS_INLINE
618 <a name="l00594"></a>00594             const_iterator2 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a> &amp;vmb, <span class="keyword">const</span> const_subiterator1_type &amp;it1, <span class="keyword">const</span> const_subiterator2_type &amp;it2, value_type t1):
619 <a name="l00595"></a>00595                 container_const_reference&lt;self_type&gt; (vmb), it1_ (it1), it2_ (it2), t1_ (t1) {}
620 <a name="l00596"></a>00596 <span class="preprocessor">#else</span>
621 <a name="l00597"></a>00597 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
622 <a name="l00598"></a>00598             const_iterator2 ():
623 <a name="l00599"></a>00599                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ () {}
624 <a name="l00600"></a>00600             BOOST_UBLAS_INLINE
625 <a name="l00601"></a>00601             const_iterator2 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a> &amp;vmb, <span class="keyword">const</span> const_subiterator1_type &amp;it1, <span class="keyword">const</span> const_subiterator2_type &amp;it2):
626 <a name="l00602"></a>00602                 container_const_reference&lt;self_type&gt; (vmb), it1_ (it1), it2_ (it2) {}
627 <a name="l00603"></a>00603 <span class="preprocessor">#endif</span>
628 <a name="l00604"></a>00604 <span class="preprocessor"></span>
629 <a name="l00605"></a>00605             <span class="comment">// Arithmetic</span>
630 <a name="l00606"></a>00606             BOOST_UBLAS_INLINE
631 <a name="l00607"></a>00607             const_iterator2 &amp;operator ++ () {
632 <a name="l00608"></a>00608                 ++ it2_;
633 <a name="l00609"></a>00609                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
634 <a name="l00610"></a>00610             }
635 <a name="l00611"></a>00611             BOOST_UBLAS_INLINE
636 <a name="l00612"></a>00612             const_iterator2 &amp;operator -- () {
637 <a name="l00613"></a>00613                 -- it2_;
638 <a name="l00614"></a>00614                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
639 <a name="l00615"></a>00615             }
640 <a name="l00616"></a>00616             BOOST_UBLAS_INLINE
641 <a name="l00617"></a>00617             const_iterator2 &amp;operator += (difference_type n) {
642 <a name="l00618"></a>00618                 it2_ += n;
643 <a name="l00619"></a>00619                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
644 <a name="l00620"></a>00620             }
645 <a name="l00621"></a>00621             BOOST_UBLAS_INLINE
646 <a name="l00622"></a>00622             const_iterator2 &amp;operator -= (difference_type n) {
647 <a name="l00623"></a>00623                 it2_ -= n;
648 <a name="l00624"></a>00624                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
649 <a name="l00625"></a>00625             }
650 <a name="l00626"></a>00626             BOOST_UBLAS_INLINE
651 <a name="l00627"></a>00627             difference_type operator - (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
652 <a name="l00628"></a>00628                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure(it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
653 <a name="l00629"></a>00629                 BOOST_UBLAS_CHECK (it1_ == it.it1_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
654 <a name="l00630"></a>00630                 <span class="keywordflow">return</span> it2_ - it.it2_;
655 <a name="l00631"></a>00631             }
656 <a name="l00632"></a>00632 
657 <a name="l00633"></a>00633             <span class="comment">// Dereference</span>
658 <a name="l00634"></a>00634             BOOST_UBLAS_INLINE
659 <a name="l00635"></a>00635             const_reference operator * ()<span class="keyword"> const </span>{
660 <a name="l00636"></a>00636 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
661 <a name="l00637"></a>00637 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (t1_, *it2_);
662 <a name="l00638"></a>00638 <span class="preprocessor">#else</span>
663 <a name="l00639"></a>00639 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (*it1_, *it2_);
664 <a name="l00640"></a>00640 <span class="preprocessor">#endif</span>
665 <a name="l00641"></a>00641 <span class="preprocessor"></span>            }
666 <a name="l00642"></a>00642             BOOST_UBLAS_INLINE
667 <a name="l00643"></a>00643             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
668 <a name="l00644"></a>00644                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
669 <a name="l00645"></a>00645             }
670 <a name="l00646"></a>00646 
671 <a name="l00647"></a>00647 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
672 <a name="l00648"></a>00648 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
673 <a name="l00649"></a>00649 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
674 <a name="l00650"></a>00650 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a>::
675 <a name="l00651"></a>00651 <span class="preprocessor">#endif</span>
676 <a name="l00652"></a>00652 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a> begin ()<span class="keyword"> const </span>{
677 <a name="l00653"></a>00653                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, 0, index2 ());
678 <a name="l00654"></a>00654             }
679 <a name="l00655"></a>00655             BOOST_UBLAS_INLINE
680 <a name="l00656"></a>00656 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
681 <a name="l00657"></a>00657 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a>::
682 <a name="l00658"></a>00658 <span class="preprocessor">#endif</span>
683 <a name="l00659"></a>00659 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator1.html">const_iterator1</a> end ()<span class="keyword"> const </span>{
684 <a name="l00660"></a>00660                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, (*<span class="keyword">this</span>) ().size1 (), index2 ());
685 <a name="l00661"></a>00661             }
686 <a name="l00662"></a>00662             BOOST_UBLAS_INLINE
687 <a name="l00663"></a>00663 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
688 <a name="l00664"></a>00664 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a>::
689 <a name="l00665"></a>00665 <span class="preprocessor">#endif</span>
690 <a name="l00666"></a>00666 <span class="preprocessor"></span>            const_reverse_iterator1 rbegin ()<span class="keyword"> const </span>{
691 <a name="l00667"></a>00667                 <span class="keywordflow">return</span> const_reverse_iterator1 (end ());
692 <a name="l00668"></a>00668             }
693 <a name="l00669"></a>00669             BOOST_UBLAS_INLINE
694 <a name="l00670"></a>00670 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
695 <a name="l00671"></a>00671 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">self_type</a>::
696 <a name="l00672"></a>00672 <span class="preprocessor">#endif</span>
697 <a name="l00673"></a>00673 <span class="preprocessor"></span>            const_reverse_iterator1 rend ()<span class="keyword"> const </span>{
698 <a name="l00674"></a>00674                 <span class="keywordflow">return</span> const_reverse_iterator1 (begin ());
699 <a name="l00675"></a>00675             }
700 <a name="l00676"></a>00676 <span class="preprocessor">#endif</span>
701 <a name="l00677"></a>00677 <span class="preprocessor"></span>
702 <a name="l00678"></a>00678             <span class="comment">// Indices</span>
703 <a name="l00679"></a>00679             BOOST_UBLAS_INLINE
704 <a name="l00680"></a>00680             size_type index1 ()<span class="keyword"> const </span>{
705 <a name="l00681"></a>00681                 <span class="keywordflow">return</span> it1_.index ();
706 <a name="l00682"></a>00682             }
707 <a name="l00683"></a>00683             BOOST_UBLAS_INLINE
708 <a name="l00684"></a>00684             size_type  index2 ()<span class="keyword"> const </span>{
709 <a name="l00685"></a>00685                 <span class="keywordflow">return</span> it2_.index ();
710 <a name="l00686"></a>00686             }
711 <a name="l00687"></a>00687 
712 <a name="l00688"></a>00688             <span class="comment">// Assignment</span>
713 <a name="l00689"></a>00689             BOOST_UBLAS_INLINE
714 <a name="l00690"></a>00690             const_iterator2 &amp;operator = (<span class="keyword">const</span> const_iterator2 &amp;it) {
715 <a name="l00691"></a>00691                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
716 <a name="l00692"></a>00692                 it1_ = it.it1_;
717 <a name="l00693"></a>00693                 it2_ = it.it2_;
718 <a name="l00694"></a>00694 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
719 <a name="l00695"></a>00695 <span class="preprocessor"></span>                t1_ = it.t1_;
720 <a name="l00696"></a>00696 <span class="preprocessor">#endif</span>
721 <a name="l00697"></a>00697 <span class="preprocessor"></span>                <span class="keywordflow">return</span> *<span class="keyword">this</span>;
722 <a name="l00698"></a>00698             }
723 <a name="l00699"></a>00699 
724 <a name="l00700"></a>00700             <span class="comment">// Comparison</span>
725 <a name="l00701"></a>00701             BOOST_UBLAS_INLINE
726 <a name="l00702"></a>00702             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
727 <a name="l00703"></a>00703                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure( it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
728 <a name="l00704"></a>00704                 BOOST_UBLAS_CHECK (it1_ == it.it1_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
729 <a name="l00705"></a>00705                 <span class="keywordflow">return</span> it2_ == it.it2_;
730 <a name="l00706"></a>00706             }
731 <a name="l00707"></a>00707             BOOST_UBLAS_INLINE
732 <a name="l00708"></a>00708             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
733 <a name="l00709"></a>00709                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
734 <a name="l00710"></a>00710                 BOOST_UBLAS_CHECK (it1_ == it.it1_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
735 <a name="l00711"></a>00711                 <span class="keywordflow">return</span> it2_ &lt; it.it2_;
736 <a name="l00712"></a>00712             }
737 <a name="l00713"></a>00713 
738 <a name="l00714"></a>00714         <span class="keyword">private</span>:
739 <a name="l00715"></a>00715 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
740 <a name="l00716"></a>00716 <span class="preprocessor"></span>            <span class="comment">// Mutable due to assignment</span>
741 <a name="l00717"></a>00717             <span class="comment">/* const */</span> const_subiterator1_type it1_;
742 <a name="l00718"></a>00718             const_subiterator2_type it2_;
743 <a name="l00719"></a>00719             value_type t1_;
744 <a name="l00720"></a>00720 <span class="preprocessor">#else</span>
745 <a name="l00721"></a>00721 <span class="preprocessor"></span>            const_subiterator1_type it1_;
746 <a name="l00722"></a>00722             const_subiterator2_type it2_;
747 <a name="l00723"></a>00723 <span class="preprocessor">#endif</span>
748 <a name="l00724"></a>00724 <span class="preprocessor"></span>        };
749 <a name="l00725"></a>00725 <span class="preprocessor">#endif</span>
750 <a name="l00726"></a>00726 <span class="preprocessor"></span>
751 <a name="l00727"></a>00727         BOOST_UBLAS_INLINE
752 <a name="l00728"></a>00728         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary_1_1const__iterator2.html">const_iterator2</a> begin2 ()<span class="keyword"> const </span>{
753 <a name="l00729"></a>00729             <span class="keywordflow">return</span> find2 (0, 0, 0);
754 <a name="l00730"></a>00730         }
755 <a name="l00731"></a>00731         BOOST_UBLAS_INLINE
756 <a name="l00732"></a>00732         const_iterator2 end2 ()<span class="keyword"> const </span>{
757 <a name="l00733"></a>00733             <span class="keywordflow">return</span> find2 (0, 0, size2 ());
758 <a name="l00734"></a>00734         }
759 <a name="l00735"></a>00735 
760 <a name="l00736"></a>00736         <span class="comment">// Reverse iterators</span>
761 <a name="l00737"></a>00737 
762 <a name="l00738"></a>00738         BOOST_UBLAS_INLINE
763 <a name="l00739"></a>00739         const_reverse_iterator1 rbegin1 ()<span class="keyword"> const </span>{
764 <a name="l00740"></a>00740             <span class="keywordflow">return</span> const_reverse_iterator1 (end1 ());
765 <a name="l00741"></a>00741         }
766 <a name="l00742"></a>00742         BOOST_UBLAS_INLINE
767 <a name="l00743"></a>00743         const_reverse_iterator1 rend1 ()<span class="keyword"> const </span>{
768 <a name="l00744"></a>00744             <span class="keywordflow">return</span> const_reverse_iterator1 (begin1 ());
769 <a name="l00745"></a>00745         }
770 <a name="l00746"></a>00746 
771 <a name="l00747"></a>00747         BOOST_UBLAS_INLINE
772 <a name="l00748"></a>00748         const_reverse_iterator2 rbegin2 ()<span class="keyword"> const </span>{
773 <a name="l00749"></a>00749             <span class="keywordflow">return</span> const_reverse_iterator2 (end2 ());
774 <a name="l00750"></a>00750         }
775 <a name="l00751"></a>00751         BOOST_UBLAS_INLINE
776 <a name="l00752"></a>00752         const_reverse_iterator2 rend2 ()<span class="keyword"> const </span>{
777 <a name="l00753"></a>00753             <span class="keywordflow">return</span> const_reverse_iterator2 (begin2 ());
778 <a name="l00754"></a>00754         }
779 <a name="l00755"></a>00755 
780 <a name="l00756"></a>00756     <span class="keyword">private</span>:
781 <a name="l00757"></a>00757         expression1_closure_type e1_;
782 <a name="l00758"></a>00758         expression2_closure_type e2_;
783 <a name="l00759"></a>00759     };
784 <a name="l00760"></a>00760 
785 <a name="l00761"></a>00761     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2, <span class="keyword">class</span> F&gt;
786 <a name="l00762"></a><a class="code" href="structboost_1_1numeric_1_1ublas_1_1vector__matrix__binary__traits.html">00762</a>     <span class="keyword">struct </span><a class="code" href="structboost_1_1numeric_1_1ublas_1_1vector__matrix__binary__traits.html">vector_matrix_binary_traits</a> {
787 <a name="l00763"></a>00763         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">vector_matrix_binary&lt;E1, E2, F&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">expression_type</a>;
788 <a name="l00764"></a>00764 <span class="preprocessor">#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG</span>
789 <a name="l00765"></a>00765 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">expression_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">result_type</a>; 
790 <a name="l00766"></a>00766 <span class="preprocessor">#else</span>
791 <a name="l00767"></a>00767 <span class="preprocessor"></span>        <span class="comment">// ISSUE matrix is arbitary temporary type</span>
792 <a name="l00768"></a>00768         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix.html" title="A dense matrix of values of type T.">matrix&lt;typename F::value_type&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__matrix__binary.html">result_type</a>;
793 <a name="l00769"></a>00769 <span class="preprocessor">#endif</span>
794 <a name="l00770"></a>00770 <span class="preprocessor"></span>    };
795 <a name="l00771"></a>00771 
796 <a name="l00772"></a>00772     <span class="comment">// (outer_prod (v1, v2)) [i] [j] = v1 [i] * v2 [j]</span>
797 <a name="l00773"></a>00773     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
798 <a name="l00774"></a>00774     BOOST_UBLAS_INLINE
799 <a name="l00775"></a>00775     <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1vector__matrix__binary__traits.html">vector_matrix_binary_traits&lt;E1, E2, scalar_multiplies&lt;typename E1::value_type, typename E2::value_type&gt;</a> &gt;::result_type
800 <a name="l00776"></a>00776     outer_prod (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__expression.html" title="Base class for Vector Expression models.">vector_expression&lt;E1&gt;</a> &amp;e1,
801 <a name="l00777"></a>00777                 <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__expression.html" title="Base class for Vector Expression models.">vector_expression&lt;E2&gt;</a> &amp;e2) {
802 <a name="l00778"></a>00778         BOOST_STATIC_ASSERT (E1::complexity == 0 &amp;&amp; E2::complexity == 0);
803 <a name="l00779"></a>00779         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1vector__matrix__binary__traits.html">vector_matrix_binary_traits&lt;E1, E2, scalar_multiplies&lt;typename E1::value_type, typename E2::value_type&gt;</a> &gt;::expression_type expression_type;
804 <a name="l00780"></a>00780         <span class="keywordflow">return</span> expression_type (e1 (), e2 ());
805 <a name="l00781"></a>00781     }
806 <a name="l00782"></a>00782 
807 <a name="l00783"></a>00783     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E, <span class="keyword">class</span> F&gt;
808 <a name="l00784"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">00784</a>     <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">matrix_unary1</a>:
809 <a name="l00785"></a>00785         <span class="keyword">public</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression</a>&lt;matrix_unary1&lt;E, F&gt; &gt; {
810 <a name="l00786"></a>00786 
811 <a name="l00787"></a>00787         <span class="keyword">typedef</span> E expression_type;
812 <a name="l00788"></a>00788         <span class="keyword">typedef</span> F functor_type;
813 <a name="l00789"></a>00789     <span class="keyword">public</span>:
814 <a name="l00790"></a>00790         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_closure_type expression_closure_type;
815 <a name="l00791"></a>00791     <span class="keyword">private</span>:
816 <a name="l00792"></a>00792         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">matrix_unary1&lt;E, F&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a>;
817 <a name="l00793"></a>00793     <span class="keyword">public</span>:
818 <a name="l00794"></a>00794 <span class="preprocessor">#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS</span>
819 <a name="l00795"></a>00795 <span class="preprocessor"></span>        <span class="keyword">using</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;self_type&gt;::operator </a>();
820 <a name="l00796"></a>00796 <span class="preprocessor">#endif</span>
821 <a name="l00797"></a>00797 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E::size_type size_type;
822 <a name="l00798"></a>00798         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::difference_type difference_type;
823 <a name="l00799"></a>00799         <span class="keyword">typedef</span> <span class="keyword">typename</span> F::result_type value_type;
824 <a name="l00800"></a>00800         <span class="keyword">typedef</span> value_type const_reference;
825 <a name="l00801"></a>00801         <span class="keyword">typedef</span> const_reference reference;
826 <a name="l00802"></a>00802         <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">const_closure_type</a>;
827 <a name="l00803"></a>00803         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">const_closure_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">closure_type</a>;
828 <a name="l00804"></a>00804         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::orientation_category orientation_category;
829 <a name="l00805"></a>00805         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">storage_category</a>;
830 <a name="l00806"></a>00806 
831 <a name="l00807"></a>00807         <span class="comment">// Construction and destruction</span>
832 <a name="l00808"></a>00808         BOOST_UBLAS_INLINE
833 <a name="l00809"></a>00809         <span class="keyword">explicit</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">matrix_unary1</a> (<span class="keyword">const</span> expression_type &amp;e):
834 <a name="l00810"></a>00810             e_ (e) {}
835 <a name="l00811"></a>00811 
836 <a name="l00812"></a>00812         <span class="comment">// Accessors</span>
837 <a name="l00813"></a>00813         BOOST_UBLAS_INLINE
838 <a name="l00814"></a>00814         size_type size1 ()<span class="keyword"> const </span>{
839 <a name="l00815"></a>00815             <span class="keywordflow">return</span> e_.size1 ();
840 <a name="l00816"></a>00816         }
841 <a name="l00817"></a>00817         BOOST_UBLAS_INLINE
842 <a name="l00818"></a>00818         size_type size2 ()<span class="keyword"> const </span>{
843 <a name="l00819"></a>00819             <span class="keywordflow">return</span> e_.size2 ();
844 <a name="l00820"></a>00820         }
845 <a name="l00821"></a>00821 
846 <a name="l00822"></a>00822     <span class="keyword">public</span>:
847 <a name="l00823"></a>00823         <span class="comment">// Expression accessors</span>
848 <a name="l00824"></a>00824         BOOST_UBLAS_INLINE
849 <a name="l00825"></a>00825         <span class="keyword">const</span> expression_closure_type &amp;expression ()<span class="keyword"> const </span>{
850 <a name="l00826"></a>00826             <span class="keywordflow">return</span> e_;
851 <a name="l00827"></a>00827         }
852 <a name="l00828"></a>00828 
853 <a name="l00829"></a>00829     <span class="keyword">public</span>:
854 <a name="l00830"></a>00830         <span class="comment">// Element access</span>
855 <a name="l00831"></a>00831         BOOST_UBLAS_INLINE
856 <a name="l00832"></a>00832         const_reference operator () (size_type i, size_type j)<span class="keyword"> const </span>{
857 <a name="l00833"></a>00833             <span class="keywordflow">return</span> functor_type::apply (e_ (i, j));
858 <a name="l00834"></a>00834         }
859 <a name="l00835"></a>00835 
860 <a name="l00836"></a>00836         <span class="comment">// Closure comparison</span>
861 <a name="l00837"></a>00837         BOOST_UBLAS_INLINE
862 <a name="l00838"></a>00838         <span class="keywordtype">bool</span> same_closure (<span class="keyword">const</span> matrix_unary1 &amp;mu1)<span class="keyword"> const </span>{
863 <a name="l00839"></a>00839             <span class="keywordflow">return</span> (*this).expression ().same_closure (mu1.expression ());
864 <a name="l00840"></a>00840         }
865 <a name="l00841"></a>00841 
866 <a name="l00842"></a>00842         <span class="comment">// Iterator types</span>
867 <a name="l00843"></a>00843     <span class="keyword">private</span>:
868 <a name="l00844"></a>00844         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_iterator1 const_subiterator1_type;
869 <a name="l00845"></a>00845         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_iterator2 const_subiterator2_type;
870 <a name="l00846"></a>00846         <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
871 <a name="l00847"></a>00847 
872 <a name="l00848"></a>00848     <span class="keyword">public</span>:
873 <a name="l00849"></a>00849 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
874 <a name="l00850"></a>00850 <span class="preprocessor"></span>        <span class="keyword">typedef</span> indexed_const_iterator1&lt;const_closure_type, typename const_subiterator1_type::iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a>;
875 <a name="l00851"></a>00851         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">iterator1</a>;
876 <a name="l00852"></a>00852         <span class="keyword">typedef</span> indexed_const_iterator2&lt;const_closure_type, typename const_subiterator2_type::iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a>;
877 <a name="l00853"></a>00853         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">iterator2</a>;
878 <a name="l00854"></a>00854 <span class="preprocessor">#else</span>
879 <a name="l00855"></a>00855 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a>;
880 <a name="l00856"></a>00856         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">iterator1</a>;
881 <a name="l00857"></a>00857         <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a>;
882 <a name="l00858"></a>00858         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">iterator2</a>;
883 <a name="l00859"></a>00859 <span class="preprocessor">#endif</span>
884 <a name="l00860"></a>00860 <span class="preprocessor"></span>        <span class="keyword">typedef</span> reverse_iterator_base1&lt;const_iterator1&gt; const_reverse_iterator1;
885 <a name="l00861"></a>00861         <span class="keyword">typedef</span> reverse_iterator_base2&lt;const_iterator2&gt; const_reverse_iterator2;
886 <a name="l00862"></a>00862 
887 <a name="l00863"></a>00863         <span class="comment">// Element lookup</span>
888 <a name="l00864"></a>00864         BOOST_UBLAS_INLINE
889 <a name="l00865"></a>00865         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a> find1 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
890 <a name="l00866"></a>00866             const_subiterator1_type it1 (e_.find1 (rank, i, j));
891 <a name="l00867"></a>00867 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
892 <a name="l00868"></a>00868 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, it1.index1 (), it1.index2 ());
893 <a name="l00869"></a>00869 <span class="preprocessor">#else</span>
894 <a name="l00870"></a>00870 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, it1);
895 <a name="l00871"></a>00871 <span class="preprocessor">#endif</span>
896 <a name="l00872"></a>00872 <span class="preprocessor"></span>        }
897 <a name="l00873"></a>00873         BOOST_UBLAS_INLINE
898 <a name="l00874"></a>00874         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a> find2 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
899 <a name="l00875"></a>00875             const_subiterator2_type it2 (e_.find2 (rank, i, j));
900 <a name="l00876"></a>00876 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
901 <a name="l00877"></a>00877 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, it2.index1 (), it2.index2 ());
902 <a name="l00878"></a>00878 <span class="preprocessor">#else</span>
903 <a name="l00879"></a>00879 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, it2);
904 <a name="l00880"></a>00880 <span class="preprocessor">#endif</span>
905 <a name="l00881"></a>00881 <span class="preprocessor"></span>        }
906 <a name="l00882"></a>00882 
907 <a name="l00883"></a>00883         <span class="comment">// Iterators enhance the iterators of the referenced expression</span>
908 <a name="l00884"></a>00884         <span class="comment">// with the unary functor.</span>
909 <a name="l00885"></a>00885 
910 <a name="l00886"></a>00886 <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
911 <a name="l00887"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">00887</a> <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a>:
912 <a name="l00888"></a>00888             <span class="keyword">public</span> container_const_reference&lt;matrix_unary1&gt;,
913 <a name="l00889"></a>00889             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename E::const_iterator1::iterator_category&gt;::template
914 <a name="l00890"></a>00890                 iterator_base&lt;const_iterator1, value_type&gt;::type {
915 <a name="l00891"></a>00891         <span class="keyword">public</span>:
916 <a name="l00892"></a>00892             <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_iterator1::iterator_category iterator_category;
917 <a name="l00893"></a>00893             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary1::difference_type difference_type;
918 <a name="l00894"></a>00894             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary1::value_type value_type;
919 <a name="l00895"></a>00895             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary1::const_reference reference;
920 <a name="l00896"></a>00896             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary1::const_pointer pointer;
921 <a name="l00897"></a>00897 
922 <a name="l00898"></a>00898             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">dual_iterator_type</a>;
923 <a name="l00899"></a>00899             <span class="keyword">typedef</span> const_reverse_iterator2 dual_reverse_iterator_type;
924 <a name="l00900"></a>00900 
925 <a name="l00901"></a>00901             <span class="comment">// Construction and destruction</span>
926 <a name="l00902"></a>00902             BOOST_UBLAS_INLINE
927 <a name="l00903"></a>00903             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a> ():
928 <a name="l00904"></a>00904                 container_const_reference&lt;self_type&gt; (), it_ () {}
929 <a name="l00905"></a>00905             BOOST_UBLAS_INLINE
930 <a name="l00906"></a>00906             const_iterator1 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a> &amp;mu, <span class="keyword">const</span> const_subiterator1_type &amp;it):
931 <a name="l00907"></a>00907                 container_const_reference&lt;self_type&gt; (mu), it_ (it) {}
932 <a name="l00908"></a>00908 
933 <a name="l00909"></a>00909             <span class="comment">// Arithmetic</span>
934 <a name="l00910"></a>00910             BOOST_UBLAS_INLINE
935 <a name="l00911"></a>00911             const_iterator1 &amp;operator ++ () {
936 <a name="l00912"></a>00912                 ++ it_;
937 <a name="l00913"></a>00913                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
938 <a name="l00914"></a>00914             }
939 <a name="l00915"></a>00915             BOOST_UBLAS_INLINE
940 <a name="l00916"></a>00916             const_iterator1 &amp;operator -- () {
941 <a name="l00917"></a>00917                 -- it_;
942 <a name="l00918"></a>00918                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
943 <a name="l00919"></a>00919             }
944 <a name="l00920"></a>00920             BOOST_UBLAS_INLINE
945 <a name="l00921"></a>00921             const_iterator1 &amp;operator += (difference_type n) {
946 <a name="l00922"></a>00922                 it_ += n;
947 <a name="l00923"></a>00923                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
948 <a name="l00924"></a>00924             }
949 <a name="l00925"></a>00925             BOOST_UBLAS_INLINE
950 <a name="l00926"></a>00926             const_iterator1 &amp;operator -= (difference_type n) {
951 <a name="l00927"></a>00927                 it_ -= n;
952 <a name="l00928"></a>00928                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
953 <a name="l00929"></a>00929             }
954 <a name="l00930"></a>00930             BOOST_UBLAS_INLINE
955 <a name="l00931"></a>00931             difference_type operator - (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
956 <a name="l00932"></a>00932                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
957 <a name="l00933"></a>00933                 <span class="keywordflow">return</span> it_ - it.it_;
958 <a name="l00934"></a>00934             }
959 <a name="l00935"></a>00935 
960 <a name="l00936"></a>00936             <span class="comment">// Dereference</span>
961 <a name="l00937"></a>00937             BOOST_UBLAS_INLINE
962 <a name="l00938"></a>00938             const_reference operator * ()<span class="keyword"> const </span>{
963 <a name="l00939"></a>00939                 <span class="keywordflow">return</span> functor_type::apply (*it_);
964 <a name="l00940"></a>00940             }
965 <a name="l00941"></a>00941             BOOST_UBLAS_INLINE
966 <a name="l00942"></a>00942             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
967 <a name="l00943"></a>00943                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
968 <a name="l00944"></a>00944             }
969 <a name="l00945"></a>00945 
970 <a name="l00946"></a>00946 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
971 <a name="l00947"></a>00947 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
972 <a name="l00948"></a>00948 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
973 <a name="l00949"></a>00949 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a>::
974 <a name="l00950"></a>00950 <span class="preprocessor">#endif</span>
975 <a name="l00951"></a>00951 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a> begin ()<span class="keyword"> const </span>{
976 <a name="l00952"></a>00952                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), 0);
977 <a name="l00953"></a>00953             }
978 <a name="l00954"></a>00954             BOOST_UBLAS_INLINE
979 <a name="l00955"></a>00955 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
980 <a name="l00956"></a>00956 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a>::
981 <a name="l00957"></a>00957 <span class="preprocessor">#endif</span>
982 <a name="l00958"></a>00958 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a> end ()<span class="keyword"> const </span>{
983 <a name="l00959"></a>00959                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), (*this) ().size2 ());
984 <a name="l00960"></a>00960             }
985 <a name="l00961"></a>00961             BOOST_UBLAS_INLINE
986 <a name="l00962"></a>00962 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
987 <a name="l00963"></a>00963 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a>::
988 <a name="l00964"></a>00964 <span class="preprocessor">#endif</span>
989 <a name="l00965"></a>00965 <span class="preprocessor"></span>            const_reverse_iterator2 rbegin ()<span class="keyword"> const </span>{
990 <a name="l00966"></a>00966                 <span class="keywordflow">return</span> const_reverse_iterator2 (end ());
991 <a name="l00967"></a>00967             }
992 <a name="l00968"></a>00968             BOOST_UBLAS_INLINE
993 <a name="l00969"></a>00969 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
994 <a name="l00970"></a>00970 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a>::
995 <a name="l00971"></a>00971 <span class="preprocessor">#endif</span>
996 <a name="l00972"></a>00972 <span class="preprocessor"></span>            const_reverse_iterator2 rend ()<span class="keyword"> const </span>{
997 <a name="l00973"></a>00973                 <span class="keywordflow">return</span> const_reverse_iterator2 (begin ());
998 <a name="l00974"></a>00974             }
999 <a name="l00975"></a>00975 <span class="preprocessor">#endif</span>
1000 <a name="l00976"></a>00976 <span class="preprocessor"></span>
1001 <a name="l00977"></a>00977             <span class="comment">// Indices</span>
1002 <a name="l00978"></a>00978             BOOST_UBLAS_INLINE
1003 <a name="l00979"></a>00979             size_type index1 ()<span class="keyword"> const </span>{
1004 <a name="l00980"></a>00980                 <span class="keywordflow">return</span> it_.index1 ();
1005 <a name="l00981"></a>00981             }
1006 <a name="l00982"></a>00982             BOOST_UBLAS_INLINE
1007 <a name="l00983"></a>00983             size_type index2 ()<span class="keyword"> const </span>{
1008 <a name="l00984"></a>00984                 <span class="keywordflow">return</span> it_.index2 ();
1009 <a name="l00985"></a>00985             }
1010 <a name="l00986"></a>00986 
1011 <a name="l00987"></a>00987             <span class="comment">// Assignment </span>
1012 <a name="l00988"></a>00988             BOOST_UBLAS_INLINE
1013 <a name="l00989"></a>00989             const_iterator1 &amp;operator = (<span class="keyword">const</span> const_iterator1 &amp;it) {
1014 <a name="l00990"></a>00990                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
1015 <a name="l00991"></a>00991                 it_ = it.it_;
1016 <a name="l00992"></a>00992                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1017 <a name="l00993"></a>00993             }
1018 <a name="l00994"></a>00994 
1019 <a name="l00995"></a>00995             <span class="comment">// Comparison</span>
1020 <a name="l00996"></a>00996             BOOST_UBLAS_INLINE
1021 <a name="l00997"></a>00997             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
1022 <a name="l00998"></a>00998                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
1023 <a name="l00999"></a>00999                 <span class="keywordflow">return</span> it_ == it.it_;
1024 <a name="l01000"></a>01000             }
1025 <a name="l01001"></a>01001             BOOST_UBLAS_INLINE
1026 <a name="l01002"></a>01002             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
1027 <a name="l01003"></a>01003                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
1028 <a name="l01004"></a>01004                 <span class="keywordflow">return</span> it_ &lt; it.it_;
1029 <a name="l01005"></a>01005             }
1030 <a name="l01006"></a>01006 
1031 <a name="l01007"></a>01007         <span class="keyword">private</span>:
1032 <a name="l01008"></a>01008             const_subiterator1_type it_;
1033 <a name="l01009"></a>01009         };
1034 <a name="l01010"></a>01010 <span class="preprocessor">#endif</span>
1035 <a name="l01011"></a>01011 <span class="preprocessor"></span>
1036 <a name="l01012"></a>01012         BOOST_UBLAS_INLINE
1037 <a name="l01013"></a>01013         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a> begin1 ()<span class="keyword"> const </span>{
1038 <a name="l01014"></a>01014             <span class="keywordflow">return</span> find1 (0, 0, 0);
1039 <a name="l01015"></a>01015         }
1040 <a name="l01016"></a>01016         BOOST_UBLAS_INLINE
1041 <a name="l01017"></a>01017         const_iterator1 end1 ()<span class="keyword"> const </span>{
1042 <a name="l01018"></a>01018             <span class="keywordflow">return</span> find1 (0, size1 (), 0);
1043 <a name="l01019"></a>01019         }
1044 <a name="l01020"></a>01020 
1045 <a name="l01021"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">01021</a> <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
1046 <a name="l01022"></a>01022 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a>:
1047 <a name="l01023"></a>01023             <span class="keyword">public</span> container_const_reference&lt;matrix_unary1&gt;,
1048 <a name="l01024"></a>01024             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename E::const_iterator2::iterator_category&gt;::template
1049 <a name="l01025"></a>01025                 iterator_base&lt;const_iterator2, value_type&gt;::type {
1050 <a name="l01026"></a>01026         <span class="keyword">public</span>:
1051 <a name="l01027"></a>01027             <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_iterator2::iterator_category iterator_category;
1052 <a name="l01028"></a>01028             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary1::difference_type difference_type;
1053 <a name="l01029"></a>01029             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary1::value_type value_type;
1054 <a name="l01030"></a>01030             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary1::const_reference reference;
1055 <a name="l01031"></a>01031             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary1::const_pointer pointer;
1056 <a name="l01032"></a>01032 
1057 <a name="l01033"></a>01033             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">dual_iterator_type</a>;
1058 <a name="l01034"></a>01034             <span class="keyword">typedef</span> const_reverse_iterator1 dual_reverse_iterator_type;
1059 <a name="l01035"></a>01035 
1060 <a name="l01036"></a>01036             <span class="comment">// Construction and destruction</span>
1061 <a name="l01037"></a>01037             BOOST_UBLAS_INLINE
1062 <a name="l01038"></a>01038             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a> ():
1063 <a name="l01039"></a>01039                 container_const_reference&lt;self_type&gt; (), it_ () {}
1064 <a name="l01040"></a>01040             BOOST_UBLAS_INLINE
1065 <a name="l01041"></a>01041             const_iterator2 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a> &amp;mu, <span class="keyword">const</span> const_subiterator2_type &amp;it):
1066 <a name="l01042"></a>01042                 container_const_reference&lt;self_type&gt; (mu), it_ (it) {}
1067 <a name="l01043"></a>01043 
1068 <a name="l01044"></a>01044             <span class="comment">// Arithmetic</span>
1069 <a name="l01045"></a>01045             BOOST_UBLAS_INLINE
1070 <a name="l01046"></a>01046             const_iterator2 &amp;operator ++ () {
1071 <a name="l01047"></a>01047                 ++ it_;
1072 <a name="l01048"></a>01048                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1073 <a name="l01049"></a>01049             }
1074 <a name="l01050"></a>01050             BOOST_UBLAS_INLINE
1075 <a name="l01051"></a>01051             const_iterator2 &amp;operator -- () {
1076 <a name="l01052"></a>01052                 -- it_;
1077 <a name="l01053"></a>01053                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1078 <a name="l01054"></a>01054             }
1079 <a name="l01055"></a>01055             BOOST_UBLAS_INLINE
1080 <a name="l01056"></a>01056             const_iterator2 &amp;operator += (difference_type n) {
1081 <a name="l01057"></a>01057                 it_ += n;
1082 <a name="l01058"></a>01058                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1083 <a name="l01059"></a>01059             }
1084 <a name="l01060"></a>01060             BOOST_UBLAS_INLINE
1085 <a name="l01061"></a>01061             const_iterator2 &amp;operator -= (difference_type n) {
1086 <a name="l01062"></a>01062                 it_ -= n;
1087 <a name="l01063"></a>01063                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1088 <a name="l01064"></a>01064             }
1089 <a name="l01065"></a>01065             BOOST_UBLAS_INLINE
1090 <a name="l01066"></a>01066             difference_type operator - (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
1091 <a name="l01067"></a>01067                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
1092 <a name="l01068"></a>01068                 <span class="keywordflow">return</span> it_ - it.it_;
1093 <a name="l01069"></a>01069             }
1094 <a name="l01070"></a>01070 
1095 <a name="l01071"></a>01071             <span class="comment">// Dereference</span>
1096 <a name="l01072"></a>01072             BOOST_UBLAS_INLINE
1097 <a name="l01073"></a>01073             const_reference operator * ()<span class="keyword"> const </span>{
1098 <a name="l01074"></a>01074                 <span class="keywordflow">return</span> functor_type::apply (*it_);
1099 <a name="l01075"></a>01075             }
1100 <a name="l01076"></a>01076             BOOST_UBLAS_INLINE
1101 <a name="l01077"></a>01077             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
1102 <a name="l01078"></a>01078                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
1103 <a name="l01079"></a>01079             }
1104 <a name="l01080"></a>01080 
1105 <a name="l01081"></a>01081 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
1106 <a name="l01082"></a>01082 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
1107 <a name="l01083"></a>01083 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1108 <a name="l01084"></a>01084 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a>::
1109 <a name="l01085"></a>01085 <span class="preprocessor">#endif</span>
1110 <a name="l01086"></a>01086 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a> begin ()<span class="keyword"> const </span>{
1111 <a name="l01087"></a>01087                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, 0, index2 ());
1112 <a name="l01088"></a>01088             }
1113 <a name="l01089"></a>01089             BOOST_UBLAS_INLINE
1114 <a name="l01090"></a>01090 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1115 <a name="l01091"></a>01091 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a>::
1116 <a name="l01092"></a>01092 <span class="preprocessor">#endif</span>
1117 <a name="l01093"></a>01093 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator1.html">const_iterator1</a> end ()<span class="keyword"> const </span>{
1118 <a name="l01094"></a>01094                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, (*<span class="keyword">this</span>) ().size1 (), index2 ());
1119 <a name="l01095"></a>01095             }
1120 <a name="l01096"></a>01096             BOOST_UBLAS_INLINE
1121 <a name="l01097"></a>01097 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1122 <a name="l01098"></a>01098 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a>::
1123 <a name="l01099"></a>01099 <span class="preprocessor">#endif</span>
1124 <a name="l01100"></a>01100 <span class="preprocessor"></span>            const_reverse_iterator1 rbegin ()<span class="keyword"> const </span>{
1125 <a name="l01101"></a>01101                 <span class="keywordflow">return</span> const_reverse_iterator1 (end ());
1126 <a name="l01102"></a>01102             }
1127 <a name="l01103"></a>01103             BOOST_UBLAS_INLINE
1128 <a name="l01104"></a>01104 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1129 <a name="l01105"></a>01105 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">self_type</a>::
1130 <a name="l01106"></a>01106 <span class="preprocessor">#endif</span>
1131 <a name="l01107"></a>01107 <span class="preprocessor"></span>            const_reverse_iterator1 rend ()<span class="keyword"> const </span>{
1132 <a name="l01108"></a>01108                 <span class="keywordflow">return</span> const_reverse_iterator1 (begin ());
1133 <a name="l01109"></a>01109             }
1134 <a name="l01110"></a>01110 <span class="preprocessor">#endif</span>
1135 <a name="l01111"></a>01111 <span class="preprocessor"></span>
1136 <a name="l01112"></a>01112             <span class="comment">// Indices</span>
1137 <a name="l01113"></a>01113             BOOST_UBLAS_INLINE
1138 <a name="l01114"></a>01114             size_type index1 ()<span class="keyword"> const </span>{
1139 <a name="l01115"></a>01115                 <span class="keywordflow">return</span> it_.index1 ();
1140 <a name="l01116"></a>01116             }
1141 <a name="l01117"></a>01117             BOOST_UBLAS_INLINE
1142 <a name="l01118"></a>01118             size_type index2 ()<span class="keyword"> const </span>{
1143 <a name="l01119"></a>01119                 <span class="keywordflow">return</span> it_.index2 ();
1144 <a name="l01120"></a>01120             }
1145 <a name="l01121"></a>01121 
1146 <a name="l01122"></a>01122             <span class="comment">// Assignment </span>
1147 <a name="l01123"></a>01123             BOOST_UBLAS_INLINE
1148 <a name="l01124"></a>01124             const_iterator2 &amp;operator = (<span class="keyword">const</span> const_iterator2 &amp;it) {
1149 <a name="l01125"></a>01125                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
1150 <a name="l01126"></a>01126                 it_ = it.it_;
1151 <a name="l01127"></a>01127                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1152 <a name="l01128"></a>01128             }
1153 <a name="l01129"></a>01129 
1154 <a name="l01130"></a>01130             <span class="comment">// Comparison</span>
1155 <a name="l01131"></a>01131             BOOST_UBLAS_INLINE
1156 <a name="l01132"></a>01132             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
1157 <a name="l01133"></a>01133                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
1158 <a name="l01134"></a>01134                 <span class="keywordflow">return</span> it_ == it.it_;
1159 <a name="l01135"></a>01135             }
1160 <a name="l01136"></a>01136             BOOST_UBLAS_INLINE
1161 <a name="l01137"></a>01137             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
1162 <a name="l01138"></a>01138                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
1163 <a name="l01139"></a>01139                 <span class="keywordflow">return</span> it_ &lt; it.it_;
1164 <a name="l01140"></a>01140             }
1165 <a name="l01141"></a>01141 
1166 <a name="l01142"></a>01142         <span class="keyword">private</span>:
1167 <a name="l01143"></a>01143             const_subiterator2_type it_;
1168 <a name="l01144"></a>01144         };
1169 <a name="l01145"></a>01145 <span class="preprocessor">#endif</span>
1170 <a name="l01146"></a>01146 <span class="preprocessor"></span>
1171 <a name="l01147"></a>01147         BOOST_UBLAS_INLINE
1172 <a name="l01148"></a>01148         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1_1_1const__iterator2.html">const_iterator2</a> begin2 ()<span class="keyword"> const </span>{
1173 <a name="l01149"></a>01149             <span class="keywordflow">return</span> find2 (0, 0, 0);
1174 <a name="l01150"></a>01150         }
1175 <a name="l01151"></a>01151         BOOST_UBLAS_INLINE
1176 <a name="l01152"></a>01152         const_iterator2 end2 ()<span class="keyword"> const </span>{
1177 <a name="l01153"></a>01153             <span class="keywordflow">return</span> find2 (0, 0, size2 ());
1178 <a name="l01154"></a>01154         }
1179 <a name="l01155"></a>01155 
1180 <a name="l01156"></a>01156         <span class="comment">// Reverse iterators</span>
1181 <a name="l01157"></a>01157 
1182 <a name="l01158"></a>01158         BOOST_UBLAS_INLINE
1183 <a name="l01159"></a>01159         const_reverse_iterator1 rbegin1 ()<span class="keyword"> const </span>{
1184 <a name="l01160"></a>01160             <span class="keywordflow">return</span> const_reverse_iterator1 (end1 ());
1185 <a name="l01161"></a>01161         }
1186 <a name="l01162"></a>01162         BOOST_UBLAS_INLINE
1187 <a name="l01163"></a>01163         const_reverse_iterator1 rend1 ()<span class="keyword"> const </span>{
1188 <a name="l01164"></a>01164             <span class="keywordflow">return</span> const_reverse_iterator1 (begin1 ());
1189 <a name="l01165"></a>01165         }
1190 <a name="l01166"></a>01166 
1191 <a name="l01167"></a>01167         BOOST_UBLAS_INLINE
1192 <a name="l01168"></a>01168         const_reverse_iterator2 rbegin2 ()<span class="keyword"> const </span>{
1193 <a name="l01169"></a>01169             <span class="keywordflow">return</span> const_reverse_iterator2 (end2 ());
1194 <a name="l01170"></a>01170         }
1195 <a name="l01171"></a>01171         BOOST_UBLAS_INLINE
1196 <a name="l01172"></a>01172         const_reverse_iterator2 rend2 ()<span class="keyword"> const </span>{
1197 <a name="l01173"></a>01173             <span class="keywordflow">return</span> const_reverse_iterator2 (begin2 ());
1198 <a name="l01174"></a>01174         }
1199 <a name="l01175"></a>01175 
1200 <a name="l01176"></a>01176     <span class="keyword">private</span>:
1201 <a name="l01177"></a>01177         expression_closure_type e_;
1202 <a name="l01178"></a>01178     };
1203 <a name="l01179"></a>01179 
1204 <a name="l01180"></a>01180     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E, <span class="keyword">class</span> F&gt;
1205 <a name="l01181"></a><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__unary1__traits.html">01181</a>     <span class="keyword">struct </span><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__unary1__traits.html">matrix_unary1_traits</a> {
1206 <a name="l01182"></a>01182         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">matrix_unary1&lt;E, F&gt;</a> expression_type;
1207 <a name="l01183"></a>01183 <span class="preprocessor">#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG</span>
1208 <a name="l01184"></a>01184 <span class="preprocessor"></span>        <span class="keyword">typedef</span> expression_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">result_type</a>; 
1209 <a name="l01185"></a>01185 <span class="preprocessor">#else</span>
1210 <a name="l01186"></a>01186 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E::matrix_temporary_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary1.html">result_type</a>;
1211 <a name="l01187"></a>01187 <span class="preprocessor">#endif</span>
1212 <a name="l01188"></a>01188 <span class="preprocessor"></span>    };
1213 <a name="l01189"></a>01189 
1214 <a name="l01190"></a>01190     <span class="comment">// (- m) [i] [j] = - m [i] [j]</span>
1215 <a name="l01191"></a>01191     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt;
1216 <a name="l01192"></a>01192     BOOST_UBLAS_INLINE
1217 <a name="l01193"></a>01193     <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__unary1__traits.html">matrix_unary1_traits&lt;E, scalar_negate&lt;typename E::value_type&gt;</a> &gt;::result_type
1218 <a name="l01194"></a>01194     operator - (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;E&gt;</a> &amp;e) {
1219 <a name="l01195"></a>01195         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__unary1__traits.html">matrix_unary1_traits&lt;E, scalar_negate&lt;typename E::value_type&gt;</a> &gt;::expression_type expression_type;
1220 <a name="l01196"></a>01196         <span class="keywordflow">return</span> expression_type (e ());
1221 <a name="l01197"></a>01197     }
1222 <a name="l01198"></a>01198 
1223 <a name="l01199"></a>01199     <span class="comment">// (conj m) [i] [j] = conj (m [i] [j])</span>
1224 <a name="l01200"></a>01200     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt; 
1225 <a name="l01201"></a>01201     BOOST_UBLAS_INLINE
1226 <a name="l01202"></a>01202     <span class="keyword">typename</span> matrix_unary1_traits&lt;E, scalar_conj&lt;typename E::value_type&gt; &gt;::result_type
1227 <a name="l01203"></a>01203     conj (<span class="keyword">const</span> matrix_expression&lt;E&gt; &amp;e) {
1228 <a name="l01204"></a>01204         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary1_traits&lt;E, scalar_conj&lt;typename E::value_type&gt; &gt;::expression_type expression_type;
1229 <a name="l01205"></a>01205         <span class="keywordflow">return</span> expression_type (e ());
1230 <a name="l01206"></a>01206     }
1231 <a name="l01207"></a>01207 
1232 <a name="l01208"></a>01208     <span class="comment">// (real m) [i] [j] = real (m [i] [j])</span>
1233 <a name="l01209"></a>01209     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt; 
1234 <a name="l01210"></a>01210     BOOST_UBLAS_INLINE
1235 <a name="l01211"></a>01211     <span class="keyword">typename</span> matrix_unary1_traits&lt;E, scalar_real&lt;typename E::value_type&gt; &gt;::result_type
1236 <a name="l01212"></a>01212     real (<span class="keyword">const</span> matrix_expression&lt;E&gt; &amp;e) {
1237 <a name="l01213"></a>01213         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary1_traits&lt;E, scalar_real&lt;typename E::value_type&gt; &gt;::expression_type expression_type;
1238 <a name="l01214"></a>01214         <span class="keywordflow">return</span> expression_type (e ());
1239 <a name="l01215"></a>01215     }
1240 <a name="l01216"></a>01216 
1241 <a name="l01217"></a>01217     <span class="comment">// (imag m) [i] [j] = imag (m [i] [j])</span>
1242 <a name="l01218"></a>01218     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt; 
1243 <a name="l01219"></a>01219     BOOST_UBLAS_INLINE
1244 <a name="l01220"></a>01220     <span class="keyword">typename</span> matrix_unary1_traits&lt;E, scalar_imag&lt;typename E::value_type&gt; &gt;::result_type
1245 <a name="l01221"></a>01221     imag (<span class="keyword">const</span> matrix_expression&lt;E&gt; &amp;e) {
1246 <a name="l01222"></a>01222         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary1_traits&lt;E, scalar_imag&lt;typename E::value_type&gt; &gt;::expression_type expression_type;
1247 <a name="l01223"></a>01223         <span class="keywordflow">return</span> expression_type (e ());
1248 <a name="l01224"></a>01224     }
1249 <a name="l01225"></a>01225 
1250 <a name="l01226"></a>01226     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E, <span class="keyword">class</span> F&gt;
1251 <a name="l01227"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">01227</a>     <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">matrix_unary2</a>:
1252 <a name="l01228"></a>01228         <span class="keyword">public</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression</a>&lt;matrix_unary2&lt;E, F&gt; &gt; {
1253 <a name="l01229"></a>01229 
1254 <a name="l01230"></a>01230         <span class="keyword">typedef</span> <span class="keyword">typename</span> boost::mpl::if_&lt;boost::is_same&lt;F, scalar_identity&lt;typename E::value_type&gt; &gt;,
1255 <a name="l01231"></a>01231                                           E,
1256 <a name="l01232"></a>01232                                           <span class="keyword">const</span> E&gt;::type expression_type;
1257 <a name="l01233"></a>01233         <span class="keyword">typedef</span> F functor_type;
1258 <a name="l01234"></a>01234     <span class="keyword">public</span>:
1259 <a name="l01235"></a>01235         <span class="keyword">typedef</span> <span class="keyword">typename</span> boost::mpl::if_&lt;boost::is_const&lt;expression_type&gt;,
1260 <a name="l01236"></a>01236                                           <span class="keyword">typename</span> E::const_closure_type,
1261 <a name="l01237"></a>01237                                           <span class="keyword">typename</span> E::closure_type&gt;::type expression_closure_type;
1262 <a name="l01238"></a>01238     <span class="keyword">private</span>:
1263 <a name="l01239"></a>01239         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">matrix_unary2&lt;E, F&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a>;
1264 <a name="l01240"></a>01240     <span class="keyword">public</span>:
1265 <a name="l01241"></a>01241 <span class="preprocessor">#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS</span>
1266 <a name="l01242"></a>01242 <span class="preprocessor"></span>        <span class="keyword">using</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;self_type&gt;::operator </a>();
1267 <a name="l01243"></a>01243 <span class="preprocessor">#endif</span>
1268 <a name="l01244"></a>01244 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E::size_type size_type;
1269 <a name="l01245"></a>01245         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::difference_type difference_type;
1270 <a name="l01246"></a>01246         <span class="keyword">typedef</span> <span class="keyword">typename</span> F::result_type value_type;
1271 <a name="l01247"></a>01247         <span class="keyword">typedef</span> value_type const_reference;
1272 <a name="l01248"></a>01248         <span class="keyword">typedef</span> <span class="keyword">typename</span> boost::mpl::if_&lt;boost::is_same&lt;F, scalar_identity&lt;value_type&gt; &gt;,
1273 <a name="l01249"></a>01249                                           <span class="keyword">typename</span> E::reference,
1274 <a name="l01250"></a>01250                                           value_type&gt;::type reference;
1275 <a name="l01251"></a>01251 
1276 <a name="l01252"></a>01252         <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">const_closure_type</a>;
1277 <a name="l01253"></a>01253         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">closure_type</a>;
1278 <a name="l01254"></a>01254         <span class="keyword">typedef</span> <span class="keyword">typename</span> boost::mpl::if_&lt;boost::is_same&lt;<span class="keyword">typename</span> E::orientation_category,
1279 <a name="l01255"></a>01255                                                          <a class="code" href="structboost_1_1numeric_1_1ublas_1_1row__major__tag.html">row_major_tag</a>&gt;,
1280 <a name="l01256"></a>01256                                           <a class="code" href="structboost_1_1numeric_1_1ublas_1_1column__major__tag.html">column_major_tag</a>,
1281 <a name="l01257"></a>01257                 <span class="keyword">typename</span> boost::mpl::if_&lt;boost::is_same&lt;<span class="keyword">typename</span> E::orientation_category,
1282 <a name="l01258"></a>01258                                                          <a class="code" href="structboost_1_1numeric_1_1ublas_1_1column__major__tag.html">column_major_tag</a>&gt;,
1283 <a name="l01259"></a>01259                                           <a class="code" href="structboost_1_1numeric_1_1ublas_1_1row__major__tag.html">row_major_tag</a>,
1284 <a name="l01260"></a>01260                                           <span class="keyword">typename</span> E::orientation_category&gt;::type&gt;::type orientation_category;
1285 <a name="l01261"></a>01261         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::storage_category storage_category;
1286 <a name="l01262"></a>01262 
1287 <a name="l01263"></a>01263         <span class="comment">// Construction and destruction</span>
1288 <a name="l01264"></a>01264         BOOST_UBLAS_INLINE
1289 <a name="l01265"></a>01265         <span class="comment">// matrix_unary2 may be used as mutable expression -</span>
1290 <a name="l01266"></a>01266         <span class="comment">// this is the only non const expression constructor</span>
1291 <a name="l01267"></a>01267         <span class="keyword">explicit</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">matrix_unary2</a> (expression_type &amp;e):
1292 <a name="l01268"></a>01268             e_ (e) {}
1293 <a name="l01269"></a>01269 
1294 <a name="l01270"></a>01270         <span class="comment">// Accessors</span>
1295 <a name="l01271"></a>01271         BOOST_UBLAS_INLINE
1296 <a name="l01272"></a>01272         size_type size1 ()<span class="keyword"> const </span>{
1297 <a name="l01273"></a>01273             <span class="keywordflow">return</span> e_.size2 ();
1298 <a name="l01274"></a>01274         }
1299 <a name="l01275"></a>01275         BOOST_UBLAS_INLINE
1300 <a name="l01276"></a>01276         size_type size2 ()<span class="keyword"> const </span>{
1301 <a name="l01277"></a>01277             <span class="keywordflow">return</span> e_.size1 ();
1302 <a name="l01278"></a>01278         }
1303 <a name="l01279"></a>01279 
1304 <a name="l01280"></a>01280     <span class="keyword">public</span>:
1305 <a name="l01281"></a>01281         <span class="comment">// Expression accessors</span>
1306 <a name="l01282"></a>01282         BOOST_UBLAS_INLINE
1307 <a name="l01283"></a>01283         <span class="keyword">const</span> expression_closure_type &amp;expression ()<span class="keyword"> const </span>{
1308 <a name="l01284"></a>01284             <span class="keywordflow">return</span> e_;
1309 <a name="l01285"></a>01285         }
1310 <a name="l01286"></a>01286 
1311 <a name="l01287"></a>01287     <span class="keyword">public</span>:
1312 <a name="l01288"></a>01288         <span class="comment">// Element access</span>
1313 <a name="l01289"></a>01289         BOOST_UBLAS_INLINE
1314 <a name="l01290"></a>01290         const_reference operator () (size_type i, size_type j)<span class="keyword"> const </span>{
1315 <a name="l01291"></a>01291             <span class="keywordflow">return</span> functor_type::apply (e_ (j, i));
1316 <a name="l01292"></a>01292         }
1317 <a name="l01293"></a>01293         BOOST_UBLAS_INLINE
1318 <a name="l01294"></a>01294         reference operator () (size_type i, size_type j) {
1319 <a name="l01295"></a>01295             BOOST_STATIC_ASSERT ((boost::is_same&lt;functor_type, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1scalar__identity.html">scalar_identity&lt;value_type &gt;</a> &gt;::value));
1320 <a name="l01296"></a>01296             <span class="keywordflow">return</span> e_ (j, i);
1321 <a name="l01297"></a>01297         }
1322 <a name="l01298"></a>01298 
1323 <a name="l01299"></a>01299         <span class="comment">// Closure comparison</span>
1324 <a name="l01300"></a>01300         BOOST_UBLAS_INLINE
1325 <a name="l01301"></a>01301         <span class="keywordtype">bool</span> same_closure (<span class="keyword">const</span> matrix_unary2 &amp;mu2)<span class="keyword"> const </span>{
1326 <a name="l01302"></a>01302             <span class="keywordflow">return</span> (*this).expression ().same_closure (mu2.expression ());
1327 <a name="l01303"></a>01303         }
1328 <a name="l01304"></a>01304 
1329 <a name="l01305"></a>01305         <span class="comment">// Iterator types</span>
1330 <a name="l01306"></a>01306     <span class="keyword">private</span>:
1331 <a name="l01307"></a>01307         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_iterator1 const_subiterator2_type;
1332 <a name="l01308"></a>01308         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_iterator2 const_subiterator1_type;
1333 <a name="l01309"></a>01309         <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
1334 <a name="l01310"></a>01310 
1335 <a name="l01311"></a>01311     <span class="keyword">public</span>:
1336 <a name="l01312"></a>01312 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
1337 <a name="l01313"></a>01313 <span class="preprocessor"></span>        <span class="keyword">typedef</span> indexed_const_iterator1&lt;const_closure_type, typename const_subiterator1_type::iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a>;
1338 <a name="l01314"></a>01314         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">iterator1</a>;
1339 <a name="l01315"></a>01315         <span class="keyword">typedef</span> indexed_const_iterator2&lt;const_closure_type, typename const_subiterator2_type::iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a>;
1340 <a name="l01316"></a>01316         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">iterator2</a>;
1341 <a name="l01317"></a>01317 <span class="preprocessor">#else</span>
1342 <a name="l01318"></a>01318 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a>;
1343 <a name="l01319"></a>01319         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">iterator1</a>;
1344 <a name="l01320"></a>01320         <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a>;
1345 <a name="l01321"></a>01321         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">iterator2</a>;
1346 <a name="l01322"></a>01322 <span class="preprocessor">#endif</span>
1347 <a name="l01323"></a>01323 <span class="preprocessor"></span>        <span class="keyword">typedef</span> reverse_iterator_base1&lt;const_iterator1&gt; const_reverse_iterator1;
1348 <a name="l01324"></a>01324         <span class="keyword">typedef</span> reverse_iterator_base2&lt;const_iterator2&gt; const_reverse_iterator2;
1349 <a name="l01325"></a>01325 
1350 <a name="l01326"></a>01326         <span class="comment">// Element lookup</span>
1351 <a name="l01327"></a>01327         BOOST_UBLAS_INLINE
1352 <a name="l01328"></a>01328         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a> find1 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
1353 <a name="l01329"></a>01329             const_subiterator1_type it1 (e_.find2 (rank, j, i));
1354 <a name="l01330"></a>01330 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
1355 <a name="l01331"></a>01331 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, it1.index2 (), it1.index1 ());
1356 <a name="l01332"></a>01332 <span class="preprocessor">#else</span>
1357 <a name="l01333"></a>01333 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, it1);
1358 <a name="l01334"></a>01334 <span class="preprocessor">#endif</span>
1359 <a name="l01335"></a>01335 <span class="preprocessor"></span>        }
1360 <a name="l01336"></a>01336         BOOST_UBLAS_INLINE
1361 <a name="l01337"></a>01337         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a> find2 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
1362 <a name="l01338"></a>01338             const_subiterator2_type it2 (e_.find1 (rank, j, i));
1363 <a name="l01339"></a>01339 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
1364 <a name="l01340"></a>01340 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, it2.index2 (), it2.index1 ());
1365 <a name="l01341"></a>01341 <span class="preprocessor">#else</span>
1366 <a name="l01342"></a>01342 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, it2);
1367 <a name="l01343"></a>01343 <span class="preprocessor">#endif</span>
1368 <a name="l01344"></a>01344 <span class="preprocessor"></span>        }
1369 <a name="l01345"></a>01345 
1370 <a name="l01346"></a>01346         <span class="comment">// Iterators enhance the iterators of the referenced expression</span>
1371 <a name="l01347"></a>01347         <span class="comment">// with the unary functor.</span>
1372 <a name="l01348"></a>01348 
1373 <a name="l01349"></a>01349 <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
1374 <a name="l01350"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">01350</a> <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a>:
1375 <a name="l01351"></a>01351             <span class="keyword">public</span> container_const_reference&lt;matrix_unary2&gt;,
1376 <a name="l01352"></a>01352             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename E::const_iterator2::iterator_category&gt;::template
1377 <a name="l01353"></a>01353                 iterator_base&lt;const_iterator1, value_type&gt;::type {
1378 <a name="l01354"></a>01354         <span class="keyword">public</span>:
1379 <a name="l01355"></a>01355             <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_iterator2::iterator_category iterator_category;
1380 <a name="l01356"></a>01356             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary2::difference_type difference_type;
1381 <a name="l01357"></a>01357             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary2::value_type value_type;
1382 <a name="l01358"></a>01358             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary2::const_reference reference;
1383 <a name="l01359"></a>01359             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary2::const_pointer pointer;
1384 <a name="l01360"></a>01360 
1385 <a name="l01361"></a>01361             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">dual_iterator_type</a>;
1386 <a name="l01362"></a>01362             <span class="keyword">typedef</span> const_reverse_iterator2 dual_reverse_iterator_type;
1387 <a name="l01363"></a>01363 
1388 <a name="l01364"></a>01364             <span class="comment">// Construction and destruction</span>
1389 <a name="l01365"></a>01365             BOOST_UBLAS_INLINE
1390 <a name="l01366"></a>01366             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a> ():
1391 <a name="l01367"></a>01367                 container_const_reference&lt;self_type&gt; (), it_ () {}
1392 <a name="l01368"></a>01368             BOOST_UBLAS_INLINE
1393 <a name="l01369"></a>01369             const_iterator1 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a> &amp;mu, <span class="keyword">const</span> const_subiterator1_type &amp;it):
1394 <a name="l01370"></a>01370                 container_const_reference&lt;self_type&gt; (mu), it_ (it) {}
1395 <a name="l01371"></a>01371 
1396 <a name="l01372"></a>01372             <span class="comment">// Arithmetic</span>
1397 <a name="l01373"></a>01373             BOOST_UBLAS_INLINE
1398 <a name="l01374"></a>01374             const_iterator1 &amp;operator ++ () {
1399 <a name="l01375"></a>01375                 ++ it_;
1400 <a name="l01376"></a>01376                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1401 <a name="l01377"></a>01377             }
1402 <a name="l01378"></a>01378             BOOST_UBLAS_INLINE
1403 <a name="l01379"></a>01379             const_iterator1 &amp;operator -- () {
1404 <a name="l01380"></a>01380                 -- it_;
1405 <a name="l01381"></a>01381                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1406 <a name="l01382"></a>01382             }
1407 <a name="l01383"></a>01383             BOOST_UBLAS_INLINE
1408 <a name="l01384"></a>01384             const_iterator1 &amp;operator += (difference_type n) {
1409 <a name="l01385"></a>01385                 it_ += n;
1410 <a name="l01386"></a>01386                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1411 <a name="l01387"></a>01387             }
1412 <a name="l01388"></a>01388             BOOST_UBLAS_INLINE
1413 <a name="l01389"></a>01389             const_iterator1 &amp;operator -= (difference_type n) {
1414 <a name="l01390"></a>01390                 it_ -= n;
1415 <a name="l01391"></a>01391                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1416 <a name="l01392"></a>01392             }
1417 <a name="l01393"></a>01393             BOOST_UBLAS_INLINE
1418 <a name="l01394"></a>01394             difference_type operator - (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
1419 <a name="l01395"></a>01395                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
1420 <a name="l01396"></a>01396                 <span class="keywordflow">return</span> it_ - it.it_;
1421 <a name="l01397"></a>01397             }
1422 <a name="l01398"></a>01398 
1423 <a name="l01399"></a>01399             <span class="comment">// Dereference</span>
1424 <a name="l01400"></a>01400             BOOST_UBLAS_INLINE
1425 <a name="l01401"></a>01401             const_reference operator * ()<span class="keyword"> const </span>{
1426 <a name="l01402"></a>01402                 <span class="keywordflow">return</span> functor_type::apply (*it_);
1427 <a name="l01403"></a>01403             }
1428 <a name="l01404"></a>01404             BOOST_UBLAS_INLINE
1429 <a name="l01405"></a>01405             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
1430 <a name="l01406"></a>01406                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
1431 <a name="l01407"></a>01407             }
1432 <a name="l01408"></a>01408 
1433 <a name="l01409"></a>01409 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
1434 <a name="l01410"></a>01410 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
1435 <a name="l01411"></a>01411 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1436 <a name="l01412"></a>01412 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a>::
1437 <a name="l01413"></a>01413 <span class="preprocessor">#endif</span>
1438 <a name="l01414"></a>01414 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a> begin ()<span class="keyword"> const </span>{
1439 <a name="l01415"></a>01415                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), 0);
1440 <a name="l01416"></a>01416             }
1441 <a name="l01417"></a>01417             BOOST_UBLAS_INLINE
1442 <a name="l01418"></a>01418 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1443 <a name="l01419"></a>01419 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a>::
1444 <a name="l01420"></a>01420 <span class="preprocessor">#endif</span>
1445 <a name="l01421"></a>01421 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a> end ()<span class="keyword"> const </span>{
1446 <a name="l01422"></a>01422                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), (*this) ().size2 ());
1447 <a name="l01423"></a>01423             }
1448 <a name="l01424"></a>01424             BOOST_UBLAS_INLINE
1449 <a name="l01425"></a>01425 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1450 <a name="l01426"></a>01426 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a>::
1451 <a name="l01427"></a>01427 <span class="preprocessor">#endif</span>
1452 <a name="l01428"></a>01428 <span class="preprocessor"></span>            const_reverse_iterator2 rbegin ()<span class="keyword"> const </span>{
1453 <a name="l01429"></a>01429                 <span class="keywordflow">return</span> const_reverse_iterator2 (end ());
1454 <a name="l01430"></a>01430             }
1455 <a name="l01431"></a>01431             BOOST_UBLAS_INLINE
1456 <a name="l01432"></a>01432 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1457 <a name="l01433"></a>01433 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a>::
1458 <a name="l01434"></a>01434 <span class="preprocessor">#endif</span>
1459 <a name="l01435"></a>01435 <span class="preprocessor"></span>            const_reverse_iterator2 rend ()<span class="keyword"> const </span>{
1460 <a name="l01436"></a>01436                 <span class="keywordflow">return</span> const_reverse_iterator2 (begin ());
1461 <a name="l01437"></a>01437             }
1462 <a name="l01438"></a>01438 <span class="preprocessor">#endif</span>
1463 <a name="l01439"></a>01439 <span class="preprocessor"></span>
1464 <a name="l01440"></a>01440             <span class="comment">// Indices</span>
1465 <a name="l01441"></a>01441             BOOST_UBLAS_INLINE
1466 <a name="l01442"></a>01442             size_type index1 ()<span class="keyword"> const </span>{
1467 <a name="l01443"></a>01443                 <span class="keywordflow">return</span> it_.index2 ();
1468 <a name="l01444"></a>01444             }
1469 <a name="l01445"></a>01445             BOOST_UBLAS_INLINE
1470 <a name="l01446"></a>01446             size_type index2 ()<span class="keyword"> const </span>{
1471 <a name="l01447"></a>01447                 <span class="keywordflow">return</span> it_.index1 ();
1472 <a name="l01448"></a>01448             }
1473 <a name="l01449"></a>01449 
1474 <a name="l01450"></a>01450             <span class="comment">// Assignment </span>
1475 <a name="l01451"></a>01451             BOOST_UBLAS_INLINE
1476 <a name="l01452"></a>01452             const_iterator1 &amp;operator = (<span class="keyword">const</span> const_iterator1 &amp;it) {
1477 <a name="l01453"></a>01453                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
1478 <a name="l01454"></a>01454                 it_ = it.it_;
1479 <a name="l01455"></a>01455                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1480 <a name="l01456"></a>01456             }
1481 <a name="l01457"></a>01457 
1482 <a name="l01458"></a>01458             <span class="comment">// Comparison</span>
1483 <a name="l01459"></a>01459             BOOST_UBLAS_INLINE
1484 <a name="l01460"></a>01460             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
1485 <a name="l01461"></a>01461                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
1486 <a name="l01462"></a>01462                 <span class="keywordflow">return</span> it_ == it.it_;
1487 <a name="l01463"></a>01463             }
1488 <a name="l01464"></a>01464             BOOST_UBLAS_INLINE
1489 <a name="l01465"></a>01465             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
1490 <a name="l01466"></a>01466                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
1491 <a name="l01467"></a>01467                 <span class="keywordflow">return</span> it_ &lt; it.it_;
1492 <a name="l01468"></a>01468             }
1493 <a name="l01469"></a>01469 
1494 <a name="l01470"></a>01470         <span class="keyword">private</span>:
1495 <a name="l01471"></a>01471             const_subiterator1_type it_;
1496 <a name="l01472"></a>01472         };
1497 <a name="l01473"></a>01473 <span class="preprocessor">#endif</span>
1498 <a name="l01474"></a>01474 <span class="preprocessor"></span>
1499 <a name="l01475"></a>01475         BOOST_UBLAS_INLINE
1500 <a name="l01476"></a>01476         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a> begin1 ()<span class="keyword"> const </span>{
1501 <a name="l01477"></a>01477             <span class="keywordflow">return</span> find1 (0, 0, 0);
1502 <a name="l01478"></a>01478         }
1503 <a name="l01479"></a>01479         BOOST_UBLAS_INLINE
1504 <a name="l01480"></a>01480         const_iterator1 end1 ()<span class="keyword"> const </span>{
1505 <a name="l01481"></a>01481             <span class="keywordflow">return</span> find1 (0, size1 (), 0);
1506 <a name="l01482"></a>01482         }
1507 <a name="l01483"></a>01483 
1508 <a name="l01484"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">01484</a> <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
1509 <a name="l01485"></a>01485 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a>:
1510 <a name="l01486"></a>01486             <span class="keyword">public</span> container_const_reference&lt;matrix_unary2&gt;,
1511 <a name="l01487"></a>01487             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename E::const_iterator1::iterator_category&gt;::template
1512 <a name="l01488"></a>01488                 iterator_base&lt;const_iterator2, value_type&gt;::type {
1513 <a name="l01489"></a>01489         <span class="keyword">public</span>:
1514 <a name="l01490"></a>01490             <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_iterator1::iterator_category iterator_category;
1515 <a name="l01491"></a>01491             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary2::difference_type difference_type;
1516 <a name="l01492"></a>01492             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary2::value_type value_type;
1517 <a name="l01493"></a>01493             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary2::const_reference reference;
1518 <a name="l01494"></a>01494             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary2::const_pointer pointer;
1519 <a name="l01495"></a>01495 
1520 <a name="l01496"></a>01496             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">dual_iterator_type</a>;
1521 <a name="l01497"></a>01497             <span class="keyword">typedef</span> const_reverse_iterator1 dual_reverse_iterator_type;
1522 <a name="l01498"></a>01498 
1523 <a name="l01499"></a>01499             <span class="comment">// Construction and destruction</span>
1524 <a name="l01500"></a>01500             BOOST_UBLAS_INLINE
1525 <a name="l01501"></a>01501             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a> ():
1526 <a name="l01502"></a>01502                 container_const_reference&lt;self_type&gt; (), it_ () {}
1527 <a name="l01503"></a>01503             BOOST_UBLAS_INLINE
1528 <a name="l01504"></a>01504             const_iterator2 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a> &amp;mu, <span class="keyword">const</span> const_subiterator2_type &amp;it):
1529 <a name="l01505"></a>01505                 container_const_reference&lt;self_type&gt; (mu), it_ (it) {}
1530 <a name="l01506"></a>01506 
1531 <a name="l01507"></a>01507             <span class="comment">// Arithmetic</span>
1532 <a name="l01508"></a>01508             BOOST_UBLAS_INLINE
1533 <a name="l01509"></a>01509             const_iterator2 &amp;operator ++ () {
1534 <a name="l01510"></a>01510                 ++ it_;
1535 <a name="l01511"></a>01511                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1536 <a name="l01512"></a>01512             }
1537 <a name="l01513"></a>01513             BOOST_UBLAS_INLINE
1538 <a name="l01514"></a>01514             const_iterator2 &amp;operator -- () {
1539 <a name="l01515"></a>01515                 -- it_;
1540 <a name="l01516"></a>01516                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1541 <a name="l01517"></a>01517             }
1542 <a name="l01518"></a>01518             BOOST_UBLAS_INLINE
1543 <a name="l01519"></a>01519             const_iterator2 &amp;operator += (difference_type n) {
1544 <a name="l01520"></a>01520                 it_ += n;
1545 <a name="l01521"></a>01521                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1546 <a name="l01522"></a>01522             }
1547 <a name="l01523"></a>01523             BOOST_UBLAS_INLINE
1548 <a name="l01524"></a>01524             const_iterator2 &amp;operator -= (difference_type n) {
1549 <a name="l01525"></a>01525                 it_ -= n;
1550 <a name="l01526"></a>01526                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1551 <a name="l01527"></a>01527             }
1552 <a name="l01528"></a>01528             BOOST_UBLAS_INLINE
1553 <a name="l01529"></a>01529             difference_type operator - (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
1554 <a name="l01530"></a>01530                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
1555 <a name="l01531"></a>01531                 <span class="keywordflow">return</span> it_ - it.it_;
1556 <a name="l01532"></a>01532             }
1557 <a name="l01533"></a>01533 
1558 <a name="l01534"></a>01534             <span class="comment">// Dereference</span>
1559 <a name="l01535"></a>01535             BOOST_UBLAS_INLINE
1560 <a name="l01536"></a>01536             const_reference operator * ()<span class="keyword"> const </span>{
1561 <a name="l01537"></a>01537                 <span class="keywordflow">return</span> functor_type::apply (*it_);
1562 <a name="l01538"></a>01538             }
1563 <a name="l01539"></a>01539             BOOST_UBLAS_INLINE
1564 <a name="l01540"></a>01540             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
1565 <a name="l01541"></a>01541                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
1566 <a name="l01542"></a>01542             }
1567 <a name="l01543"></a>01543 
1568 <a name="l01544"></a>01544 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
1569 <a name="l01545"></a>01545 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
1570 <a name="l01546"></a>01546 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1571 <a name="l01547"></a>01547 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a>::
1572 <a name="l01548"></a>01548 <span class="preprocessor">#endif</span>
1573 <a name="l01549"></a>01549 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a> begin ()<span class="keyword"> const </span>{
1574 <a name="l01550"></a>01550                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, 0, index2 ());
1575 <a name="l01551"></a>01551             }
1576 <a name="l01552"></a>01552             BOOST_UBLAS_INLINE
1577 <a name="l01553"></a>01553 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1578 <a name="l01554"></a>01554 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a>::
1579 <a name="l01555"></a>01555 <span class="preprocessor">#endif</span>
1580 <a name="l01556"></a>01556 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator1.html">const_iterator1</a> end ()<span class="keyword"> const </span>{
1581 <a name="l01557"></a>01557                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, (*<span class="keyword">this</span>) ().size1 (), index2 ());
1582 <a name="l01558"></a>01558             }
1583 <a name="l01559"></a>01559             BOOST_UBLAS_INLINE
1584 <a name="l01560"></a>01560 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1585 <a name="l01561"></a>01561 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a>::
1586 <a name="l01562"></a>01562 <span class="preprocessor">#endif</span>
1587 <a name="l01563"></a>01563 <span class="preprocessor"></span>            const_reverse_iterator1 rbegin ()<span class="keyword"> const </span>{
1588 <a name="l01564"></a>01564                 <span class="keywordflow">return</span> const_reverse_iterator1 (end ());
1589 <a name="l01565"></a>01565             }
1590 <a name="l01566"></a>01566             BOOST_UBLAS_INLINE
1591 <a name="l01567"></a>01567 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
1592 <a name="l01568"></a>01568 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">self_type</a>::
1593 <a name="l01569"></a>01569 <span class="preprocessor">#endif</span>
1594 <a name="l01570"></a>01570 <span class="preprocessor"></span>            const_reverse_iterator1 rend ()<span class="keyword"> const </span>{
1595 <a name="l01571"></a>01571                 <span class="keywordflow">return</span> const_reverse_iterator1 (begin ());
1596 <a name="l01572"></a>01572             }
1597 <a name="l01573"></a>01573 <span class="preprocessor">#endif</span>
1598 <a name="l01574"></a>01574 <span class="preprocessor"></span>
1599 <a name="l01575"></a>01575             <span class="comment">// Indices</span>
1600 <a name="l01576"></a>01576             BOOST_UBLAS_INLINE
1601 <a name="l01577"></a>01577             size_type index1 ()<span class="keyword"> const </span>{
1602 <a name="l01578"></a>01578                 <span class="keywordflow">return</span> it_.index2 ();
1603 <a name="l01579"></a>01579             }
1604 <a name="l01580"></a>01580             BOOST_UBLAS_INLINE
1605 <a name="l01581"></a>01581             size_type index2 ()<span class="keyword"> const </span>{
1606 <a name="l01582"></a>01582                 <span class="keywordflow">return</span> it_.index1 ();
1607 <a name="l01583"></a>01583             }
1608 <a name="l01584"></a>01584 
1609 <a name="l01585"></a>01585             <span class="comment">// Assignment</span>
1610 <a name="l01586"></a>01586             BOOST_UBLAS_INLINE
1611 <a name="l01587"></a>01587             const_iterator2 &amp;operator = (<span class="keyword">const</span> const_iterator2 &amp;it) {
1612 <a name="l01588"></a>01588                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
1613 <a name="l01589"></a>01589                 it_ = it.it_;
1614 <a name="l01590"></a>01590                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
1615 <a name="l01591"></a>01591             }
1616 <a name="l01592"></a>01592 
1617 <a name="l01593"></a>01593             <span class="comment">// Comparison</span>
1618 <a name="l01594"></a>01594             BOOST_UBLAS_INLINE
1619 <a name="l01595"></a>01595             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
1620 <a name="l01596"></a>01596                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
1621 <a name="l01597"></a>01597                 <span class="keywordflow">return</span> it_ == it.it_;
1622 <a name="l01598"></a>01598             }
1623 <a name="l01599"></a>01599             BOOST_UBLAS_INLINE
1624 <a name="l01600"></a>01600             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
1625 <a name="l01601"></a>01601                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
1626 <a name="l01602"></a>01602                 <span class="keywordflow">return</span> it_ &lt; it.it_;
1627 <a name="l01603"></a>01603             }
1628 <a name="l01604"></a>01604 
1629 <a name="l01605"></a>01605         <span class="keyword">private</span>:
1630 <a name="l01606"></a>01606             const_subiterator2_type it_;
1631 <a name="l01607"></a>01607         };
1632 <a name="l01608"></a>01608 <span class="preprocessor">#endif</span>
1633 <a name="l01609"></a>01609 <span class="preprocessor"></span>
1634 <a name="l01610"></a>01610         BOOST_UBLAS_INLINE
1635 <a name="l01611"></a>01611         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2_1_1const__iterator2.html">const_iterator2</a> begin2 ()<span class="keyword"> const </span>{
1636 <a name="l01612"></a>01612             <span class="keywordflow">return</span> find2 (0, 0, 0);
1637 <a name="l01613"></a>01613         }
1638 <a name="l01614"></a>01614         BOOST_UBLAS_INLINE
1639 <a name="l01615"></a>01615         const_iterator2 end2 ()<span class="keyword"> const </span>{
1640 <a name="l01616"></a>01616             <span class="keywordflow">return</span> find2 (0, 0, size2 ());
1641 <a name="l01617"></a>01617         }
1642 <a name="l01618"></a>01618 
1643 <a name="l01619"></a>01619         <span class="comment">// Reverse iterators</span>
1644 <a name="l01620"></a>01620 
1645 <a name="l01621"></a>01621         BOOST_UBLAS_INLINE
1646 <a name="l01622"></a>01622         const_reverse_iterator1 rbegin1 ()<span class="keyword"> const </span>{
1647 <a name="l01623"></a>01623             <span class="keywordflow">return</span> const_reverse_iterator1 (end1 ());
1648 <a name="l01624"></a>01624         }
1649 <a name="l01625"></a>01625         BOOST_UBLAS_INLINE
1650 <a name="l01626"></a>01626         const_reverse_iterator1 rend1 ()<span class="keyword"> const </span>{
1651 <a name="l01627"></a>01627             <span class="keywordflow">return</span> const_reverse_iterator1 (begin1 ());
1652 <a name="l01628"></a>01628         }
1653 <a name="l01629"></a>01629 
1654 <a name="l01630"></a>01630         BOOST_UBLAS_INLINE
1655 <a name="l01631"></a>01631         const_reverse_iterator2 rbegin2 ()<span class="keyword"> const </span>{
1656 <a name="l01632"></a>01632             <span class="keywordflow">return</span> const_reverse_iterator2 (end2 ());
1657 <a name="l01633"></a>01633         }
1658 <a name="l01634"></a>01634         BOOST_UBLAS_INLINE
1659 <a name="l01635"></a>01635         const_reverse_iterator2 rend2 ()<span class="keyword"> const </span>{
1660 <a name="l01636"></a>01636             <span class="keywordflow">return</span> const_reverse_iterator2 (begin2 ());
1661 <a name="l01637"></a>01637         }
1662 <a name="l01638"></a>01638 
1663 <a name="l01639"></a>01639     <span class="keyword">private</span>:
1664 <a name="l01640"></a>01640         expression_closure_type e_;
1665 <a name="l01641"></a>01641     };
1666 <a name="l01642"></a>01642 
1667 <a name="l01643"></a>01643     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E, <span class="keyword">class</span> F&gt;
1668 <a name="l01644"></a><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__unary2__traits.html">01644</a>     <span class="keyword">struct </span><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__unary2__traits.html">matrix_unary2_traits</a> {
1669 <a name="l01645"></a>01645         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">matrix_unary2&lt;E, F&gt;</a> expression_type;
1670 <a name="l01646"></a>01646 <span class="preprocessor">#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG</span>
1671 <a name="l01647"></a>01647 <span class="preprocessor"></span>        <span class="keyword">typedef</span> expression_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">result_type</a>; 
1672 <a name="l01648"></a>01648 <span class="preprocessor">#else</span>
1673 <a name="l01649"></a>01649 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E::matrix_temporary_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__unary2.html">result_type</a>;
1674 <a name="l01650"></a>01650 <span class="preprocessor">#endif</span>
1675 <a name="l01651"></a>01651 <span class="preprocessor"></span>    };
1676 <a name="l01652"></a>01652 
1677 <a name="l01653"></a>01653     <span class="comment">// (trans m) [i] [j] = m [j] [i]</span>
1678 <a name="l01654"></a>01654     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt;
1679 <a name="l01655"></a>01655     BOOST_UBLAS_INLINE
1680 <a name="l01656"></a>01656     <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__unary2__traits.html">matrix_unary2_traits&lt;const E, scalar_identity&lt;typename E::value_type&gt;</a> &gt;::result_type
1681 <a name="l01657"></a>01657     trans (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;E&gt;</a> &amp;e) {
1682 <a name="l01658"></a>01658         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__unary2__traits.html">matrix_unary2_traits&lt;const E, scalar_identity&lt;typename E::value_type&gt;</a> &gt;::expression_type expression_type;
1683 <a name="l01659"></a>01659         <span class="keywordflow">return</span> expression_type (e ());
1684 <a name="l01660"></a>01660     }
1685 <a name="l01661"></a>01661     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt;
1686 <a name="l01662"></a>01662     BOOST_UBLAS_INLINE
1687 <a name="l01663"></a>01663     <span class="keyword">typename</span> matrix_unary2_traits&lt;E, scalar_identity&lt;typename E::value_type&gt; &gt;::result_type
1688 <a name="l01664"></a>01664     trans (matrix_expression&lt;E&gt; &amp;e) {
1689 <a name="l01665"></a>01665         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary2_traits&lt;E, scalar_identity&lt;typename E::value_type&gt; &gt;::expression_type expression_type;
1690 <a name="l01666"></a>01666         <span class="keywordflow">return</span> expression_type (e ());
1691 <a name="l01667"></a>01667     }
1692 <a name="l01668"></a>01668 
1693 <a name="l01669"></a>01669     <span class="comment">// (herm m) [i] [j] = conj (m [j] [i])</span>
1694 <a name="l01670"></a>01670     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt;
1695 <a name="l01671"></a>01671     BOOST_UBLAS_INLINE
1696 <a name="l01672"></a>01672     <span class="keyword">typename</span> matrix_unary2_traits&lt;E, scalar_conj&lt;typename E::value_type&gt; &gt;::result_type
1697 <a name="l01673"></a>01673     herm (<span class="keyword">const</span> matrix_expression&lt;E&gt; &amp;e) {
1698 <a name="l01674"></a>01674         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_unary2_traits&lt;E, scalar_conj&lt;typename E::value_type&gt; &gt;::expression_type expression_type;
1699 <a name="l01675"></a>01675         <span class="keywordflow">return</span> expression_type (e ());
1700 <a name="l01676"></a>01676     }
1701 <a name="l01677"></a>01677 
1702 <a name="l01678"></a>01678     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2, <span class="keyword">class</span> F&gt;
1703 <a name="l01679"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">01679</a>     <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">matrix_binary</a>:
1704 <a name="l01680"></a>01680         <span class="keyword">public</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression</a>&lt;matrix_binary&lt;E1, E2, F&gt; &gt; {
1705 <a name="l01681"></a>01681 
1706 <a name="l01682"></a>01682         <span class="keyword">typedef</span> E1 expression1_type;
1707 <a name="l01683"></a>01683         <span class="keyword">typedef</span> E2 expression2_type;
1708 <a name="l01684"></a>01684         <span class="keyword">typedef</span> F functor_type;
1709 <a name="l01685"></a>01685     <span class="keyword">public</span>:
1710 <a name="l01686"></a>01686         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_closure_type expression1_closure_type;
1711 <a name="l01687"></a>01687         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_closure_type expression2_closure_type;
1712 <a name="l01688"></a>01688     <span class="keyword">private</span>:
1713 <a name="l01689"></a>01689         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">matrix_binary&lt;E1, E2, F&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a>;
1714 <a name="l01690"></a>01690     <span class="keyword">public</span>:
1715 <a name="l01691"></a>01691 <span class="preprocessor">#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS</span>
1716 <a name="l01692"></a>01692 <span class="preprocessor"></span>        <span class="keyword">using</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;self_type&gt;::operator </a>();
1717 <a name="l01693"></a>01693 <span class="preprocessor">#endif</span>
1718 <a name="l01694"></a>01694 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;typename E1::size_type, typename E2::size_type&gt;::promote_type</a> size_type;
1719 <a name="l01695"></a>01695         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;typename E1::difference_type, typename E2::difference_type&gt;::promote_type</a> difference_type;
1720 <a name="l01696"></a>01696         <span class="keyword">typedef</span> <span class="keyword">typename</span> F::result_type value_type;
1721 <a name="l01697"></a>01697         <span class="keyword">typedef</span> value_type const_reference;
1722 <a name="l01698"></a>01698         <span class="keyword">typedef</span> const_reference reference;
1723 <a name="l01699"></a>01699         <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">const_closure_type</a>;
1724 <a name="l01700"></a>01700         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">const_closure_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">closure_type</a>;
1725 <a name="l01701"></a>01701         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__orientation__tag.html">unknown_orientation_tag</a> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__orientation__tag.html">orientation_category</a>;
1726 <a name="l01702"></a>01702         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">storage_category</a>;
1727 <a name="l01703"></a>01703 
1728 <a name="l01704"></a>01704         <span class="comment">// Construction and destruction</span>
1729 <a name="l01705"></a>01705         BOOST_UBLAS_INLINE
1730 <a name="l01706"></a>01706         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">matrix_binary</a> (<span class="keyword">const</span> E1 &amp;e1, <span class="keyword">const</span> E2 &amp;e2): 
1731 <a name="l01707"></a>01707             e1_ (e1), e2_ (e2) {}
1732 <a name="l01708"></a>01708 
1733 <a name="l01709"></a>01709         <span class="comment">// Accessors</span>
1734 <a name="l01710"></a>01710         BOOST_UBLAS_INLINE
1735 <a name="l01711"></a>01711         size_type size1 ()<span class="keyword"> const </span>{ 
1736 <a name="l01712"></a>01712             <span class="keywordflow">return</span> BOOST_UBLAS_SAME (e1_.size1 (), e2_.size1 ());
1737 <a name="l01713"></a>01713         }
1738 <a name="l01714"></a>01714         BOOST_UBLAS_INLINE
1739 <a name="l01715"></a>01715         size_type size2 ()<span class="keyword"> const </span>{
1740 <a name="l01716"></a>01716             <span class="keywordflow">return</span> BOOST_UBLAS_SAME (e1_.size2 (), e2_.size2 ());
1741 <a name="l01717"></a>01717         }
1742 <a name="l01718"></a>01718 
1743 <a name="l01719"></a>01719     <span class="keyword">public</span>:
1744 <a name="l01720"></a>01720         <span class="comment">// Expression accessors</span>
1745 <a name="l01721"></a>01721         BOOST_UBLAS_INLINE
1746 <a name="l01722"></a>01722         <span class="keyword">const</span> expression1_closure_type &amp;expression1 ()<span class="keyword"> const </span>{
1747 <a name="l01723"></a>01723             <span class="keywordflow">return</span> e1_;
1748 <a name="l01724"></a>01724         }
1749 <a name="l01725"></a>01725         BOOST_UBLAS_INLINE
1750 <a name="l01726"></a>01726         <span class="keyword">const</span> expression2_closure_type &amp;expression2 ()<span class="keyword"> const </span>{
1751 <a name="l01727"></a>01727             <span class="keywordflow">return</span> e2_;
1752 <a name="l01728"></a>01728         }
1753 <a name="l01729"></a>01729 
1754 <a name="l01730"></a>01730     <span class="keyword">public</span>:
1755 <a name="l01731"></a>01731         <span class="comment">// Element access</span>
1756 <a name="l01732"></a>01732         BOOST_UBLAS_INLINE
1757 <a name="l01733"></a>01733         const_reference operator () (size_type i, size_type j)<span class="keyword"> const </span>{
1758 <a name="l01734"></a>01734             <span class="keywordflow">return</span> functor_type::apply (e1_ (i, j), e2_ (i, j));
1759 <a name="l01735"></a>01735         }
1760 <a name="l01736"></a>01736 
1761 <a name="l01737"></a>01737         <span class="comment">// Closure comparison</span>
1762 <a name="l01738"></a>01738         BOOST_UBLAS_INLINE
1763 <a name="l01739"></a>01739         <span class="keywordtype">bool</span> same_closure (<span class="keyword">const</span> matrix_binary &amp;mb)<span class="keyword"> const </span>{
1764 <a name="l01740"></a>01740             <span class="keywordflow">return</span> (*this).expression1 ().same_closure (mb.expression1 ()) &amp;&amp;
1765 <a name="l01741"></a>01741                    (*this).expression2 ().same_closure (mb.expression2 ());
1766 <a name="l01742"></a>01742         }
1767 <a name="l01743"></a>01743 
1768 <a name="l01744"></a>01744         <span class="comment">// Iterator types</span>
1769 <a name="l01745"></a>01745     <span class="keyword">private</span>:
1770 <a name="l01746"></a>01746         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_iterator1 const_iterator11_type;
1771 <a name="l01747"></a>01747         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_iterator2 const_iterator12_type;
1772 <a name="l01748"></a>01748         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_iterator1 const_iterator21_type;
1773 <a name="l01749"></a>01749         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_iterator2 const_iterator22_type;
1774 <a name="l01750"></a>01750         <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
1775 <a name="l01751"></a>01751 
1776 <a name="l01752"></a>01752     <span class="keyword">public</span>:
1777 <a name="l01753"></a>01753 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
1778 <a name="l01754"></a>01754 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> const_iterator11_type::iterator_category,
1779 <a name="l01755"></a>01755                                                   <span class="keyword">typename</span> const_iterator21_type::iterator_category&gt;::iterator_category iterator_category1;
1780 <a name="l01756"></a>01756         <span class="keyword">typedef</span> indexed_const_iterator1&lt;const_closure_type, iterator_category1&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a>;
1781 <a name="l01757"></a>01757         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">iterator1</a>;
1782 <a name="l01758"></a>01758         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> const_iterator12_type::iterator_category,
1783 <a name="l01759"></a>01759                                                   <span class="keyword">typename</span> const_iterator22_type::iterator_category&gt;::iterator_category iterator_category2;
1784 <a name="l01760"></a>01760         <span class="keyword">typedef</span> indexed_const_iterator2&lt;const_closure_type, iterator_category2&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a>;
1785 <a name="l01761"></a>01761         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">iterator2</a>;
1786 <a name="l01762"></a>01762 <span class="preprocessor">#else</span>
1787 <a name="l01763"></a>01763 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a>;
1788 <a name="l01764"></a>01764         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">iterator1</a>;
1789 <a name="l01765"></a>01765         <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a>;
1790 <a name="l01766"></a>01766         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">iterator2</a>;
1791 <a name="l01767"></a>01767 <span class="preprocessor">#endif</span>
1792 <a name="l01768"></a>01768 <span class="preprocessor"></span>        <span class="keyword">typedef</span> reverse_iterator_base1&lt;const_iterator1&gt; const_reverse_iterator1;
1793 <a name="l01769"></a>01769         <span class="keyword">typedef</span> reverse_iterator_base2&lt;const_iterator2&gt; const_reverse_iterator2;
1794 <a name="l01770"></a>01770 
1795 <a name="l01771"></a>01771         <span class="comment">// Element lookup</span>
1796 <a name="l01772"></a>01772         BOOST_UBLAS_INLINE
1797 <a name="l01773"></a>01773         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a> find1 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
1798 <a name="l01774"></a>01774             const_iterator11_type it11 (e1_.find1 (rank, i, j));
1799 <a name="l01775"></a>01775             const_iterator11_type it11_end (e1_.find1 (rank, size1 (), j));
1800 <a name="l01776"></a>01776             const_iterator21_type it21 (e2_.find1 (rank, i, j));
1801 <a name="l01777"></a>01777             const_iterator21_type it21_end (e2_.find1 (rank, size1 (), j));
1802 <a name="l01778"></a>01778             BOOST_UBLAS_CHECK (rank == 0 || it11 == it11_end || it11.index2 () == j, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ())
1803 <a name="l01779"></a>01779             BOOST_UBLAS_CHECK (rank == 0 || it21 == it21_end || it21.index2 () == j, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ())
1804 <a name="l01780"></a>01780             i = (std::min) (it11 != it11_end ? it11.index1 () : size1 (),
1805 <a name="l01781"></a>01781                           it21 != it21_end ? it21.index1 () : size1 ());
1806 <a name="l01782"></a>01782 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
1807 <a name="l01783"></a>01783 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, i, j);
1808 <a name="l01784"></a>01784 <span class="preprocessor">#else</span>
1809 <a name="l01785"></a>01785 <span class="preprocessor"></span>            <span class="keywordflow">return</span> const_iterator1 (*<span class="keyword">this</span>, i, j, it11, it11_end, it21, it21_end);
1810 <a name="l01786"></a>01786 <span class="preprocessor">#endif</span>
1811 <a name="l01787"></a>01787 <span class="preprocessor"></span>        }
1812 <a name="l01788"></a>01788         BOOST_UBLAS_INLINE
1813 <a name="l01789"></a>01789         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a> find2 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
1814 <a name="l01790"></a>01790             const_iterator12_type it12 (e1_.find2 (rank, i, j));
1815 <a name="l01791"></a>01791             const_iterator12_type it12_end (e1_.find2 (rank, i, size2 ()));
1816 <a name="l01792"></a>01792             const_iterator22_type it22 (e2_.find2 (rank, i, j));
1817 <a name="l01793"></a>01793             const_iterator22_type it22_end (e2_.find2 (rank, i, size2 ()));
1818 <a name="l01794"></a>01794             BOOST_UBLAS_CHECK (rank == 0 || it12 == it12_end || it12.index1 () == i, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ())
1819 <a name="l01795"></a>01795             BOOST_UBLAS_CHECK (rank == 0 || it22 == it22_end || it22.index1 () == i, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ())
1820 <a name="l01796"></a>01796             j = (std::min) (it12 != it12_end ? it12.index2 () : size2 (),
1821 <a name="l01797"></a>01797                           it22 != it22_end ? it22.index2 () : size2 ());
1822 <a name="l01798"></a>01798 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
1823 <a name="l01799"></a>01799 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, i, j);
1824 <a name="l01800"></a>01800 <span class="preprocessor">#else</span>
1825 <a name="l01801"></a>01801 <span class="preprocessor"></span>            <span class="keywordflow">return</span> const_iterator2 (*<span class="keyword">this</span>, i, j, it12, it12_end, it22, it22_end);
1826 <a name="l01802"></a>01802 <span class="preprocessor">#endif</span>
1827 <a name="l01803"></a>01803 <span class="preprocessor"></span>        }
1828 <a name="l01804"></a>01804 
1829 <a name="l01805"></a>01805         <span class="comment">// Iterators enhance the iterators of the referenced expression</span>
1830 <a name="l01806"></a>01806         <span class="comment">// with the binary functor.</span>
1831 <a name="l01807"></a>01807 
1832 <a name="l01808"></a>01808 <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
1833 <a name="l01809"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">01809</a> <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a>:
1834 <a name="l01810"></a>01810             <span class="keyword">public</span> container_const_reference&lt;matrix_binary&gt;,
1835 <a name="l01811"></a>01811             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename iterator_restrict_traits&lt;typename E1::const_iterator1::iterator_category,
1836 <a name="l01812"></a>01812                                                                           typename E2::const_iterator1::iterator_category&gt;::iterator_category&gt;::template
1837 <a name="l01813"></a>01813                 iterator_base&lt;const_iterator1, value_type&gt;::type {
1838 <a name="l01814"></a>01814         <span class="keyword">public</span>:
1839 <a name="l01815"></a>01815             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> E1::const_iterator1::iterator_category,
1840 <a name="l01816"></a>01816                                                       <span class="keyword">typename</span> E2::const_iterator1::iterator_category&gt;::iterator_category iterator_category;
1841 <a name="l01817"></a>01817             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary::difference_type difference_type;
1842 <a name="l01818"></a>01818             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary::value_type value_type;
1843 <a name="l01819"></a>01819             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary::const_reference reference;
1844 <a name="l01820"></a>01820             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary::const_pointer pointer;
1845 <a name="l01821"></a>01821 
1846 <a name="l01822"></a>01822             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">dual_iterator_type</a>;
1847 <a name="l01823"></a>01823             <span class="keyword">typedef</span> const_reverse_iterator2 dual_reverse_iterator_type;
1848 <a name="l01824"></a>01824 
1849 <a name="l01825"></a>01825             <span class="comment">// Construction and destruction</span>
1850 <a name="l01826"></a>01826             BOOST_UBLAS_INLINE
1851 <a name="l01827"></a>01827             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a> ():
1852 <a name="l01828"></a>01828                 container_const_reference&lt;self_type&gt; (), i_ (), j_ (), it1_ (), it1_end_ (), it2_ (), it2_end_ () {}
1853 <a name="l01829"></a>01829             BOOST_UBLAS_INLINE
1854 <a name="l01830"></a>01830             const_iterator1 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a> &amp;mb, size_type i, size_type j,
1855 <a name="l01831"></a>01831                              <span class="keyword">const</span> const_iterator11_type &amp;it1, <span class="keyword">const</span> const_iterator11_type &amp;it1_end,
1856 <a name="l01832"></a>01832                              <span class="keyword">const</span> const_iterator21_type &amp;it2, <span class="keyword">const</span> const_iterator21_type &amp;it2_end):
1857 <a name="l01833"></a>01833                 container_const_reference&lt;self_type&gt; (mb), i_ (i), j_ (j), it1_ (it1), it1_end_ (it1_end), it2_ (it2), it2_end_ (it2_end) {}
1858 <a name="l01834"></a>01834 
1859 <a name="l01835"></a>01835         <span class="keyword">private</span>:
1860 <a name="l01836"></a>01836             <span class="comment">// Dense specializations</span>
1861 <a name="l01837"></a>01837             BOOST_UBLAS_INLINE
1862 <a name="l01838"></a>01838             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>) {
1863 <a name="l01839"></a>01839                 ++ i_; ++ it1_; ++ it2_;
1864 <a name="l01840"></a>01840             }
1865 <a name="l01841"></a>01841             BOOST_UBLAS_INLINE
1866 <a name="l01842"></a>01842             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>) {
1867 <a name="l01843"></a>01843                 -- i_; -- it1_; -- it2_;
1868 <a name="l01844"></a>01844             }
1869 <a name="l01845"></a>01845             BOOST_UBLAS_INLINE
1870 <a name="l01846"></a>01846             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>, difference_type n) {
1871 <a name="l01847"></a>01847                  i_ += n; it1_ += n; it2_ += n;
1872 <a name="l01848"></a>01848             }
1873 <a name="l01849"></a>01849             BOOST_UBLAS_INLINE
1874 <a name="l01850"></a>01850             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>, difference_type n) {
1875 <a name="l01851"></a>01851                 i_ -= n; it1_ -= n; it2_ -= n;
1876 <a name="l01852"></a>01852             }
1877 <a name="l01853"></a>01853             BOOST_UBLAS_INLINE
1878 <a name="l01854"></a>01854             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
1879 <a name="l01855"></a>01855                 <span class="keywordflow">return</span> functor_type::apply (*it1_, *it2_);
1880 <a name="l01856"></a>01856             }
1881 <a name="l01857"></a>01857 
1882 <a name="l01858"></a>01858             <span class="comment">// Packed specializations</span>
1883 <a name="l01859"></a>01859             BOOST_UBLAS_INLINE
1884 <a name="l01860"></a>01860             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>) {
1885 <a name="l01861"></a>01861                 <span class="keywordflow">if</span> (it1_ != it1_end_)
1886 <a name="l01862"></a>01862                     <span class="keywordflow">if</span> (it1_.index1 () &lt;= i_)
1887 <a name="l01863"></a>01863                         ++ it1_;
1888 <a name="l01864"></a>01864                 <span class="keywordflow">if</span> (it2_ != it2_end_)
1889 <a name="l01865"></a>01865                     <span class="keywordflow">if</span> (it2_.index1 () &lt;= i_)
1890 <a name="l01866"></a>01866                         ++ it2_;
1891 <a name="l01867"></a>01867                 ++ i_;
1892 <a name="l01868"></a>01868             }
1893 <a name="l01869"></a>01869             BOOST_UBLAS_INLINE
1894 <a name="l01870"></a>01870             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>) {
1895 <a name="l01871"></a>01871                 <span class="keywordflow">if</span> (it1_ != it1_end_)
1896 <a name="l01872"></a>01872                     <span class="keywordflow">if</span> (i_ &lt;= it1_.index1 ())
1897 <a name="l01873"></a>01873                         -- it1_;
1898 <a name="l01874"></a>01874                 <span class="keywordflow">if</span> (it2_ != it2_end_)
1899 <a name="l01875"></a>01875                     <span class="keywordflow">if</span> (i_ &lt;= it2_.index1 ())
1900 <a name="l01876"></a>01876                         -- it2_;
1901 <a name="l01877"></a>01877                 -- i_;
1902 <a name="l01878"></a>01878             }
1903 <a name="l01879"></a>01879             BOOST_UBLAS_INLINE
1904 <a name="l01880"></a>01880             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>, difference_type n) {
1905 <a name="l01881"></a>01881                 <span class="keywordflow">while</span> (n &gt; 0) {
1906 <a name="l01882"></a>01882                     increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
1907 <a name="l01883"></a>01883                     --n;
1908 <a name="l01884"></a>01884                 }
1909 <a name="l01885"></a>01885                 <span class="keywordflow">while</span> (n &lt; 0) {
1910 <a name="l01886"></a>01886                     decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
1911 <a name="l01887"></a>01887                     ++n;
1912 <a name="l01888"></a>01888                 }
1913 <a name="l01889"></a>01889             }
1914 <a name="l01890"></a>01890             BOOST_UBLAS_INLINE
1915 <a name="l01891"></a>01891             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>, difference_type n) {
1916 <a name="l01892"></a>01892                 <span class="keywordflow">while</span> (n &gt; 0) {
1917 <a name="l01893"></a>01893                     decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
1918 <a name="l01894"></a>01894                     --n;
1919 <a name="l01895"></a>01895                 }
1920 <a name="l01896"></a>01896                 <span class="keywordflow">while</span> (n &lt; 0) {
1921 <a name="l01897"></a>01897                     increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
1922 <a name="l01898"></a>01898                     ++n;
1923 <a name="l01899"></a>01899                 }
1924 <a name="l01900"></a>01900             }
1925 <a name="l01901"></a>01901             BOOST_UBLAS_INLINE
1926 <a name="l01902"></a>01902             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
1927 <a name="l01903"></a>01903                 value_type t1 = value_type<span class="comment">/*zero*/</span>();
1928 <a name="l01904"></a>01904                 <span class="keywordflow">if</span> (it1_ != it1_end_) {
1929 <a name="l01905"></a>01905                     BOOST_UBLAS_CHECK (it1_.index2 () == j_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ());
1930 <a name="l01906"></a>01906                     <span class="keywordflow">if</span> (it1_.index1 () == i_)
1931 <a name="l01907"></a>01907                         t1 = *it1_;
1932 <a name="l01908"></a>01908                 }
1933 <a name="l01909"></a>01909                 value_type t2 = value_type<span class="comment">/*zero*/</span>();
1934 <a name="l01910"></a>01910                 <span class="keywordflow">if</span> (it2_ != it2_end_) {
1935 <a name="l01911"></a>01911                     BOOST_UBLAS_CHECK (it2_.index2 () == j_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ());
1936 <a name="l01912"></a>01912                     <span class="keywordflow">if</span> (it2_.index1 () == i_)
1937 <a name="l01913"></a>01913                         t2 = *it2_;
1938 <a name="l01914"></a>01914                 }
1939 <a name="l01915"></a>01915                 <span class="keywordflow">return</span> functor_type::apply (t1, t2);
1940 <a name="l01916"></a>01916             }
1941 <a name="l01917"></a>01917 
1942 <a name="l01918"></a>01918             <span class="comment">// Sparse specializations</span>
1943 <a name="l01919"></a>01919             BOOST_UBLAS_INLINE
1944 <a name="l01920"></a>01920             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>) {
1945 <a name="l01921"></a>01921                 size_type index1 = (*this) ().size1 ();
1946 <a name="l01922"></a>01922                 <span class="keywordflow">if</span> (it1_ != it1_end_) {
1947 <a name="l01923"></a>01923                     <span class="keywordflow">if</span> (it1_.index1 () &lt;= i_)
1948 <a name="l01924"></a>01924                         ++ it1_;
1949 <a name="l01925"></a>01925                     <span class="keywordflow">if</span> (it1_ != it1_end_)
1950 <a name="l01926"></a>01926                         index1 = it1_.index1 ();
1951 <a name="l01927"></a>01927                 }
1952 <a name="l01928"></a>01928                 size_type index2 = (*this) ().size1 ();
1953 <a name="l01929"></a>01929                 <span class="keywordflow">if</span> (it2_ != it2_end_)
1954 <a name="l01930"></a>01930                     <span class="keywordflow">if</span> (it2_.index1 () &lt;= i_)
1955 <a name="l01931"></a>01931                         ++ it2_;
1956 <a name="l01932"></a>01932                     <span class="keywordflow">if</span> (it2_ != it2_end_) {
1957 <a name="l01933"></a>01933                         index2 = it2_.index1 ();
1958 <a name="l01934"></a>01934                 }
1959 <a name="l01935"></a>01935                 i_ = (std::min) (index1, index2);
1960 <a name="l01936"></a>01936             }
1961 <a name="l01937"></a>01937             BOOST_UBLAS_INLINE
1962 <a name="l01938"></a>01938             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>) {
1963 <a name="l01939"></a>01939                 size_type index1 = (*this) ().size1 ();
1964 <a name="l01940"></a>01940                 <span class="keywordflow">if</span> (it1_ != it1_end_) {
1965 <a name="l01941"></a>01941                     <span class="keywordflow">if</span> (i_ &lt;= it1_.index1 ())
1966 <a name="l01942"></a>01942                         -- it1_;
1967 <a name="l01943"></a>01943                     <span class="keywordflow">if</span> (it1_ != it1_end_)
1968 <a name="l01944"></a>01944                         index1 = it1_.index1 ();
1969 <a name="l01945"></a>01945                 }
1970 <a name="l01946"></a>01946                 size_type index2 = (*this) ().size1 ();
1971 <a name="l01947"></a>01947                 <span class="keywordflow">if</span> (it2_ != it2_end_) {
1972 <a name="l01948"></a>01948                     <span class="keywordflow">if</span> (i_ &lt;= it2_.index1 ())
1973 <a name="l01949"></a>01949                         -- it2_;
1974 <a name="l01950"></a>01950                     <span class="keywordflow">if</span> (it2_ != it2_end_)
1975 <a name="l01951"></a>01951                         index2 = it2_.index1 ();
1976 <a name="l01952"></a>01952                 }
1977 <a name="l01953"></a>01953                 i_ = (std::max) (index1, index2);
1978 <a name="l01954"></a>01954             }
1979 <a name="l01955"></a>01955             BOOST_UBLAS_INLINE
1980 <a name="l01956"></a>01956             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>, difference_type n) {
1981 <a name="l01957"></a>01957                 <span class="keywordflow">while</span> (n &gt; 0) {
1982 <a name="l01958"></a>01958                     increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
1983 <a name="l01959"></a>01959                     --n;
1984 <a name="l01960"></a>01960                 }
1985 <a name="l01961"></a>01961                 <span class="keywordflow">while</span> (n &lt; 0) {
1986 <a name="l01962"></a>01962                     decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
1987 <a name="l01963"></a>01963                     ++n;
1988 <a name="l01964"></a>01964                 }
1989 <a name="l01965"></a>01965             }
1990 <a name="l01966"></a>01966             BOOST_UBLAS_INLINE
1991 <a name="l01967"></a>01967             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>, difference_type n) {
1992 <a name="l01968"></a>01968                 <span class="keywordflow">while</span> (n &gt; 0) {
1993 <a name="l01969"></a>01969                     decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
1994 <a name="l01970"></a>01970                     --n;
1995 <a name="l01971"></a>01971                 }
1996 <a name="l01972"></a>01972                 <span class="keywordflow">while</span> (n &lt; 0) {
1997 <a name="l01973"></a>01973                     increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
1998 <a name="l01974"></a>01974                     ++n;
1999 <a name="l01975"></a>01975                 }
2000 <a name="l01976"></a>01976             }
2001 <a name="l01977"></a>01977             BOOST_UBLAS_INLINE
2002 <a name="l01978"></a>01978             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>)<span class="keyword"> const </span>{
2003 <a name="l01979"></a>01979                 value_type t1 = value_type<span class="comment">/*zero*/</span>();
2004 <a name="l01980"></a>01980                 <span class="keywordflow">if</span> (it1_ != it1_end_) {
2005 <a name="l01981"></a>01981                     BOOST_UBLAS_CHECK (it1_.index2 () == j_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ());
2006 <a name="l01982"></a>01982                     <span class="keywordflow">if</span> (it1_.index1 () == i_)
2007 <a name="l01983"></a>01983                         t1 = *it1_;
2008 <a name="l01984"></a>01984                 }
2009 <a name="l01985"></a>01985                 value_type t2 = value_type<span class="comment">/*zero*/</span>();
2010 <a name="l01986"></a>01986                 <span class="keywordflow">if</span> (it2_ != it2_end_) {
2011 <a name="l01987"></a>01987                     BOOST_UBLAS_CHECK (it2_.index2 () == j_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ());
2012 <a name="l01988"></a>01988                     <span class="keywordflow">if</span> (it2_.index1 () == i_)
2013 <a name="l01989"></a>01989                         t2 = *it2_;
2014 <a name="l01990"></a>01990                 }
2015 <a name="l01991"></a>01991                 <span class="keywordflow">return</span> functor_type::apply (t1, t2);
2016 <a name="l01992"></a>01992             }
2017 <a name="l01993"></a>01993 
2018 <a name="l01994"></a>01994         <span class="keyword">public</span>:
2019 <a name="l01995"></a>01995             <span class="comment">// Arithmetic</span>
2020 <a name="l01996"></a>01996             BOOST_UBLAS_INLINE
2021 <a name="l01997"></a>01997             const_iterator1 &amp;operator ++ () {
2022 <a name="l01998"></a>01998                 increment (iterator_category ());
2023 <a name="l01999"></a>01999                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2024 <a name="l02000"></a>02000             }
2025 <a name="l02001"></a>02001             BOOST_UBLAS_INLINE
2026 <a name="l02002"></a>02002             const_iterator1 &amp;operator -- () {
2027 <a name="l02003"></a>02003                 decrement (iterator_category ());
2028 <a name="l02004"></a>02004                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2029 <a name="l02005"></a>02005             }
2030 <a name="l02006"></a>02006             BOOST_UBLAS_INLINE
2031 <a name="l02007"></a>02007             const_iterator1 &amp;operator += (difference_type n) {
2032 <a name="l02008"></a>02008                 increment (iterator_category (), n);
2033 <a name="l02009"></a>02009                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2034 <a name="l02010"></a>02010             }
2035 <a name="l02011"></a>02011             BOOST_UBLAS_INLINE
2036 <a name="l02012"></a>02012             const_iterator1 &amp;operator -= (difference_type n) {
2037 <a name="l02013"></a>02013                 decrement (iterator_category (), n);
2038 <a name="l02014"></a>02014                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2039 <a name="l02015"></a>02015             }
2040 <a name="l02016"></a>02016             BOOST_UBLAS_INLINE
2041 <a name="l02017"></a>02017             difference_type operator - (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
2042 <a name="l02018"></a>02018                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2043 <a name="l02019"></a>02019                 BOOST_UBLAS_CHECK (index2 () == it.index2 (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2044 <a name="l02020"></a>02020                 <span class="keywordflow">return</span> index1 () - it.index1 ();
2045 <a name="l02021"></a>02021             }
2046 <a name="l02022"></a>02022 
2047 <a name="l02023"></a>02023             <span class="comment">// Dereference</span>
2048 <a name="l02024"></a>02024             BOOST_UBLAS_INLINE
2049 <a name="l02025"></a>02025             const_reference operator * ()<span class="keyword"> const </span>{
2050 <a name="l02026"></a>02026                 <span class="keywordflow">return</span> dereference (iterator_category ());
2051 <a name="l02027"></a>02027             }
2052 <a name="l02028"></a>02028             BOOST_UBLAS_INLINE
2053 <a name="l02029"></a>02029             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
2054 <a name="l02030"></a>02030                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
2055 <a name="l02031"></a>02031             }
2056 <a name="l02032"></a>02032 
2057 <a name="l02033"></a>02033 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
2058 <a name="l02034"></a>02034 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
2059 <a name="l02035"></a>02035 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2060 <a name="l02036"></a>02036 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a>::
2061 <a name="l02037"></a>02037 <span class="preprocessor">#endif</span>
2062 <a name="l02038"></a>02038 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a> begin ()<span class="keyword"> const </span>{
2063 <a name="l02039"></a>02039                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), 0);
2064 <a name="l02040"></a>02040             }
2065 <a name="l02041"></a>02041             BOOST_UBLAS_INLINE
2066 <a name="l02042"></a>02042 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2067 <a name="l02043"></a>02043 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a>::
2068 <a name="l02044"></a>02044 <span class="preprocessor">#endif</span>
2069 <a name="l02045"></a>02045 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a> end ()<span class="keyword"> const </span>{
2070 <a name="l02046"></a>02046                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), (*this) ().size2 ());
2071 <a name="l02047"></a>02047             }
2072 <a name="l02048"></a>02048             BOOST_UBLAS_INLINE
2073 <a name="l02049"></a>02049 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2074 <a name="l02050"></a>02050 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a>::
2075 <a name="l02051"></a>02051 <span class="preprocessor">#endif</span>
2076 <a name="l02052"></a>02052 <span class="preprocessor"></span>            const_reverse_iterator2 rbegin ()<span class="keyword"> const </span>{
2077 <a name="l02053"></a>02053                 <span class="keywordflow">return</span> const_reverse_iterator2 (end ());
2078 <a name="l02054"></a>02054             }
2079 <a name="l02055"></a>02055             BOOST_UBLAS_INLINE
2080 <a name="l02056"></a>02056 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2081 <a name="l02057"></a>02057 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a>::
2082 <a name="l02058"></a>02058 <span class="preprocessor">#endif</span>
2083 <a name="l02059"></a>02059 <span class="preprocessor"></span>            const_reverse_iterator2 rend ()<span class="keyword"> const </span>{
2084 <a name="l02060"></a>02060                 <span class="keywordflow">return</span> const_reverse_iterator2 (begin ());
2085 <a name="l02061"></a>02061             }
2086 <a name="l02062"></a>02062 <span class="preprocessor">#endif</span>
2087 <a name="l02063"></a>02063 <span class="preprocessor"></span>
2088 <a name="l02064"></a>02064             <span class="comment">// Indices</span>
2089 <a name="l02065"></a>02065             BOOST_UBLAS_INLINE
2090 <a name="l02066"></a>02066             size_type index1 ()<span class="keyword"> const </span>{
2091 <a name="l02067"></a>02067                 <span class="keywordflow">return</span> i_;
2092 <a name="l02068"></a>02068             }
2093 <a name="l02069"></a>02069             BOOST_UBLAS_INLINE
2094 <a name="l02070"></a>02070             size_type index2 ()<span class="keyword"> const </span>{
2095 <a name="l02071"></a>02071                 <span class="comment">// if (it1_ != it1_end_ &amp;&amp; it2_ != it2_end_)</span>
2096 <a name="l02072"></a>02072                 <span class="comment">//    return BOOST_UBLAS_SAME (it1_.index2 (), it2_.index2 ());</span>
2097 <a name="l02073"></a>02073                 <span class="comment">// else</span>
2098 <a name="l02074"></a>02074                     <span class="keywordflow">return</span> j_;
2099 <a name="l02075"></a>02075             }
2100 <a name="l02076"></a>02076 
2101 <a name="l02077"></a>02077             <span class="comment">// Assignment</span>
2102 <a name="l02078"></a>02078             BOOST_UBLAS_INLINE
2103 <a name="l02079"></a>02079             const_iterator1 &amp;operator = (<span class="keyword">const</span> const_iterator1 &amp;it) {
2104 <a name="l02080"></a>02080                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
2105 <a name="l02081"></a>02081                 i_ = it.i_;
2106 <a name="l02082"></a>02082                 j_ = it.j_;
2107 <a name="l02083"></a>02083                 it1_ = it.it1_;
2108 <a name="l02084"></a>02084                 it1_end_ = it.it1_end_;
2109 <a name="l02085"></a>02085                 it2_ = it.it2_;
2110 <a name="l02086"></a>02086                 it2_end_ = it.it2_end_;
2111 <a name="l02087"></a>02087                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2112 <a name="l02088"></a>02088             }
2113 <a name="l02089"></a>02089 
2114 <a name="l02090"></a>02090             <span class="comment">// Comparison</span>
2115 <a name="l02091"></a>02091             BOOST_UBLAS_INLINE
2116 <a name="l02092"></a>02092             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
2117 <a name="l02093"></a>02093                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2118 <a name="l02094"></a>02094                 BOOST_UBLAS_CHECK (index2 () == it.index2 (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2119 <a name="l02095"></a>02095                 <span class="keywordflow">return</span> index1 () == it.index1 ();
2120 <a name="l02096"></a>02096             }
2121 <a name="l02097"></a>02097             BOOST_UBLAS_INLINE
2122 <a name="l02098"></a>02098             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
2123 <a name="l02099"></a>02099                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2124 <a name="l02100"></a>02100                 BOOST_UBLAS_CHECK (index2 () == it.index2 (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2125 <a name="l02101"></a>02101                 <span class="keywordflow">return</span> index1 () &lt; it.index1 ();
2126 <a name="l02102"></a>02102             }
2127 <a name="l02103"></a>02103 
2128 <a name="l02104"></a>02104         <span class="keyword">private</span>:
2129 <a name="l02105"></a>02105             size_type i_;
2130 <a name="l02106"></a>02106             size_type j_;
2131 <a name="l02107"></a>02107             const_iterator11_type it1_;
2132 <a name="l02108"></a>02108             const_iterator11_type it1_end_;
2133 <a name="l02109"></a>02109             const_iterator21_type it2_;
2134 <a name="l02110"></a>02110             const_iterator21_type it2_end_;
2135 <a name="l02111"></a>02111         };
2136 <a name="l02112"></a>02112 <span class="preprocessor">#endif</span>
2137 <a name="l02113"></a>02113 <span class="preprocessor"></span>
2138 <a name="l02114"></a>02114         BOOST_UBLAS_INLINE
2139 <a name="l02115"></a>02115         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a> begin1 ()<span class="keyword"> const </span>{
2140 <a name="l02116"></a>02116             <span class="keywordflow">return</span> find1 (0, 0, 0);
2141 <a name="l02117"></a>02117         }
2142 <a name="l02118"></a>02118         BOOST_UBLAS_INLINE
2143 <a name="l02119"></a>02119         const_iterator1 end1 ()<span class="keyword"> const </span>{
2144 <a name="l02120"></a>02120             <span class="keywordflow">return</span> find1 (0, size1 (), 0);
2145 <a name="l02121"></a>02121         }
2146 <a name="l02122"></a>02122 
2147 <a name="l02123"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">02123</a> <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
2148 <a name="l02124"></a>02124 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a>:
2149 <a name="l02125"></a>02125             <span class="keyword">public</span> container_const_reference&lt;matrix_binary&gt;,
2150 <a name="l02126"></a>02126             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename iterator_restrict_traits&lt;typename E1::const_iterator2::iterator_category,
2151 <a name="l02127"></a>02127                                                                           typename E2::const_iterator2::iterator_category&gt;::iterator_category&gt;::template
2152 <a name="l02128"></a>02128                 iterator_base&lt;const_iterator2, value_type&gt;::type {
2153 <a name="l02129"></a>02129         <span class="keyword">public</span>:
2154 <a name="l02130"></a>02130             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> E1::const_iterator2::iterator_category,
2155 <a name="l02131"></a>02131                                                       <span class="keyword">typename</span> E2::const_iterator2::iterator_category&gt;::iterator_category iterator_category;
2156 <a name="l02132"></a>02132             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary::difference_type difference_type;
2157 <a name="l02133"></a>02133             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary::value_type value_type;
2158 <a name="l02134"></a>02134             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary::const_reference reference;
2159 <a name="l02135"></a>02135             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary::const_pointer pointer;
2160 <a name="l02136"></a>02136 
2161 <a name="l02137"></a>02137             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">dual_iterator_type</a>;
2162 <a name="l02138"></a>02138             <span class="keyword">typedef</span> const_reverse_iterator1 dual_reverse_iterator_type;
2163 <a name="l02139"></a>02139 
2164 <a name="l02140"></a>02140             <span class="comment">// Construction and destruction</span>
2165 <a name="l02141"></a>02141             BOOST_UBLAS_INLINE
2166 <a name="l02142"></a>02142             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a> ():
2167 <a name="l02143"></a>02143                 container_const_reference&lt;self_type&gt; (), i_ (), j_ (), it1_ (), it1_end_ (), it2_ (), it2_end_ () {}
2168 <a name="l02144"></a>02144             BOOST_UBLAS_INLINE
2169 <a name="l02145"></a>02145             const_iterator2 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a> &amp;mb, size_type i, size_type j,
2170 <a name="l02146"></a>02146                              <span class="keyword">const</span> const_iterator12_type &amp;it1, <span class="keyword">const</span> const_iterator12_type &amp;it1_end,
2171 <a name="l02147"></a>02147                              <span class="keyword">const</span> const_iterator22_type &amp;it2, <span class="keyword">const</span> const_iterator22_type &amp;it2_end):
2172 <a name="l02148"></a>02148                 container_const_reference&lt;self_type&gt; (mb), i_ (i), j_ (j), it1_ (it1), it1_end_ (it1_end), it2_ (it2), it2_end_ (it2_end) {}
2173 <a name="l02149"></a>02149 
2174 <a name="l02150"></a>02150         <span class="keyword">private</span>:
2175 <a name="l02151"></a>02151             <span class="comment">// Dense access specializations</span>
2176 <a name="l02152"></a>02152             BOOST_UBLAS_INLINE
2177 <a name="l02153"></a>02153             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>) {
2178 <a name="l02154"></a>02154                 ++ j_; ++ it1_; ++ it2_;
2179 <a name="l02155"></a>02155             }
2180 <a name="l02156"></a>02156             BOOST_UBLAS_INLINE
2181 <a name="l02157"></a>02157             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>) {
2182 <a name="l02158"></a>02158                 -- j_; -- it1_; -- it2_;
2183 <a name="l02159"></a>02159             }
2184 <a name="l02160"></a>02160             BOOST_UBLAS_INLINE
2185 <a name="l02161"></a>02161             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>, difference_type n) {
2186 <a name="l02162"></a>02162                 j_ += n; it1_ += n; it2_ += n;
2187 <a name="l02163"></a>02163             }
2188 <a name="l02164"></a>02164             BOOST_UBLAS_INLINE
2189 <a name="l02165"></a>02165             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>, difference_type n) {
2190 <a name="l02166"></a>02166                 j_ -= n; it1_ -= n; it2_ -= n;
2191 <a name="l02167"></a>02167             }
2192 <a name="l02168"></a>02168             BOOST_UBLAS_INLINE
2193 <a name="l02169"></a>02169             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
2194 <a name="l02170"></a>02170                 <span class="keywordflow">return</span> functor_type::apply (*it1_, *it2_);
2195 <a name="l02171"></a>02171             }
2196 <a name="l02172"></a>02172 
2197 <a name="l02173"></a>02173             <span class="comment">// Packed specializations</span>
2198 <a name="l02174"></a>02174             BOOST_UBLAS_INLINE
2199 <a name="l02175"></a>02175             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>) {
2200 <a name="l02176"></a>02176                 <span class="keywordflow">if</span> (it1_ != it1_end_)
2201 <a name="l02177"></a>02177                     <span class="keywordflow">if</span> (it1_.index2 () &lt;= j_)
2202 <a name="l02178"></a>02178                         ++ it1_;
2203 <a name="l02179"></a>02179                 <span class="keywordflow">if</span> (it2_ != it2_end_)
2204 <a name="l02180"></a>02180                     <span class="keywordflow">if</span> (it2_.index2 () &lt;= j_)
2205 <a name="l02181"></a>02181                         ++ it2_;
2206 <a name="l02182"></a>02182                 ++ j_;
2207 <a name="l02183"></a>02183             }
2208 <a name="l02184"></a>02184             BOOST_UBLAS_INLINE
2209 <a name="l02185"></a>02185             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>) {
2210 <a name="l02186"></a>02186                 <span class="keywordflow">if</span> (it1_ != it1_end_)
2211 <a name="l02187"></a>02187                     <span class="keywordflow">if</span> (j_ &lt;= it1_.index2 ())
2212 <a name="l02188"></a>02188                         -- it1_;
2213 <a name="l02189"></a>02189                 <span class="keywordflow">if</span> (it2_ != it2_end_)
2214 <a name="l02190"></a>02190                     <span class="keywordflow">if</span> (j_ &lt;= it2_.index2 ())
2215 <a name="l02191"></a>02191                         -- it2_;
2216 <a name="l02192"></a>02192                 -- j_;
2217 <a name="l02193"></a>02193             }
2218 <a name="l02194"></a>02194             BOOST_UBLAS_INLINE
2219 <a name="l02195"></a>02195             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>, difference_type n) {
2220 <a name="l02196"></a>02196                 <span class="keywordflow">while</span> (n &gt; 0) {
2221 <a name="l02197"></a>02197                     increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
2222 <a name="l02198"></a>02198                     --n;
2223 <a name="l02199"></a>02199                 }
2224 <a name="l02200"></a>02200                 <span class="keywordflow">while</span> (n &lt; 0) {
2225 <a name="l02201"></a>02201                     decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
2226 <a name="l02202"></a>02202                     ++n;
2227 <a name="l02203"></a>02203                 }
2228 <a name="l02204"></a>02204             }
2229 <a name="l02205"></a>02205             BOOST_UBLAS_INLINE
2230 <a name="l02206"></a>02206             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>, difference_type n) {
2231 <a name="l02207"></a>02207                 <span class="keywordflow">while</span> (n &gt; 0) {
2232 <a name="l02208"></a>02208                     decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
2233 <a name="l02209"></a>02209                     --n;
2234 <a name="l02210"></a>02210                 }
2235 <a name="l02211"></a>02211                 <span class="keywordflow">while</span> (n &lt; 0) {
2236 <a name="l02212"></a>02212                     increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
2237 <a name="l02213"></a>02213                     ++n;
2238 <a name="l02214"></a>02214                 }
2239 <a name="l02215"></a>02215             }
2240 <a name="l02216"></a>02216             BOOST_UBLAS_INLINE
2241 <a name="l02217"></a>02217             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
2242 <a name="l02218"></a>02218                 value_type t1 = value_type<span class="comment">/*zero*/</span>();
2243 <a name="l02219"></a>02219                 <span class="keywordflow">if</span> (it1_ != it1_end_) {
2244 <a name="l02220"></a>02220                     BOOST_UBLAS_CHECK (it1_.index1 () == i_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ());
2245 <a name="l02221"></a>02221                     <span class="keywordflow">if</span> (it1_.index2 () == j_)
2246 <a name="l02222"></a>02222                         t1 = *it1_;
2247 <a name="l02223"></a>02223                 }
2248 <a name="l02224"></a>02224                 value_type t2 = value_type<span class="comment">/*zero*/</span>();
2249 <a name="l02225"></a>02225                 <span class="keywordflow">if</span> (it2_ != it2_end_) {
2250 <a name="l02226"></a>02226                     BOOST_UBLAS_CHECK (it2_.index1 () == i_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ());
2251 <a name="l02227"></a>02227                     <span class="keywordflow">if</span> (it2_.index2 () == j_)
2252 <a name="l02228"></a>02228                         t2 = *it2_;
2253 <a name="l02229"></a>02229                 }
2254 <a name="l02230"></a>02230                 <span class="keywordflow">return</span> functor_type::apply (t1, t2);
2255 <a name="l02231"></a>02231             }
2256 <a name="l02232"></a>02232 
2257 <a name="l02233"></a>02233             <span class="comment">// Sparse specializations</span>
2258 <a name="l02234"></a>02234             BOOST_UBLAS_INLINE
2259 <a name="l02235"></a>02235             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>) {
2260 <a name="l02236"></a>02236                 size_type index1 = (*this) ().size2 ();
2261 <a name="l02237"></a>02237                 <span class="keywordflow">if</span> (it1_ != it1_end_) {
2262 <a name="l02238"></a>02238                     <span class="keywordflow">if</span> (it1_.index2 () &lt;= j_)
2263 <a name="l02239"></a>02239                         ++ it1_;
2264 <a name="l02240"></a>02240                     <span class="keywordflow">if</span> (it1_ != it1_end_)
2265 <a name="l02241"></a>02241                         index1 = it1_.index2 ();
2266 <a name="l02242"></a>02242                 }
2267 <a name="l02243"></a>02243                 size_type index2 = (*this) ().size2 ();
2268 <a name="l02244"></a>02244                 <span class="keywordflow">if</span> (it2_ != it2_end_) {
2269 <a name="l02245"></a>02245                     <span class="keywordflow">if</span> (it2_.index2 () &lt;= j_)
2270 <a name="l02246"></a>02246                         ++ it2_;
2271 <a name="l02247"></a>02247                     <span class="keywordflow">if</span> (it2_ != it2_end_)
2272 <a name="l02248"></a>02248                         index2 = it2_.index2 ();
2273 <a name="l02249"></a>02249                 }
2274 <a name="l02250"></a>02250                 j_ = (std::min) (index1, index2);
2275 <a name="l02251"></a>02251             }
2276 <a name="l02252"></a>02252             BOOST_UBLAS_INLINE
2277 <a name="l02253"></a>02253             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>) {
2278 <a name="l02254"></a>02254                 size_type index1 = (*this) ().size2 ();
2279 <a name="l02255"></a>02255                 <span class="keywordflow">if</span> (it1_ != it1_end_) {
2280 <a name="l02256"></a>02256                     <span class="keywordflow">if</span> (j_ &lt;= it1_.index2 ())
2281 <a name="l02257"></a>02257                         -- it1_;
2282 <a name="l02258"></a>02258                     <span class="keywordflow">if</span> (it1_ != it1_end_)
2283 <a name="l02259"></a>02259                         index1 = it1_.index2 ();
2284 <a name="l02260"></a>02260                 }
2285 <a name="l02261"></a>02261                 size_type index2 = (*this) ().size2 ();
2286 <a name="l02262"></a>02262                 <span class="keywordflow">if</span> (it2_ != it2_end_) {
2287 <a name="l02263"></a>02263                     <span class="keywordflow">if</span> (j_ &lt;= it2_.index2 ())
2288 <a name="l02264"></a>02264                         -- it2_;
2289 <a name="l02265"></a>02265                     <span class="keywordflow">if</span> (it2_ != it2_end_)
2290 <a name="l02266"></a>02266                         index2 = it2_.index2 ();
2291 <a name="l02267"></a>02267                 }
2292 <a name="l02268"></a>02268                 j_ = (std::max) (index1, index2);
2293 <a name="l02269"></a>02269             }
2294 <a name="l02270"></a>02270             BOOST_UBLAS_INLINE
2295 <a name="l02271"></a>02271             <span class="keywordtype">void</span> increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>, difference_type n) {
2296 <a name="l02272"></a>02272                 <span class="keywordflow">while</span> (n &gt; 0) {
2297 <a name="l02273"></a>02273                     increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
2298 <a name="l02274"></a>02274                     --n;
2299 <a name="l02275"></a>02275                 }
2300 <a name="l02276"></a>02276                 <span class="keywordflow">while</span> (n &lt; 0) {
2301 <a name="l02277"></a>02277                     decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
2302 <a name="l02278"></a>02278                     ++n;
2303 <a name="l02279"></a>02279                 }
2304 <a name="l02280"></a>02280             }
2305 <a name="l02281"></a>02281             BOOST_UBLAS_INLINE
2306 <a name="l02282"></a>02282             <span class="keywordtype">void</span> decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>, difference_type n) {
2307 <a name="l02283"></a>02283                 <span class="keywordflow">while</span> (n &gt; 0) {
2308 <a name="l02284"></a>02284                     decrement (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
2309 <a name="l02285"></a>02285                     --n;
2310 <a name="l02286"></a>02286                 }
2311 <a name="l02287"></a>02287                 <span class="keywordflow">while</span> (n &lt; 0) {
2312 <a name="l02288"></a>02288                     increment (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
2313 <a name="l02289"></a>02289                     ++n;
2314 <a name="l02290"></a>02290                 }
2315 <a name="l02291"></a>02291             }
2316 <a name="l02292"></a>02292             BOOST_UBLAS_INLINE
2317 <a name="l02293"></a>02293             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>)<span class="keyword"> const </span>{
2318 <a name="l02294"></a>02294                 value_type t1 = value_type<span class="comment">/*zero*/</span>();
2319 <a name="l02295"></a>02295                 <span class="keywordflow">if</span> (it1_ != it1_end_) {
2320 <a name="l02296"></a>02296                     BOOST_UBLAS_CHECK (it1_.index1 () == i_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ());
2321 <a name="l02297"></a>02297                     <span class="keywordflow">if</span> (it1_.index2 () == j_)
2322 <a name="l02298"></a>02298                         t1 = *it1_;
2323 <a name="l02299"></a>02299                 }
2324 <a name="l02300"></a>02300                 value_type t2 = value_type<span class="comment">/*zero*/</span>();
2325 <a name="l02301"></a>02301                 <span class="keywordflow">if</span> (it2_ != it2_end_) {
2326 <a name="l02302"></a>02302                     BOOST_UBLAS_CHECK (it2_.index1 () == i_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1internal__logic.html" title="Expception raised when some interal errors occurs like computations errors, zeros...">internal_logic</a> ());
2327 <a name="l02303"></a>02303                     <span class="keywordflow">if</span> (it2_.index2 () == j_)
2328 <a name="l02304"></a>02304                         t2 = *it2_;
2329 <a name="l02305"></a>02305                 }
2330 <a name="l02306"></a>02306                 <span class="keywordflow">return</span> functor_type::apply (t1, t2);
2331 <a name="l02307"></a>02307             }
2332 <a name="l02308"></a>02308 
2333 <a name="l02309"></a>02309         <span class="keyword">public</span>:
2334 <a name="l02310"></a>02310             <span class="comment">// Arithmetic</span>
2335 <a name="l02311"></a>02311             BOOST_UBLAS_INLINE
2336 <a name="l02312"></a>02312             const_iterator2 &amp;operator ++ () {
2337 <a name="l02313"></a>02313                 increment (iterator_category ());
2338 <a name="l02314"></a>02314                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2339 <a name="l02315"></a>02315             }
2340 <a name="l02316"></a>02316             BOOST_UBLAS_INLINE
2341 <a name="l02317"></a>02317             const_iterator2 &amp;operator -- () {
2342 <a name="l02318"></a>02318                 decrement (iterator_category ());
2343 <a name="l02319"></a>02319                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2344 <a name="l02320"></a>02320             }
2345 <a name="l02321"></a>02321             BOOST_UBLAS_INLINE
2346 <a name="l02322"></a>02322             const_iterator2 &amp;operator += (difference_type n) {
2347 <a name="l02323"></a>02323                 increment (iterator_category (), n);
2348 <a name="l02324"></a>02324                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2349 <a name="l02325"></a>02325             }
2350 <a name="l02326"></a>02326             BOOST_UBLAS_INLINE
2351 <a name="l02327"></a>02327             const_iterator2 &amp;operator -= (difference_type n) {
2352 <a name="l02328"></a>02328                 decrement (iterator_category (), n);
2353 <a name="l02329"></a>02329                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2354 <a name="l02330"></a>02330             }
2355 <a name="l02331"></a>02331             BOOST_UBLAS_INLINE
2356 <a name="l02332"></a>02332             difference_type operator - (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
2357 <a name="l02333"></a>02333                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2358 <a name="l02334"></a>02334                 BOOST_UBLAS_CHECK (index1 () == it.index1 (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2359 <a name="l02335"></a>02335                 <span class="keywordflow">return</span> index2 () - it.index2 ();
2360 <a name="l02336"></a>02336             }
2361 <a name="l02337"></a>02337 
2362 <a name="l02338"></a>02338             <span class="comment">// Dereference</span>
2363 <a name="l02339"></a>02339             BOOST_UBLAS_INLINE
2364 <a name="l02340"></a>02340             const_reference operator * ()<span class="keyword"> const </span>{
2365 <a name="l02341"></a>02341                 <span class="keywordflow">return</span> dereference (iterator_category ());
2366 <a name="l02342"></a>02342             }
2367 <a name="l02343"></a>02343             BOOST_UBLAS_INLINE
2368 <a name="l02344"></a>02344             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
2369 <a name="l02345"></a>02345                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
2370 <a name="l02346"></a>02346             }
2371 <a name="l02347"></a>02347 
2372 <a name="l02348"></a>02348 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
2373 <a name="l02349"></a>02349 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
2374 <a name="l02350"></a>02350 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2375 <a name="l02351"></a>02351 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a>::
2376 <a name="l02352"></a>02352 <span class="preprocessor">#endif</span>
2377 <a name="l02353"></a>02353 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a> begin ()<span class="keyword"> const </span>{
2378 <a name="l02354"></a>02354                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, 0, index2 ());
2379 <a name="l02355"></a>02355             }
2380 <a name="l02356"></a>02356             BOOST_UBLAS_INLINE
2381 <a name="l02357"></a>02357 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2382 <a name="l02358"></a>02358 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a>::
2383 <a name="l02359"></a>02359 <span class="preprocessor">#endif</span>
2384 <a name="l02360"></a>02360 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator1.html">const_iterator1</a> end ()<span class="keyword"> const </span>{
2385 <a name="l02361"></a>02361                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, (*<span class="keyword">this</span>) ().size1 (), index2 ());
2386 <a name="l02362"></a>02362             }
2387 <a name="l02363"></a>02363             BOOST_UBLAS_INLINE
2388 <a name="l02364"></a>02364 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2389 <a name="l02365"></a>02365 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a>::
2390 <a name="l02366"></a>02366 <span class="preprocessor">#endif</span>
2391 <a name="l02367"></a>02367 <span class="preprocessor"></span>            const_reverse_iterator1 rbegin ()<span class="keyword"> const </span>{
2392 <a name="l02368"></a>02368                 <span class="keywordflow">return</span> const_reverse_iterator1 (end ());
2393 <a name="l02369"></a>02369             }
2394 <a name="l02370"></a>02370             BOOST_UBLAS_INLINE
2395 <a name="l02371"></a>02371 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2396 <a name="l02372"></a>02372 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">self_type</a>::
2397 <a name="l02373"></a>02373 <span class="preprocessor">#endif</span>
2398 <a name="l02374"></a>02374 <span class="preprocessor"></span>            const_reverse_iterator1 rend ()<span class="keyword"> const </span>{
2399 <a name="l02375"></a>02375                 <span class="keywordflow">return</span> const_reverse_iterator1 (begin ());
2400 <a name="l02376"></a>02376             }
2401 <a name="l02377"></a>02377 <span class="preprocessor">#endif</span>
2402 <a name="l02378"></a>02378 <span class="preprocessor"></span>
2403 <a name="l02379"></a>02379             <span class="comment">// Indices</span>
2404 <a name="l02380"></a>02380             BOOST_UBLAS_INLINE
2405 <a name="l02381"></a>02381             size_type index1 ()<span class="keyword"> const </span>{
2406 <a name="l02382"></a>02382                 <span class="comment">// if (it1_ != it1_end_ &amp;&amp; it2_ != it2_end_)</span>
2407 <a name="l02383"></a>02383                 <span class="comment">//    return BOOST_UBLAS_SAME (it1_.index1 (), it2_.index1 ());</span>
2408 <a name="l02384"></a>02384                 <span class="comment">// else</span>
2409 <a name="l02385"></a>02385                     <span class="keywordflow">return</span> i_;
2410 <a name="l02386"></a>02386             }
2411 <a name="l02387"></a>02387             BOOST_UBLAS_INLINE
2412 <a name="l02388"></a>02388             size_type index2 ()<span class="keyword"> const </span>{
2413 <a name="l02389"></a>02389                 <span class="keywordflow">return</span> j_;
2414 <a name="l02390"></a>02390             }
2415 <a name="l02391"></a>02391 
2416 <a name="l02392"></a>02392             <span class="comment">// Assignment</span>
2417 <a name="l02393"></a>02393             BOOST_UBLAS_INLINE
2418 <a name="l02394"></a>02394             const_iterator2 &amp;operator = (<span class="keyword">const</span> const_iterator2 &amp;it) {
2419 <a name="l02395"></a>02395                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
2420 <a name="l02396"></a>02396                 i_ = it.i_;
2421 <a name="l02397"></a>02397                 j_ = it.j_;
2422 <a name="l02398"></a>02398                 it1_ = it.it1_;
2423 <a name="l02399"></a>02399                 it1_end_ = it.it1_end_;
2424 <a name="l02400"></a>02400                 it2_ = it.it2_;
2425 <a name="l02401"></a>02401                 it2_end_ = it.it2_end_;
2426 <a name="l02402"></a>02402                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2427 <a name="l02403"></a>02403             }
2428 <a name="l02404"></a>02404 
2429 <a name="l02405"></a>02405             <span class="comment">// Comparison</span>
2430 <a name="l02406"></a>02406             BOOST_UBLAS_INLINE
2431 <a name="l02407"></a>02407             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
2432 <a name="l02408"></a>02408                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2433 <a name="l02409"></a>02409                 BOOST_UBLAS_CHECK (index1 () == it.index1 (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2434 <a name="l02410"></a>02410                 <span class="keywordflow">return</span> index2 () == it.index2 ();
2435 <a name="l02411"></a>02411             }
2436 <a name="l02412"></a>02412             BOOST_UBLAS_INLINE
2437 <a name="l02413"></a>02413             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
2438 <a name="l02414"></a>02414                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2439 <a name="l02415"></a>02415                 BOOST_UBLAS_CHECK (index1 () == it.index1 (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2440 <a name="l02416"></a>02416                 <span class="keywordflow">return</span> index2 () &lt; it.index2 ();
2441 <a name="l02417"></a>02417             }
2442 <a name="l02418"></a>02418 
2443 <a name="l02419"></a>02419         <span class="keyword">private</span>:
2444 <a name="l02420"></a>02420             size_type i_;
2445 <a name="l02421"></a>02421             size_type j_;
2446 <a name="l02422"></a>02422             const_iterator12_type it1_;
2447 <a name="l02423"></a>02423             const_iterator12_type it1_end_;
2448 <a name="l02424"></a>02424             const_iterator22_type it2_;
2449 <a name="l02425"></a>02425             const_iterator22_type it2_end_;
2450 <a name="l02426"></a>02426         };
2451 <a name="l02427"></a>02427 <span class="preprocessor">#endif</span>
2452 <a name="l02428"></a>02428 <span class="preprocessor"></span>
2453 <a name="l02429"></a>02429         BOOST_UBLAS_INLINE
2454 <a name="l02430"></a>02430         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary_1_1const__iterator2.html">const_iterator2</a> begin2 ()<span class="keyword"> const </span>{
2455 <a name="l02431"></a>02431             <span class="keywordflow">return</span> find2 (0, 0, 0);
2456 <a name="l02432"></a>02432         }
2457 <a name="l02433"></a>02433         BOOST_UBLAS_INLINE
2458 <a name="l02434"></a>02434         const_iterator2 end2 ()<span class="keyword"> const </span>{
2459 <a name="l02435"></a>02435             <span class="keywordflow">return</span> find2 (0, 0, size2 ());
2460 <a name="l02436"></a>02436         }
2461 <a name="l02437"></a>02437 
2462 <a name="l02438"></a>02438         <span class="comment">// Reverse iterators</span>
2463 <a name="l02439"></a>02439 
2464 <a name="l02440"></a>02440         BOOST_UBLAS_INLINE
2465 <a name="l02441"></a>02441         const_reverse_iterator1 rbegin1 ()<span class="keyword"> const </span>{
2466 <a name="l02442"></a>02442             <span class="keywordflow">return</span> const_reverse_iterator1 (end1 ());
2467 <a name="l02443"></a>02443         }
2468 <a name="l02444"></a>02444         BOOST_UBLAS_INLINE
2469 <a name="l02445"></a>02445         const_reverse_iterator1 rend1 ()<span class="keyword"> const </span>{
2470 <a name="l02446"></a>02446             <span class="keywordflow">return</span> const_reverse_iterator1 (begin1 ());
2471 <a name="l02447"></a>02447         }
2472 <a name="l02448"></a>02448 
2473 <a name="l02449"></a>02449         BOOST_UBLAS_INLINE
2474 <a name="l02450"></a>02450         const_reverse_iterator2 rbegin2 ()<span class="keyword"> const </span>{
2475 <a name="l02451"></a>02451             <span class="keywordflow">return</span> const_reverse_iterator2 (end2 ());
2476 <a name="l02452"></a>02452         }
2477 <a name="l02453"></a>02453         BOOST_UBLAS_INLINE
2478 <a name="l02454"></a>02454         const_reverse_iterator2 rend2 ()<span class="keyword"> const </span>{
2479 <a name="l02455"></a>02455             <span class="keywordflow">return</span> const_reverse_iterator2 (begin2 ());
2480 <a name="l02456"></a>02456         }
2481 <a name="l02457"></a>02457 
2482 <a name="l02458"></a>02458     <span class="keyword">private</span>:
2483 <a name="l02459"></a>02459         expression1_closure_type e1_;
2484 <a name="l02460"></a>02460         expression2_closure_type e2_;
2485 <a name="l02461"></a>02461     };
2486 <a name="l02462"></a>02462 
2487 <a name="l02463"></a>02463     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2, <span class="keyword">class</span> F&gt;
2488 <a name="l02464"></a><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__traits.html">02464</a>     <span class="keyword">struct </span><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__traits.html">matrix_binary_traits</a> {
2489 <a name="l02465"></a>02465         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">matrix_binary&lt;E1, E2, F&gt;</a> expression_type;
2490 <a name="l02466"></a>02466 <span class="preprocessor">#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG</span>
2491 <a name="l02467"></a>02467 <span class="preprocessor"></span>        <span class="keyword">typedef</span> expression_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">result_type</a>; 
2492 <a name="l02468"></a>02468 <span class="preprocessor">#else</span>
2493 <a name="l02469"></a>02469 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::matrix_temporary_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary.html">result_type</a>;
2494 <a name="l02470"></a>02470 <span class="preprocessor">#endif</span>
2495 <a name="l02471"></a>02471 <span class="preprocessor"></span>    };
2496 <a name="l02472"></a>02472 
2497 <a name="l02473"></a>02473     <span class="comment">// (m1 + m2) [i] [j] = m1 [i] [j] + m2 [i] [j]</span>
2498 <a name="l02474"></a>02474     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
2499 <a name="l02475"></a>02475     BOOST_UBLAS_INLINE
2500 <a name="l02476"></a>02476     <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__traits.html">matrix_binary_traits</a>&lt;E1, E2, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1scalar__plus.html">scalar_plus</a>&lt;<span class="keyword">typename</span> E1::value_type,
2501 <a name="l02477"></a>02477                                                       <span class="keyword">typename</span> E2::value_type&gt; &gt;::result_type
2502 <a name="l02478"></a>02478     operator + (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;E1&gt;</a> &amp;e1,
2503 <a name="l02479"></a>02479                 <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;E2&gt;</a> &amp;e2) {
2504 <a name="l02480"></a>02480         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__traits.html">matrix_binary_traits</a>&lt;E1, E2, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1scalar__plus.html">scalar_plus</a>&lt;<span class="keyword">typename</span> E1::value_type,
2505 <a name="l02481"></a>02481                                                                   <span class="keyword">typename</span> E2::value_type&gt; &gt;::expression_type expression_type;
2506 <a name="l02482"></a>02482         <span class="keywordflow">return</span> expression_type (e1 (), e2 ());
2507 <a name="l02483"></a>02483     }
2508 <a name="l02484"></a>02484 
2509 <a name="l02485"></a>02485     <span class="comment">// (m1 - m2) [i] [j] = m1 [i] [j] - m2 [i] [j]</span>
2510 <a name="l02486"></a>02486     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
2511 <a name="l02487"></a>02487     BOOST_UBLAS_INLINE
2512 <a name="l02488"></a>02488     <span class="keyword">typename</span> matrix_binary_traits&lt;E1, E2, scalar_minus&lt;<span class="keyword">typename</span> E1::value_type,
2513 <a name="l02489"></a>02489                                                        <span class="keyword">typename</span> E2::value_type&gt; &gt;::result_type
2514 <a name="l02490"></a>02490     operator - (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
2515 <a name="l02491"></a>02491                 <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2) {
2516 <a name="l02492"></a>02492         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_traits&lt;E1, E2, scalar_minus&lt;<span class="keyword">typename</span> E1::value_type,
2517 <a name="l02493"></a>02493                                                                    <span class="keyword">typename</span> E2::value_type&gt; &gt;::expression_type expression_type;
2518 <a name="l02494"></a>02494         <span class="keywordflow">return</span> expression_type (e1 (), e2 ());
2519 <a name="l02495"></a>02495     }
2520 <a name="l02496"></a>02496 
2521 <a name="l02497"></a>02497     <span class="comment">// (m1 * m2) [i] [j] = m1 [i] [j] * m2 [i] [j]</span>
2522 <a name="l02498"></a>02498     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
2523 <a name="l02499"></a>02499     BOOST_UBLAS_INLINE
2524 <a name="l02500"></a>02500     <span class="keyword">typename</span> matrix_binary_traits&lt;E1, E2, scalar_multiplies&lt;<span class="keyword">typename</span> E1::value_type,
2525 <a name="l02501"></a>02501                                                             <span class="keyword">typename</span> E2::value_type&gt; &gt;::result_type
2526 <a name="l02502"></a>02502     element_prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
2527 <a name="l02503"></a>02503                   <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2) {
2528 <a name="l02504"></a>02504         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_traits&lt;E1, E2, scalar_multiplies&lt;<span class="keyword">typename</span> E1::value_type,
2529 <a name="l02505"></a>02505                                                                         <span class="keyword">typename</span> E2::value_type&gt; &gt;::expression_type expression_type;
2530 <a name="l02506"></a>02506         <span class="keywordflow">return</span> expression_type (e1 (), e2 ());
2531 <a name="l02507"></a>02507     }
2532 <a name="l02508"></a>02508 
2533 <a name="l02509"></a>02509     <span class="comment">// (m1 / m2) [i] [j] = m1 [i] [j] / m2 [i] [j]</span>
2534 <a name="l02510"></a>02510     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
2535 <a name="l02511"></a>02511     BOOST_UBLAS_INLINE
2536 <a name="l02512"></a>02512     <span class="keyword">typename</span> matrix_binary_traits&lt;E1, E2, scalar_divides&lt;<span class="keyword">typename</span> E1::value_type,
2537 <a name="l02513"></a>02513                                                          <span class="keyword">typename</span> E2::value_type&gt; &gt;::result_type
2538 <a name="l02514"></a>02514     element_div (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
2539 <a name="l02515"></a>02515                  <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2) {
2540 <a name="l02516"></a>02516         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_traits&lt;E1, E2, scalar_divides&lt;<span class="keyword">typename</span> E1::value_type,
2541 <a name="l02517"></a>02517                                                                      <span class="keyword">typename</span> E2::value_type&gt; &gt;::expression_type expression_type;
2542 <a name="l02518"></a>02518         <span class="keywordflow">return</span> expression_type (e1 (), e2 ());
2543 <a name="l02519"></a>02519     }
2544 <a name="l02520"></a>02520 
2545 <a name="l02521"></a>02521     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2, <span class="keyword">class</span> F&gt;
2546 <a name="l02522"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">02522</a>     <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">matrix_binary_scalar1</a>:
2547 <a name="l02523"></a>02523         <span class="keyword">public</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression</a>&lt;matrix_binary_scalar1&lt;E1, E2, F&gt; &gt; {
2548 <a name="l02524"></a>02524 
2549 <a name="l02525"></a>02525         <span class="keyword">typedef</span> E1 expression1_type;
2550 <a name="l02526"></a>02526         <span class="keyword">typedef</span> E2 expression2_type;
2551 <a name="l02527"></a>02527         <span class="keyword">typedef</span> F functor_type;
2552 <a name="l02528"></a>02528         <span class="keyword">typedef</span> <span class="keyword">const</span> E1&amp; expression1_closure_type;
2553 <a name="l02529"></a>02529         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_closure_type expression2_closure_type;
2554 <a name="l02530"></a>02530         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">matrix_binary_scalar1&lt;E1, E2, F&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a>;
2555 <a name="l02531"></a>02531     <span class="keyword">public</span>:
2556 <a name="l02532"></a>02532 <span class="preprocessor">#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS</span>
2557 <a name="l02533"></a>02533 <span class="preprocessor"></span>        <span class="keyword">using</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;self_type&gt;::operator </a>();
2558 <a name="l02534"></a>02534 <span class="preprocessor">#endif</span>
2559 <a name="l02535"></a>02535 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::size_type size_type;
2560 <a name="l02536"></a>02536         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::difference_type difference_type;
2561 <a name="l02537"></a>02537         <span class="keyword">typedef</span> <span class="keyword">typename</span> F::result_type value_type;
2562 <a name="l02538"></a>02538         <span class="keyword">typedef</span> value_type const_reference;
2563 <a name="l02539"></a>02539         <span class="keyword">typedef</span> const_reference reference;
2564 <a name="l02540"></a>02540         <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">const_closure_type</a>;
2565 <a name="l02541"></a>02541         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">const_closure_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">closure_type</a>;
2566 <a name="l02542"></a>02542         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::orientation_category orientation_category;
2567 <a name="l02543"></a>02543         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">storage_category</a>;
2568 <a name="l02544"></a>02544 
2569 <a name="l02545"></a>02545         <span class="comment">// Construction and destruction</span>
2570 <a name="l02546"></a>02546         BOOST_UBLAS_INLINE
2571 <a name="l02547"></a>02547         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">matrix_binary_scalar1</a> (<span class="keyword">const</span> expression1_type &amp;e1, <span class="keyword">const</span> expression2_type &amp;e2):
2572 <a name="l02548"></a>02548             e1_ (e1), e2_ (e2) {}
2573 <a name="l02549"></a>02549 
2574 <a name="l02550"></a>02550         <span class="comment">// Accessors</span>
2575 <a name="l02551"></a>02551         BOOST_UBLAS_INLINE
2576 <a name="l02552"></a>02552         size_type size1 ()<span class="keyword"> const </span>{
2577 <a name="l02553"></a>02553             <span class="keywordflow">return</span> e2_.size1 ();
2578 <a name="l02554"></a>02554         }
2579 <a name="l02555"></a>02555         BOOST_UBLAS_INLINE
2580 <a name="l02556"></a>02556         size_type size2 ()<span class="keyword"> const </span>{
2581 <a name="l02557"></a>02557             <span class="keywordflow">return</span> e2_.size2 ();
2582 <a name="l02558"></a>02558         }
2583 <a name="l02559"></a>02559 
2584 <a name="l02560"></a>02560     <span class="keyword">public</span>:
2585 <a name="l02561"></a>02561         <span class="comment">// Element access</span>
2586 <a name="l02562"></a>02562         BOOST_UBLAS_INLINE
2587 <a name="l02563"></a>02563         const_reference operator () (size_type i, size_type j)<span class="keyword"> const </span>{
2588 <a name="l02564"></a>02564             <span class="keywordflow">return</span> functor_type::apply (expression1_type (e1_), e2_ (i, j));
2589 <a name="l02565"></a>02565         }
2590 <a name="l02566"></a>02566 
2591 <a name="l02567"></a>02567         <span class="comment">// Closure comparison</span>
2592 <a name="l02568"></a>02568         BOOST_UBLAS_INLINE
2593 <a name="l02569"></a>02569         <span class="keywordtype">bool</span> same_closure (<span class="keyword">const</span> matrix_binary_scalar1 &amp;mbs1)<span class="keyword"> const </span>{
2594 <a name="l02570"></a>02570             <span class="keywordflow">return</span> &amp;e1_ == &amp;(mbs1.e1_) &amp;&amp;
2595 <a name="l02571"></a>02571                    (*this).e2_.same_closure (mbs1.e2_);
2596 <a name="l02572"></a>02572         }
2597 <a name="l02573"></a>02573 
2598 <a name="l02574"></a>02574         <span class="comment">// Iterator types</span>
2599 <a name="l02575"></a>02575     <span class="keyword">private</span>:
2600 <a name="l02576"></a>02576         <span class="keyword">typedef</span> expression1_type const_subiterator1_type;
2601 <a name="l02577"></a>02577         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_iterator1 const_iterator21_type;
2602 <a name="l02578"></a>02578         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_iterator2 const_iterator22_type;
2603 <a name="l02579"></a>02579         <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
2604 <a name="l02580"></a>02580 
2605 <a name="l02581"></a>02581     <span class="keyword">public</span>:
2606 <a name="l02582"></a>02582 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
2607 <a name="l02583"></a>02583 <span class="preprocessor"></span>        <span class="keyword">typedef</span> indexed_const_iterator1&lt;const_closure_type, typename const_iterator21_type::iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a>;
2608 <a name="l02584"></a>02584         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">iterator1</a>;
2609 <a name="l02585"></a>02585         <span class="keyword">typedef</span> indexed_const_iterator2&lt;const_closure_type, typename const_iterator22_type::iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a>;
2610 <a name="l02586"></a>02586         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">iterator2</a>;
2611 <a name="l02587"></a>02587 <span class="preprocessor">#else</span>
2612 <a name="l02588"></a>02588 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a>;
2613 <a name="l02589"></a>02589         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">iterator1</a>;
2614 <a name="l02590"></a>02590         <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a>;
2615 <a name="l02591"></a>02591         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">iterator2</a>;
2616 <a name="l02592"></a>02592 <span class="preprocessor">#endif</span>
2617 <a name="l02593"></a>02593 <span class="preprocessor"></span>        <span class="keyword">typedef</span> reverse_iterator_base1&lt;const_iterator1&gt; const_reverse_iterator1;
2618 <a name="l02594"></a>02594         <span class="keyword">typedef</span> reverse_iterator_base2&lt;const_iterator2&gt; const_reverse_iterator2;
2619 <a name="l02595"></a>02595 
2620 <a name="l02596"></a>02596         <span class="comment">// Element lookup</span>
2621 <a name="l02597"></a>02597         BOOST_UBLAS_INLINE
2622 <a name="l02598"></a>02598         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a> find1 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
2623 <a name="l02599"></a>02599             const_iterator21_type it21 (e2_.find1 (rank, i, j));
2624 <a name="l02600"></a>02600 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
2625 <a name="l02601"></a>02601 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, it21.index1 (), it21.index2 ());
2626 <a name="l02602"></a>02602 <span class="preprocessor">#else</span>
2627 <a name="l02603"></a>02603 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, const_subiterator1_type (e1_), it21);
2628 <a name="l02604"></a>02604 <span class="preprocessor">#endif</span>
2629 <a name="l02605"></a>02605 <span class="preprocessor"></span>        }
2630 <a name="l02606"></a>02606         BOOST_UBLAS_INLINE
2631 <a name="l02607"></a>02607         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a> find2 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
2632 <a name="l02608"></a>02608             const_iterator22_type it22 (e2_.find2 (rank, i, j));
2633 <a name="l02609"></a>02609 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
2634 <a name="l02610"></a>02610 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, it22.index1 (), it22.index2 ());
2635 <a name="l02611"></a>02611 <span class="preprocessor">#else</span>
2636 <a name="l02612"></a>02612 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, const_subiterator1_type (e1_), it22);
2637 <a name="l02613"></a>02613 <span class="preprocessor">#endif</span>
2638 <a name="l02614"></a>02614 <span class="preprocessor"></span>        }
2639 <a name="l02615"></a>02615 
2640 <a name="l02616"></a>02616         <span class="comment">// Iterators enhance the iterators of the referenced expression</span>
2641 <a name="l02617"></a>02617         <span class="comment">// with the binary functor.</span>
2642 <a name="l02618"></a>02618 
2643 <a name="l02619"></a>02619 <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
2644 <a name="l02620"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">02620</a> <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a>:
2645 <a name="l02621"></a>02621             <span class="keyword">public</span> container_const_reference&lt;matrix_binary_scalar1&gt;,
2646 <a name="l02622"></a>02622             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename E2::const_iterator1::iterator_category&gt;::template
2647 <a name="l02623"></a>02623                 iterator_base&lt;const_iterator1, value_type&gt;::type {
2648 <a name="l02624"></a>02624         <span class="keyword">public</span>:
2649 <a name="l02625"></a>02625             <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_iterator1::iterator_category iterator_category;
2650 <a name="l02626"></a>02626             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar1::difference_type difference_type;
2651 <a name="l02627"></a>02627             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar1::value_type value_type;
2652 <a name="l02628"></a>02628             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar1::const_reference reference;
2653 <a name="l02629"></a>02629             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar1::const_pointer pointer;
2654 <a name="l02630"></a>02630 
2655 <a name="l02631"></a>02631             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">dual_iterator_type</a>;
2656 <a name="l02632"></a>02632             <span class="keyword">typedef</span> const_reverse_iterator2 dual_reverse_iterator_type;
2657 <a name="l02633"></a>02633 
2658 <a name="l02634"></a>02634             <span class="comment">// Construction and destruction</span>
2659 <a name="l02635"></a>02635             BOOST_UBLAS_INLINE
2660 <a name="l02636"></a>02636             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a> ():
2661 <a name="l02637"></a>02637                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ () {}
2662 <a name="l02638"></a>02638             BOOST_UBLAS_INLINE
2663 <a name="l02639"></a>02639             const_iterator1 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a> &amp;mbs, <span class="keyword">const</span> const_subiterator1_type &amp;it1, <span class="keyword">const</span> const_iterator21_type &amp;it2):
2664 <a name="l02640"></a>02640                 container_const_reference&lt;self_type&gt; (mbs), it1_ (it1), it2_ (it2) {}
2665 <a name="l02641"></a>02641 
2666 <a name="l02642"></a>02642             <span class="comment">// Arithmetic</span>
2667 <a name="l02643"></a>02643             BOOST_UBLAS_INLINE
2668 <a name="l02644"></a>02644             const_iterator1 &amp;operator ++ () {
2669 <a name="l02645"></a>02645                 ++ it2_;
2670 <a name="l02646"></a>02646                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2671 <a name="l02647"></a>02647             }
2672 <a name="l02648"></a>02648             BOOST_UBLAS_INLINE
2673 <a name="l02649"></a>02649             const_iterator1 &amp;operator -- () {
2674 <a name="l02650"></a>02650                 -- it2_ ;
2675 <a name="l02651"></a>02651                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2676 <a name="l02652"></a>02652             }
2677 <a name="l02653"></a>02653             BOOST_UBLAS_INLINE
2678 <a name="l02654"></a>02654             const_iterator1 &amp;operator += (difference_type n) {
2679 <a name="l02655"></a>02655                 it2_ += n;
2680 <a name="l02656"></a>02656                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2681 <a name="l02657"></a>02657             }
2682 <a name="l02658"></a>02658             BOOST_UBLAS_INLINE
2683 <a name="l02659"></a>02659             const_iterator1 &amp;operator -= (difference_type n) {
2684 <a name="l02660"></a>02660                 it2_ -= n;
2685 <a name="l02661"></a>02661                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2686 <a name="l02662"></a>02662             }
2687 <a name="l02663"></a>02663             BOOST_UBLAS_INLINE
2688 <a name="l02664"></a>02664             difference_type operator - (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
2689 <a name="l02665"></a>02665                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2690 <a name="l02666"></a>02666                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
2691 <a name="l02667"></a>02667                 <span class="comment">// BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());</span>
2692 <a name="l02668"></a>02668                 <span class="keywordflow">return</span> it2_ - it.it2_;
2693 <a name="l02669"></a>02669             }
2694 <a name="l02670"></a>02670 
2695 <a name="l02671"></a>02671             <span class="comment">// Dereference</span>
2696 <a name="l02672"></a>02672             BOOST_UBLAS_INLINE
2697 <a name="l02673"></a>02673             const_reference operator * ()<span class="keyword"> const </span>{
2698 <a name="l02674"></a>02674                 <span class="keywordflow">return</span> functor_type::apply (it1_, *it2_);
2699 <a name="l02675"></a>02675             }
2700 <a name="l02676"></a>02676             BOOST_UBLAS_INLINE
2701 <a name="l02677"></a>02677             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
2702 <a name="l02678"></a>02678                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
2703 <a name="l02679"></a>02679             }
2704 <a name="l02680"></a>02680 
2705 <a name="l02681"></a>02681 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
2706 <a name="l02682"></a>02682 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
2707 <a name="l02683"></a>02683 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2708 <a name="l02684"></a>02684 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a>::
2709 <a name="l02685"></a>02685 <span class="preprocessor">#endif</span>
2710 <a name="l02686"></a>02686 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a> begin ()<span class="keyword"> const </span>{
2711 <a name="l02687"></a>02687                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), 0);
2712 <a name="l02688"></a>02688             }
2713 <a name="l02689"></a>02689             BOOST_UBLAS_INLINE
2714 <a name="l02690"></a>02690 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2715 <a name="l02691"></a>02691 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a>::
2716 <a name="l02692"></a>02692 <span class="preprocessor">#endif</span>
2717 <a name="l02693"></a>02693 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a> end ()<span class="keyword"> const </span>{
2718 <a name="l02694"></a>02694                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), (*this) ().size2 ());
2719 <a name="l02695"></a>02695             }
2720 <a name="l02696"></a>02696             BOOST_UBLAS_INLINE
2721 <a name="l02697"></a>02697 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2722 <a name="l02698"></a>02698 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a>::
2723 <a name="l02699"></a>02699 <span class="preprocessor">#endif</span>
2724 <a name="l02700"></a>02700 <span class="preprocessor"></span>            const_reverse_iterator2 rbegin ()<span class="keyword"> const </span>{
2725 <a name="l02701"></a>02701                 <span class="keywordflow">return</span> const_reverse_iterator2 (end ());
2726 <a name="l02702"></a>02702             }
2727 <a name="l02703"></a>02703             BOOST_UBLAS_INLINE
2728 <a name="l02704"></a>02704 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2729 <a name="l02705"></a>02705 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a>::
2730 <a name="l02706"></a>02706 <span class="preprocessor">#endif</span>
2731 <a name="l02707"></a>02707 <span class="preprocessor"></span>            const_reverse_iterator2 rend ()<span class="keyword"> const </span>{
2732 <a name="l02708"></a>02708                 <span class="keywordflow">return</span> const_reverse_iterator2 (begin ());
2733 <a name="l02709"></a>02709             }
2734 <a name="l02710"></a>02710 <span class="preprocessor">#endif</span>
2735 <a name="l02711"></a>02711 <span class="preprocessor"></span>
2736 <a name="l02712"></a>02712             <span class="comment">// Indices</span>
2737 <a name="l02713"></a>02713             BOOST_UBLAS_INLINE
2738 <a name="l02714"></a>02714             size_type index1 ()<span class="keyword"> const </span>{
2739 <a name="l02715"></a>02715                 <span class="keywordflow">return</span> it2_.index1 ();
2740 <a name="l02716"></a>02716             }
2741 <a name="l02717"></a>02717             BOOST_UBLAS_INLINE
2742 <a name="l02718"></a>02718             size_type index2 ()<span class="keyword"> const </span>{
2743 <a name="l02719"></a>02719                 <span class="keywordflow">return</span> it2_.index2 ();
2744 <a name="l02720"></a>02720             }
2745 <a name="l02721"></a>02721 
2746 <a name="l02722"></a>02722             <span class="comment">// Assignment </span>
2747 <a name="l02723"></a>02723             BOOST_UBLAS_INLINE
2748 <a name="l02724"></a>02724             const_iterator1 &amp;operator = (<span class="keyword">const</span> const_iterator1 &amp;it) {
2749 <a name="l02725"></a>02725                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
2750 <a name="l02726"></a>02726                 it1_ = it.it1_;
2751 <a name="l02727"></a>02727                 it2_ = it.it2_;
2752 <a name="l02728"></a>02728                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2753 <a name="l02729"></a>02729             }
2754 <a name="l02730"></a>02730 
2755 <a name="l02731"></a>02731             <span class="comment">// Comparison</span>
2756 <a name="l02732"></a>02732             BOOST_UBLAS_INLINE
2757 <a name="l02733"></a>02733             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
2758 <a name="l02734"></a>02734                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2759 <a name="l02735"></a>02735                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
2760 <a name="l02736"></a>02736                 <span class="comment">// BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());</span>
2761 <a name="l02737"></a>02737                 <span class="keywordflow">return</span> it2_ == it.it2_;
2762 <a name="l02738"></a>02738             }
2763 <a name="l02739"></a>02739             BOOST_UBLAS_INLINE
2764 <a name="l02740"></a>02740             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
2765 <a name="l02741"></a>02741                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2766 <a name="l02742"></a>02742                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
2767 <a name="l02743"></a>02743                 <span class="comment">// BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());</span>
2768 <a name="l02744"></a>02744                 <span class="keywordflow">return</span> it2_ &lt; it.it2_;
2769 <a name="l02745"></a>02745             }
2770 <a name="l02746"></a>02746 
2771 <a name="l02747"></a>02747         <span class="keyword">private</span>:
2772 <a name="l02748"></a>02748             const_subiterator1_type it1_;
2773 <a name="l02749"></a>02749             const_iterator21_type it2_;
2774 <a name="l02750"></a>02750         };
2775 <a name="l02751"></a>02751 <span class="preprocessor">#endif</span>
2776 <a name="l02752"></a>02752 <span class="preprocessor"></span>
2777 <a name="l02753"></a>02753         BOOST_UBLAS_INLINE
2778 <a name="l02754"></a>02754         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a> begin1 ()<span class="keyword"> const </span>{
2779 <a name="l02755"></a>02755             <span class="keywordflow">return</span> find1 (0, 0, 0);
2780 <a name="l02756"></a>02756         }
2781 <a name="l02757"></a>02757         BOOST_UBLAS_INLINE
2782 <a name="l02758"></a>02758         const_iterator1 end1 ()<span class="keyword"> const </span>{
2783 <a name="l02759"></a>02759             <span class="keywordflow">return</span> find1 (0, size1 (), 0);
2784 <a name="l02760"></a>02760         }
2785 <a name="l02761"></a>02761 
2786 <a name="l02762"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">02762</a> <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
2787 <a name="l02763"></a>02763 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a>:
2788 <a name="l02764"></a>02764             <span class="keyword">public</span> container_const_reference&lt;matrix_binary_scalar1&gt;,
2789 <a name="l02765"></a>02765             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename E2::const_iterator2::iterator_category&gt;::template
2790 <a name="l02766"></a>02766                 iterator_base&lt;const_iterator2, value_type&gt;::type {
2791 <a name="l02767"></a>02767         <span class="keyword">public</span>:
2792 <a name="l02768"></a>02768             <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_iterator2::iterator_category iterator_category;
2793 <a name="l02769"></a>02769             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar1::difference_type difference_type;
2794 <a name="l02770"></a>02770             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar1::value_type value_type;
2795 <a name="l02771"></a>02771             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar1::const_reference reference;
2796 <a name="l02772"></a>02772             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar1::const_pointer pointer;
2797 <a name="l02773"></a>02773 
2798 <a name="l02774"></a>02774             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">dual_iterator_type</a>;
2799 <a name="l02775"></a>02775             <span class="keyword">typedef</span> const_reverse_iterator1 dual_reverse_iterator_type;
2800 <a name="l02776"></a>02776 
2801 <a name="l02777"></a>02777             <span class="comment">// Construction and destruction</span>
2802 <a name="l02778"></a>02778             BOOST_UBLAS_INLINE
2803 <a name="l02779"></a>02779             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a> ():
2804 <a name="l02780"></a>02780                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ () {}
2805 <a name="l02781"></a>02781             BOOST_UBLAS_INLINE
2806 <a name="l02782"></a>02782             const_iterator2 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a> &amp;mbs, <span class="keyword">const</span> const_subiterator1_type &amp;it1, <span class="keyword">const</span> const_iterator22_type &amp;it2):
2807 <a name="l02783"></a>02783                 container_const_reference&lt;self_type&gt; (mbs), it1_ (it1), it2_ (it2) {}
2808 <a name="l02784"></a>02784 
2809 <a name="l02785"></a>02785             <span class="comment">// Arithmetic</span>
2810 <a name="l02786"></a>02786             BOOST_UBLAS_INLINE
2811 <a name="l02787"></a>02787             const_iterator2 &amp;operator ++ () {
2812 <a name="l02788"></a>02788                 ++ it2_;
2813 <a name="l02789"></a>02789                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2814 <a name="l02790"></a>02790             }
2815 <a name="l02791"></a>02791             BOOST_UBLAS_INLINE
2816 <a name="l02792"></a>02792             const_iterator2 &amp;operator -- () {
2817 <a name="l02793"></a>02793                 -- it2_;
2818 <a name="l02794"></a>02794                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2819 <a name="l02795"></a>02795             }
2820 <a name="l02796"></a>02796             BOOST_UBLAS_INLINE
2821 <a name="l02797"></a>02797             const_iterator2 &amp;operator += (difference_type n) {
2822 <a name="l02798"></a>02798                 it2_ += n;
2823 <a name="l02799"></a>02799                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2824 <a name="l02800"></a>02800             }
2825 <a name="l02801"></a>02801             BOOST_UBLAS_INLINE
2826 <a name="l02802"></a>02802             const_iterator2 &amp;operator -= (difference_type n) {
2827 <a name="l02803"></a>02803                 it2_ -= n;
2828 <a name="l02804"></a>02804                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2829 <a name="l02805"></a>02805             }
2830 <a name="l02806"></a>02806             BOOST_UBLAS_INLINE
2831 <a name="l02807"></a>02807             difference_type operator - (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
2832 <a name="l02808"></a>02808                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2833 <a name="l02809"></a>02809                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
2834 <a name="l02810"></a>02810                 <span class="comment">// BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());</span>
2835 <a name="l02811"></a>02811                 <span class="keywordflow">return</span> it2_ - it.it2_;
2836 <a name="l02812"></a>02812             }
2837 <a name="l02813"></a>02813 
2838 <a name="l02814"></a>02814             <span class="comment">// Dereference</span>
2839 <a name="l02815"></a>02815             BOOST_UBLAS_INLINE
2840 <a name="l02816"></a>02816             const_reference operator * ()<span class="keyword"> const </span>{
2841 <a name="l02817"></a>02817                 <span class="keywordflow">return</span> functor_type::apply (it1_, *it2_);
2842 <a name="l02818"></a>02818             }
2843 <a name="l02819"></a>02819             BOOST_UBLAS_INLINE
2844 <a name="l02820"></a>02820             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
2845 <a name="l02821"></a>02821                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
2846 <a name="l02822"></a>02822             }
2847 <a name="l02823"></a>02823 
2848 <a name="l02824"></a>02824 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
2849 <a name="l02825"></a>02825 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
2850 <a name="l02826"></a>02826 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2851 <a name="l02827"></a>02827 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a>::
2852 <a name="l02828"></a>02828 <span class="preprocessor">#endif</span>
2853 <a name="l02829"></a>02829 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a> begin ()<span class="keyword"> const </span>{
2854 <a name="l02830"></a>02830                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, 0, index2 ());
2855 <a name="l02831"></a>02831             }
2856 <a name="l02832"></a>02832             BOOST_UBLAS_INLINE
2857 <a name="l02833"></a>02833 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2858 <a name="l02834"></a>02834 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a>::
2859 <a name="l02835"></a>02835 <span class="preprocessor">#endif</span>
2860 <a name="l02836"></a>02836 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator1.html">const_iterator1</a> end ()<span class="keyword"> const </span>{
2861 <a name="l02837"></a>02837                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, (*<span class="keyword">this</span>) ().size1 (), index2 ());
2862 <a name="l02838"></a>02838             }
2863 <a name="l02839"></a>02839             BOOST_UBLAS_INLINE
2864 <a name="l02840"></a>02840 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2865 <a name="l02841"></a>02841 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a>::
2866 <a name="l02842"></a>02842 <span class="preprocessor">#endif</span>
2867 <a name="l02843"></a>02843 <span class="preprocessor"></span>            const_reverse_iterator1 rbegin ()<span class="keyword"> const </span>{
2868 <a name="l02844"></a>02844                 <span class="keywordflow">return</span> const_reverse_iterator1 (end ());
2869 <a name="l02845"></a>02845             }
2870 <a name="l02846"></a>02846             BOOST_UBLAS_INLINE
2871 <a name="l02847"></a>02847 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
2872 <a name="l02848"></a>02848 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">self_type</a>::
2873 <a name="l02849"></a>02849 <span class="preprocessor">#endif</span>
2874 <a name="l02850"></a>02850 <span class="preprocessor"></span>            const_reverse_iterator1 rend ()<span class="keyword"> const </span>{
2875 <a name="l02851"></a>02851                 <span class="keywordflow">return</span> const_reverse_iterator1 (begin ());
2876 <a name="l02852"></a>02852             }
2877 <a name="l02853"></a>02853 <span class="preprocessor">#endif</span>
2878 <a name="l02854"></a>02854 <span class="preprocessor"></span>
2879 <a name="l02855"></a>02855             <span class="comment">// Indices</span>
2880 <a name="l02856"></a>02856             BOOST_UBLAS_INLINE
2881 <a name="l02857"></a>02857             size_type index1 ()<span class="keyword"> const </span>{
2882 <a name="l02858"></a>02858                 <span class="keywordflow">return</span> it2_.index1 ();
2883 <a name="l02859"></a>02859             }
2884 <a name="l02860"></a>02860             BOOST_UBLAS_INLINE
2885 <a name="l02861"></a>02861             size_type index2 ()<span class="keyword"> const </span>{
2886 <a name="l02862"></a>02862                 <span class="keywordflow">return</span> it2_.index2 ();
2887 <a name="l02863"></a>02863             }
2888 <a name="l02864"></a>02864 
2889 <a name="l02865"></a>02865             <span class="comment">// Assignment </span>
2890 <a name="l02866"></a>02866             BOOST_UBLAS_INLINE
2891 <a name="l02867"></a>02867             const_iterator2 &amp;operator = (<span class="keyword">const</span> const_iterator2 &amp;it) {
2892 <a name="l02868"></a>02868                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
2893 <a name="l02869"></a>02869                 it1_ = it.it1_;
2894 <a name="l02870"></a>02870                 it2_ = it.it2_;
2895 <a name="l02871"></a>02871                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
2896 <a name="l02872"></a>02872             }
2897 <a name="l02873"></a>02873 
2898 <a name="l02874"></a>02874             <span class="comment">// Comparison</span>
2899 <a name="l02875"></a>02875             BOOST_UBLAS_INLINE
2900 <a name="l02876"></a>02876             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
2901 <a name="l02877"></a>02877                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2902 <a name="l02878"></a>02878                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
2903 <a name="l02879"></a>02879                 <span class="comment">// BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());</span>
2904 <a name="l02880"></a>02880                 <span class="keywordflow">return</span> it2_ == it.it2_;
2905 <a name="l02881"></a>02881             }
2906 <a name="l02882"></a>02882             BOOST_UBLAS_INLINE
2907 <a name="l02883"></a>02883             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
2908 <a name="l02884"></a>02884                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
2909 <a name="l02885"></a>02885                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
2910 <a name="l02886"></a>02886                 <span class="comment">// BOOST_UBLAS_CHECK (it1_ == it.it1_, external_logic ());</span>
2911 <a name="l02887"></a>02887                 <span class="keywordflow">return</span> it2_ &lt; it.it2_;
2912 <a name="l02888"></a>02888             }
2913 <a name="l02889"></a>02889 
2914 <a name="l02890"></a>02890         <span class="keyword">private</span>:
2915 <a name="l02891"></a>02891             const_subiterator1_type it1_;
2916 <a name="l02892"></a>02892             const_iterator22_type it2_;
2917 <a name="l02893"></a>02893         };
2918 <a name="l02894"></a>02894 <span class="preprocessor">#endif</span>
2919 <a name="l02895"></a>02895 <span class="preprocessor"></span>
2920 <a name="l02896"></a>02896         BOOST_UBLAS_INLINE
2921 <a name="l02897"></a>02897         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1_1_1const__iterator2.html">const_iterator2</a> begin2 ()<span class="keyword"> const </span>{
2922 <a name="l02898"></a>02898             <span class="keywordflow">return</span> find2 (0, 0, 0);
2923 <a name="l02899"></a>02899         }
2924 <a name="l02900"></a>02900         BOOST_UBLAS_INLINE
2925 <a name="l02901"></a>02901         const_iterator2 end2 ()<span class="keyword"> const </span>{
2926 <a name="l02902"></a>02902             <span class="keywordflow">return</span> find2 (0, 0, size2 ());
2927 <a name="l02903"></a>02903         }
2928 <a name="l02904"></a>02904 
2929 <a name="l02905"></a>02905         <span class="comment">// Reverse iterators</span>
2930 <a name="l02906"></a>02906 
2931 <a name="l02907"></a>02907         BOOST_UBLAS_INLINE
2932 <a name="l02908"></a>02908         const_reverse_iterator1 rbegin1 ()<span class="keyword"> const </span>{
2933 <a name="l02909"></a>02909             <span class="keywordflow">return</span> const_reverse_iterator1 (end1 ());
2934 <a name="l02910"></a>02910         }
2935 <a name="l02911"></a>02911         BOOST_UBLAS_INLINE
2936 <a name="l02912"></a>02912         const_reverse_iterator1 rend1 ()<span class="keyword"> const </span>{
2937 <a name="l02913"></a>02913             <span class="keywordflow">return</span> const_reverse_iterator1 (begin1 ());
2938 <a name="l02914"></a>02914         }
2939 <a name="l02915"></a>02915 
2940 <a name="l02916"></a>02916         BOOST_UBLAS_INLINE
2941 <a name="l02917"></a>02917         const_reverse_iterator2 rbegin2 ()<span class="keyword"> const </span>{
2942 <a name="l02918"></a>02918             <span class="keywordflow">return</span> const_reverse_iterator2 (end2 ());
2943 <a name="l02919"></a>02919         }
2944 <a name="l02920"></a>02920         BOOST_UBLAS_INLINE
2945 <a name="l02921"></a>02921         const_reverse_iterator2 rend2 ()<span class="keyword"> const </span>{
2946 <a name="l02922"></a>02922             <span class="keywordflow">return</span> const_reverse_iterator2 (begin2 ());
2947 <a name="l02923"></a>02923         }
2948 <a name="l02924"></a>02924 
2949 <a name="l02925"></a>02925     <span class="keyword">private</span>:
2950 <a name="l02926"></a>02926         expression1_closure_type e1_;
2951 <a name="l02927"></a>02927         expression2_closure_type e2_;
2952 <a name="l02928"></a>02928     };
2953 <a name="l02929"></a>02929 
2954 <a name="l02930"></a>02930     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2, <span class="keyword">class</span> F&gt;
2955 <a name="l02931"></a><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1__traits.html">02931</a>     <span class="keyword">struct </span><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1__traits.html">matrix_binary_scalar1_traits</a> {
2956 <a name="l02932"></a>02932         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">matrix_binary_scalar1&lt;E1, E2, F&gt;</a> expression_type;   <span class="comment">// allow E1 to be builtin type</span>
2957 <a name="l02933"></a>02933 <span class="preprocessor">#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG</span>
2958 <a name="l02934"></a>02934 <span class="preprocessor"></span>        <span class="keyword">typedef</span> expression_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">result_type</a>;
2959 <a name="l02935"></a>02935 <span class="preprocessor">#else</span>
2960 <a name="l02936"></a>02936 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::matrix_temporary_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1.html">result_type</a>;
2961 <a name="l02937"></a>02937 <span class="preprocessor">#endif</span>
2962 <a name="l02938"></a>02938 <span class="preprocessor"></span>    };
2963 <a name="l02939"></a>02939 
2964 <a name="l02940"></a>02940     <span class="comment">// (t * m) [i] [j] = t * m [i] [j]</span>
2965 <a name="l02941"></a>02941     <span class="keyword">template</span>&lt;<span class="keyword">class</span> T1, <span class="keyword">class</span> E2&gt;
2966 <a name="l02942"></a>02942     BOOST_UBLAS_INLINE
2967 <a name="l02943"></a>02943     <span class="keyword">typename</span> enable_if&lt; is_convertible&lt;T1, typename E2::value_type &gt;,
2968 <a name="l02944"></a>02944     <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1__traits.html">matrix_binary_scalar1_traits&lt;const T1, E2, scalar_multiplies&lt;T1, typename E2::value_type&gt;</a> &gt;::result_type
2969 <a name="l02945"></a>02945     &gt;::type
2970 <a name="l02946"></a>02946     operator * (<span class="keyword">const</span> T1 &amp;e1,
2971 <a name="l02947"></a>02947                 <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;E2&gt;</a> &amp;e2) {
2972 <a name="l02948"></a>02948         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar1__traits.html">matrix_binary_scalar1_traits&lt;const T1, E2, scalar_multiplies&lt;T1, typename E2::value_type&gt;</a> &gt;::expression_type expression_type;
2973 <a name="l02949"></a>02949         <span class="keywordflow">return</span> expression_type (e1, e2 ());
2974 <a name="l02950"></a>02950     }
2975 <a name="l02951"></a>02951 
2976 <a name="l02952"></a>02952 
2977 <a name="l02953"></a>02953     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2, <span class="keyword">class</span> F&gt;
2978 <a name="l02954"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">02954</a>     <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">matrix_binary_scalar2</a>:
2979 <a name="l02955"></a>02955         <span class="keyword">public</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression</a>&lt;matrix_binary_scalar2&lt;E1, E2, F&gt; &gt; {
2980 <a name="l02956"></a>02956 
2981 <a name="l02957"></a>02957         <span class="keyword">typedef</span> E1 expression1_type;
2982 <a name="l02958"></a>02958         <span class="keyword">typedef</span> E2 expression2_type;
2983 <a name="l02959"></a>02959         <span class="keyword">typedef</span> F functor_type;
2984 <a name="l02960"></a>02960     <span class="keyword">public</span>:
2985 <a name="l02961"></a>02961         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_closure_type expression1_closure_type;
2986 <a name="l02962"></a>02962         <span class="keyword">typedef</span> <span class="keyword">const</span> E2&amp; expression2_closure_type;
2987 <a name="l02963"></a>02963     <span class="keyword">private</span>:
2988 <a name="l02964"></a>02964         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">matrix_binary_scalar2&lt;E1, E2, F&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a>;
2989 <a name="l02965"></a>02965     <span class="keyword">public</span>:
2990 <a name="l02966"></a>02966 <span class="preprocessor">#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS</span>
2991 <a name="l02967"></a>02967 <span class="preprocessor"></span>        <span class="keyword">using</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;self_type&gt;::operator </a>();
2992 <a name="l02968"></a>02968 <span class="preprocessor">#endif</span>
2993 <a name="l02969"></a>02969 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::size_type size_type;
2994 <a name="l02970"></a>02970         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::difference_type difference_type;
2995 <a name="l02971"></a>02971         <span class="keyword">typedef</span> <span class="keyword">typename</span> F::result_type value_type;
2996 <a name="l02972"></a>02972         <span class="keyword">typedef</span> value_type const_reference;
2997 <a name="l02973"></a>02973         <span class="keyword">typedef</span> const_reference reference;
2998 <a name="l02974"></a>02974 
2999 <a name="l02975"></a>02975         <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">const_closure_type</a>;
3000 <a name="l02976"></a>02976         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">const_closure_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">closure_type</a>;
3001 <a name="l02977"></a>02977         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::orientation_category orientation_category;
3002 <a name="l02978"></a>02978         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">storage_category</a>;
3003 <a name="l02979"></a>02979 
3004 <a name="l02980"></a>02980         <span class="comment">// Construction and destruction</span>
3005 <a name="l02981"></a>02981         BOOST_UBLAS_INLINE
3006 <a name="l02982"></a>02982         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">matrix_binary_scalar2</a> (<span class="keyword">const</span> expression1_type &amp;e1, <span class="keyword">const</span> expression2_type &amp;e2): 
3007 <a name="l02983"></a>02983             e1_ (e1), e2_ (e2) {}
3008 <a name="l02984"></a>02984 
3009 <a name="l02985"></a>02985         <span class="comment">// Accessors</span>
3010 <a name="l02986"></a>02986         BOOST_UBLAS_INLINE
3011 <a name="l02987"></a>02987         size_type size1 ()<span class="keyword"> const </span>{
3012 <a name="l02988"></a>02988             <span class="keywordflow">return</span> e1_.size1 ();
3013 <a name="l02989"></a>02989         }
3014 <a name="l02990"></a>02990         BOOST_UBLAS_INLINE
3015 <a name="l02991"></a>02991         size_type size2 ()<span class="keyword"> const </span>{
3016 <a name="l02992"></a>02992             <span class="keywordflow">return</span> e1_.size2 ();
3017 <a name="l02993"></a>02993         }
3018 <a name="l02994"></a>02994 
3019 <a name="l02995"></a>02995     <span class="keyword">public</span>:
3020 <a name="l02996"></a>02996         <span class="comment">// Element access</span>
3021 <a name="l02997"></a>02997         BOOST_UBLAS_INLINE
3022 <a name="l02998"></a>02998         const_reference operator () (size_type i, size_type j)<span class="keyword"> const </span>{
3023 <a name="l02999"></a>02999             <span class="keywordflow">return</span> functor_type::apply (e1_ (i, j), expression2_type (e2_));
3024 <a name="l03000"></a>03000         }
3025 <a name="l03001"></a>03001 
3026 <a name="l03002"></a>03002         <span class="comment">// Closure comparison</span>
3027 <a name="l03003"></a>03003         BOOST_UBLAS_INLINE
3028 <a name="l03004"></a>03004         <span class="keywordtype">bool</span> same_closure (<span class="keyword">const</span> matrix_binary_scalar2 &amp;mbs2)<span class="keyword"> const </span>{
3029 <a name="l03005"></a>03005             <span class="keywordflow">return</span> (*this).e1_.same_closure (mbs2.e1_) &amp;&amp;
3030 <a name="l03006"></a>03006                    &amp;e2_ == &amp;(mbs2.e2_);
3031 <a name="l03007"></a>03007         }
3032 <a name="l03008"></a>03008 
3033 <a name="l03009"></a>03009         <span class="comment">// Iterator types</span>
3034 <a name="l03010"></a>03010     <span class="keyword">private</span>:
3035 <a name="l03011"></a>03011         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_iterator1 const_iterator11_type;
3036 <a name="l03012"></a>03012         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_iterator2 const_iterator12_type;
3037 <a name="l03013"></a>03013         <span class="keyword">typedef</span> expression2_type const_subiterator2_type;
3038 <a name="l03014"></a>03014         <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
3039 <a name="l03015"></a>03015 
3040 <a name="l03016"></a>03016     <span class="keyword">public</span>:
3041 <a name="l03017"></a>03017 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
3042 <a name="l03018"></a>03018 <span class="preprocessor"></span>        <span class="keyword">typedef</span> indexed_const_iterator1&lt;const_closure_type, typename const_iterator11_type::iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a>;
3043 <a name="l03019"></a>03019         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">iterator1</a>;
3044 <a name="l03020"></a>03020         <span class="keyword">typedef</span> indexed_const_iterator2&lt;const_closure_type, typename const_iterator12_type::iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a>;
3045 <a name="l03021"></a>03021         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">iterator2</a>;
3046 <a name="l03022"></a>03022 <span class="preprocessor">#else</span>
3047 <a name="l03023"></a>03023 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a>;
3048 <a name="l03024"></a>03024         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">iterator1</a>;
3049 <a name="l03025"></a>03025         <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a>;
3050 <a name="l03026"></a>03026         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">iterator2</a>;
3051 <a name="l03027"></a>03027 <span class="preprocessor">#endif</span>
3052 <a name="l03028"></a>03028 <span class="preprocessor"></span>        <span class="keyword">typedef</span> reverse_iterator_base1&lt;const_iterator1&gt; const_reverse_iterator1;
3053 <a name="l03029"></a>03029         <span class="keyword">typedef</span> reverse_iterator_base2&lt;const_iterator2&gt; const_reverse_iterator2;
3054 <a name="l03030"></a>03030 
3055 <a name="l03031"></a>03031         <span class="comment">// Element lookup</span>
3056 <a name="l03032"></a>03032         BOOST_UBLAS_INLINE
3057 <a name="l03033"></a>03033         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a> find1 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
3058 <a name="l03034"></a>03034             const_iterator11_type it11 (e1_.find1 (rank, i, j));
3059 <a name="l03035"></a>03035 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
3060 <a name="l03036"></a>03036 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, it11.index1 (), it11.index2 ());
3061 <a name="l03037"></a>03037 <span class="preprocessor">#else</span>
3062 <a name="l03038"></a>03038 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, it11, const_subiterator2_type (e2_));
3063 <a name="l03039"></a>03039 <span class="preprocessor">#endif</span>
3064 <a name="l03040"></a>03040 <span class="preprocessor"></span>        }
3065 <a name="l03041"></a>03041         BOOST_UBLAS_INLINE
3066 <a name="l03042"></a>03042         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a> find2 (<span class="keywordtype">int</span> rank, size_type i, size_type j)<span class="keyword"> const </span>{
3067 <a name="l03043"></a>03043             const_iterator12_type it12 (e1_.find2 (rank, i, j));
3068 <a name="l03044"></a>03044 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
3069 <a name="l03045"></a>03045 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, it12.index1 (), it12.index2 ());
3070 <a name="l03046"></a>03046 <span class="preprocessor">#else</span>
3071 <a name="l03047"></a>03047 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, it12, const_subiterator2_type (e2_));
3072 <a name="l03048"></a>03048 <span class="preprocessor">#endif</span>
3073 <a name="l03049"></a>03049 <span class="preprocessor"></span>        }
3074 <a name="l03050"></a>03050 
3075 <a name="l03051"></a>03051         <span class="comment">// Iterators enhance the iterators of the referenced expression</span>
3076 <a name="l03052"></a>03052         <span class="comment">// with the binary functor.</span>
3077 <a name="l03053"></a>03053 
3078 <a name="l03054"></a>03054 <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
3079 <a name="l03055"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">03055</a> <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a>:
3080 <a name="l03056"></a>03056             <span class="keyword">public</span> container_const_reference&lt;matrix_binary_scalar2&gt;,
3081 <a name="l03057"></a>03057             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename E1::const_iterator1::iterator_category&gt;::template
3082 <a name="l03058"></a>03058                 iterator_base&lt;const_iterator1, value_type&gt;::type {
3083 <a name="l03059"></a>03059         <span class="keyword">public</span>:
3084 <a name="l03060"></a>03060             <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_iterator1::iterator_category iterator_category;
3085 <a name="l03061"></a>03061             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar2::difference_type difference_type;
3086 <a name="l03062"></a>03062             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar2::value_type value_type;
3087 <a name="l03063"></a>03063             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar2::const_reference reference;
3088 <a name="l03064"></a>03064             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar2::const_pointer pointer;
3089 <a name="l03065"></a>03065 
3090 <a name="l03066"></a>03066             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">dual_iterator_type</a>;
3091 <a name="l03067"></a>03067             <span class="keyword">typedef</span> const_reverse_iterator2 dual_reverse_iterator_type;
3092 <a name="l03068"></a>03068 
3093 <a name="l03069"></a>03069             <span class="comment">// Construction and destruction</span>
3094 <a name="l03070"></a>03070             BOOST_UBLAS_INLINE
3095 <a name="l03071"></a>03071             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a> ():
3096 <a name="l03072"></a>03072                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ () {}
3097 <a name="l03073"></a>03073             BOOST_UBLAS_INLINE
3098 <a name="l03074"></a>03074             const_iterator1 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a> &amp;mbs, <span class="keyword">const</span> const_iterator11_type &amp;it1, <span class="keyword">const</span> const_subiterator2_type &amp;it2):
3099 <a name="l03075"></a>03075                 container_const_reference&lt;self_type&gt; (mbs), it1_ (it1), it2_ (it2) {}
3100 <a name="l03076"></a>03076 
3101 <a name="l03077"></a>03077             <span class="comment">// Arithmetic</span>
3102 <a name="l03078"></a>03078             BOOST_UBLAS_INLINE
3103 <a name="l03079"></a>03079             const_iterator1 &amp;operator ++ () {
3104 <a name="l03080"></a>03080                 ++ it1_;
3105 <a name="l03081"></a>03081                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3106 <a name="l03082"></a>03082             }
3107 <a name="l03083"></a>03083             BOOST_UBLAS_INLINE
3108 <a name="l03084"></a>03084             const_iterator1 &amp;operator -- () {
3109 <a name="l03085"></a>03085                 -- it1_ ;
3110 <a name="l03086"></a>03086                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3111 <a name="l03087"></a>03087             }
3112 <a name="l03088"></a>03088             BOOST_UBLAS_INLINE
3113 <a name="l03089"></a>03089             const_iterator1 &amp;operator += (difference_type n) {
3114 <a name="l03090"></a>03090                 it1_ += n;
3115 <a name="l03091"></a>03091                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3116 <a name="l03092"></a>03092             }
3117 <a name="l03093"></a>03093             BOOST_UBLAS_INLINE
3118 <a name="l03094"></a>03094             const_iterator1 &amp;operator -= (difference_type n) {
3119 <a name="l03095"></a>03095                 it1_ -= n;
3120 <a name="l03096"></a>03096                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3121 <a name="l03097"></a>03097             }
3122 <a name="l03098"></a>03098             BOOST_UBLAS_INLINE
3123 <a name="l03099"></a>03099             difference_type operator - (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
3124 <a name="l03100"></a>03100                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
3125 <a name="l03101"></a>03101                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
3126 <a name="l03102"></a>03102                 <span class="comment">// BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());</span>
3127 <a name="l03103"></a>03103                 <span class="keywordflow">return</span> it1_ - it.it1_;
3128 <a name="l03104"></a>03104             }
3129 <a name="l03105"></a>03105 
3130 <a name="l03106"></a>03106             <span class="comment">// Dereference</span>
3131 <a name="l03107"></a>03107             BOOST_UBLAS_INLINE
3132 <a name="l03108"></a>03108             const_reference operator * ()<span class="keyword"> const </span>{
3133 <a name="l03109"></a>03109                 <span class="keywordflow">return</span> functor_type::apply (*it1_, it2_);
3134 <a name="l03110"></a>03110             }
3135 <a name="l03111"></a>03111             BOOST_UBLAS_INLINE
3136 <a name="l03112"></a>03112             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
3137 <a name="l03113"></a>03113                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
3138 <a name="l03114"></a>03114             }
3139 <a name="l03115"></a>03115 
3140 <a name="l03116"></a>03116 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
3141 <a name="l03117"></a>03117 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
3142 <a name="l03118"></a>03118 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
3143 <a name="l03119"></a>03119 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a>::
3144 <a name="l03120"></a>03120 <span class="preprocessor">#endif</span>
3145 <a name="l03121"></a>03121 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a> begin ()<span class="keyword"> const </span>{
3146 <a name="l03122"></a>03122                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), 0);
3147 <a name="l03123"></a>03123             }
3148 <a name="l03124"></a>03124             BOOST_UBLAS_INLINE
3149 <a name="l03125"></a>03125 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
3150 <a name="l03126"></a>03126 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a>::
3151 <a name="l03127"></a>03127 <span class="preprocessor">#endif</span>
3152 <a name="l03128"></a>03128 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a> end ()<span class="keyword"> const </span>{
3153 <a name="l03129"></a>03129                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), (*this) ().size2 ());
3154 <a name="l03130"></a>03130             }
3155 <a name="l03131"></a>03131             BOOST_UBLAS_INLINE
3156 <a name="l03132"></a>03132 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
3157 <a name="l03133"></a>03133 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a>::
3158 <a name="l03134"></a>03134 <span class="preprocessor">#endif</span>
3159 <a name="l03135"></a>03135 <span class="preprocessor"></span>            const_reverse_iterator2 rbegin ()<span class="keyword"> const </span>{
3160 <a name="l03136"></a>03136                 <span class="keywordflow">return</span> const_reverse_iterator2 (end ());
3161 <a name="l03137"></a>03137             }
3162 <a name="l03138"></a>03138             BOOST_UBLAS_INLINE
3163 <a name="l03139"></a>03139 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
3164 <a name="l03140"></a>03140 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a>::
3165 <a name="l03141"></a>03141 <span class="preprocessor">#endif</span>
3166 <a name="l03142"></a>03142 <span class="preprocessor"></span>            const_reverse_iterator2 rend ()<span class="keyword"> const </span>{
3167 <a name="l03143"></a>03143                 <span class="keywordflow">return</span> const_reverse_iterator2 (begin ());
3168 <a name="l03144"></a>03144             }
3169 <a name="l03145"></a>03145 <span class="preprocessor">#endif</span>
3170 <a name="l03146"></a>03146 <span class="preprocessor"></span>
3171 <a name="l03147"></a>03147             <span class="comment">// Indices</span>
3172 <a name="l03148"></a>03148             BOOST_UBLAS_INLINE
3173 <a name="l03149"></a>03149             size_type index1 ()<span class="keyword"> const </span>{
3174 <a name="l03150"></a>03150                 <span class="keywordflow">return</span> it1_.index1 ();
3175 <a name="l03151"></a>03151             }
3176 <a name="l03152"></a>03152             BOOST_UBLAS_INLINE
3177 <a name="l03153"></a>03153             size_type index2 ()<span class="keyword"> const </span>{
3178 <a name="l03154"></a>03154                 <span class="keywordflow">return</span> it1_.index2 ();
3179 <a name="l03155"></a>03155             }
3180 <a name="l03156"></a>03156 
3181 <a name="l03157"></a>03157             <span class="comment">// Assignment </span>
3182 <a name="l03158"></a>03158             BOOST_UBLAS_INLINE
3183 <a name="l03159"></a>03159             const_iterator1 &amp;operator = (<span class="keyword">const</span> const_iterator1 &amp;it) {
3184 <a name="l03160"></a>03160                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
3185 <a name="l03161"></a>03161                 it1_ = it.it1_;
3186 <a name="l03162"></a>03162                 it2_ = it.it2_;
3187 <a name="l03163"></a>03163                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3188 <a name="l03164"></a>03164             }
3189 <a name="l03165"></a>03165 
3190 <a name="l03166"></a>03166             <span class="comment">// Comparison</span>
3191 <a name="l03167"></a>03167             BOOST_UBLAS_INLINE
3192 <a name="l03168"></a>03168             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
3193 <a name="l03169"></a>03169                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
3194 <a name="l03170"></a>03170                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
3195 <a name="l03171"></a>03171                 <span class="comment">// BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());</span>
3196 <a name="l03172"></a>03172                 <span class="keywordflow">return</span> it1_ == it.it1_;
3197 <a name="l03173"></a>03173             }
3198 <a name="l03174"></a>03174             BOOST_UBLAS_INLINE
3199 <a name="l03175"></a>03175             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
3200 <a name="l03176"></a>03176                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
3201 <a name="l03177"></a>03177                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
3202 <a name="l03178"></a>03178                 <span class="comment">// BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());</span>
3203 <a name="l03179"></a>03179                 <span class="keywordflow">return</span> it1_ &lt; it.it1_;
3204 <a name="l03180"></a>03180             }
3205 <a name="l03181"></a>03181 
3206 <a name="l03182"></a>03182         <span class="keyword">private</span>:
3207 <a name="l03183"></a>03183             const_iterator11_type it1_;
3208 <a name="l03184"></a>03184             const_subiterator2_type it2_;
3209 <a name="l03185"></a>03185         };
3210 <a name="l03186"></a>03186 <span class="preprocessor">#endif</span>
3211 <a name="l03187"></a>03187 <span class="preprocessor"></span>
3212 <a name="l03188"></a>03188         BOOST_UBLAS_INLINE
3213 <a name="l03189"></a>03189         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a> begin1 ()<span class="keyword"> const </span>{
3214 <a name="l03190"></a>03190             <span class="keywordflow">return</span> find1 (0, 0, 0);
3215 <a name="l03191"></a>03191         }
3216 <a name="l03192"></a>03192         BOOST_UBLAS_INLINE
3217 <a name="l03193"></a>03193         const_iterator1 end1 ()<span class="keyword"> const </span>{
3218 <a name="l03194"></a>03194             <span class="keywordflow">return</span> find1 (0, size1 (), 0);
3219 <a name="l03195"></a>03195         }
3220 <a name="l03196"></a>03196 
3221 <a name="l03197"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">03197</a> <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
3222 <a name="l03198"></a>03198 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a>:
3223 <a name="l03199"></a>03199             <span class="keyword">public</span> container_const_reference&lt;matrix_binary_scalar2&gt;,
3224 <a name="l03200"></a>03200             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename E1::const_iterator2::iterator_category&gt;::template
3225 <a name="l03201"></a>03201                 iterator_base&lt;const_iterator2, value_type&gt;::type {
3226 <a name="l03202"></a>03202         <span class="keyword">public</span>:
3227 <a name="l03203"></a>03203             <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_iterator2::iterator_category iterator_category;
3228 <a name="l03204"></a>03204             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar2::difference_type difference_type;
3229 <a name="l03205"></a>03205             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar2::value_type value_type;
3230 <a name="l03206"></a>03206             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar2::const_reference reference;
3231 <a name="l03207"></a>03207             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar2::const_pointer pointer;
3232 <a name="l03208"></a>03208 
3233 <a name="l03209"></a>03209             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">dual_iterator_type</a>;
3234 <a name="l03210"></a>03210             <span class="keyword">typedef</span> const_reverse_iterator1 dual_reverse_iterator_type;
3235 <a name="l03211"></a>03211 
3236 <a name="l03212"></a>03212             <span class="comment">// Construction and destruction</span>
3237 <a name="l03213"></a>03213             BOOST_UBLAS_INLINE
3238 <a name="l03214"></a>03214             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a> ():
3239 <a name="l03215"></a>03215                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ () {}
3240 <a name="l03216"></a>03216             BOOST_UBLAS_INLINE
3241 <a name="l03217"></a>03217             const_iterator2 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a> &amp;mbs, <span class="keyword">const</span> const_iterator12_type &amp;it1, <span class="keyword">const</span> const_subiterator2_type &amp;it2):
3242 <a name="l03218"></a>03218                 container_const_reference&lt;self_type&gt; (mbs), it1_ (it1), it2_ (it2) {}
3243 <a name="l03219"></a>03219 
3244 <a name="l03220"></a>03220             <span class="comment">// Arithmetic</span>
3245 <a name="l03221"></a>03221             BOOST_UBLAS_INLINE
3246 <a name="l03222"></a>03222             const_iterator2 &amp;operator ++ () {
3247 <a name="l03223"></a>03223                 ++ it1_;
3248 <a name="l03224"></a>03224                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3249 <a name="l03225"></a>03225             }
3250 <a name="l03226"></a>03226             BOOST_UBLAS_INLINE
3251 <a name="l03227"></a>03227             const_iterator2 &amp;operator -- () {
3252 <a name="l03228"></a>03228                 -- it1_;
3253 <a name="l03229"></a>03229                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3254 <a name="l03230"></a>03230             }
3255 <a name="l03231"></a>03231             BOOST_UBLAS_INLINE
3256 <a name="l03232"></a>03232             const_iterator2 &amp;operator += (difference_type n) {
3257 <a name="l03233"></a>03233                 it1_ += n;
3258 <a name="l03234"></a>03234                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3259 <a name="l03235"></a>03235             }
3260 <a name="l03236"></a>03236             BOOST_UBLAS_INLINE
3261 <a name="l03237"></a>03237             const_iterator2 &amp;operator -= (difference_type n) {
3262 <a name="l03238"></a>03238                 it1_ -= n;
3263 <a name="l03239"></a>03239                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3264 <a name="l03240"></a>03240             }
3265 <a name="l03241"></a>03241             BOOST_UBLAS_INLINE
3266 <a name="l03242"></a>03242             difference_type operator - (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
3267 <a name="l03243"></a>03243                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
3268 <a name="l03244"></a>03244                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
3269 <a name="l03245"></a>03245                 <span class="comment">// BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());</span>
3270 <a name="l03246"></a>03246                 <span class="keywordflow">return</span> it1_ - it.it1_;
3271 <a name="l03247"></a>03247             }
3272 <a name="l03248"></a>03248 
3273 <a name="l03249"></a>03249             <span class="comment">// Dereference</span>
3274 <a name="l03250"></a>03250             BOOST_UBLAS_INLINE
3275 <a name="l03251"></a>03251             const_reference operator * ()<span class="keyword"> const </span>{
3276 <a name="l03252"></a>03252                 <span class="keywordflow">return</span> functor_type::apply (*it1_, it2_);
3277 <a name="l03253"></a>03253             }
3278 <a name="l03254"></a>03254             BOOST_UBLAS_INLINE
3279 <a name="l03255"></a>03255             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
3280 <a name="l03256"></a>03256                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
3281 <a name="l03257"></a>03257             }
3282 <a name="l03258"></a>03258 
3283 <a name="l03259"></a>03259 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
3284 <a name="l03260"></a>03260 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
3285 <a name="l03261"></a>03261 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
3286 <a name="l03262"></a>03262 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a>::
3287 <a name="l03263"></a>03263 <span class="preprocessor">#endif</span>
3288 <a name="l03264"></a>03264 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a> begin ()<span class="keyword"> const </span>{
3289 <a name="l03265"></a>03265                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, 0, index2 ());
3290 <a name="l03266"></a>03266             }
3291 <a name="l03267"></a>03267             BOOST_UBLAS_INLINE
3292 <a name="l03268"></a>03268 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
3293 <a name="l03269"></a>03269 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a>::
3294 <a name="l03270"></a>03270 <span class="preprocessor">#endif</span>
3295 <a name="l03271"></a>03271 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator1.html">const_iterator1</a> end ()<span class="keyword"> const </span>{
3296 <a name="l03272"></a>03272                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, (*<span class="keyword">this</span>) ().size1 (), index2 ());
3297 <a name="l03273"></a>03273             }
3298 <a name="l03274"></a>03274             BOOST_UBLAS_INLINE
3299 <a name="l03275"></a>03275 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
3300 <a name="l03276"></a>03276 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a>::
3301 <a name="l03277"></a>03277 <span class="preprocessor">#endif</span>
3302 <a name="l03278"></a>03278 <span class="preprocessor"></span>            const_reverse_iterator1 rbegin ()<span class="keyword"> const </span>{
3303 <a name="l03279"></a>03279                 <span class="keywordflow">return</span> const_reverse_iterator1 (end ());
3304 <a name="l03280"></a>03280             }
3305 <a name="l03281"></a>03281             BOOST_UBLAS_INLINE
3306 <a name="l03282"></a>03282 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
3307 <a name="l03283"></a>03283 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">self_type</a>::
3308 <a name="l03284"></a>03284 <span class="preprocessor">#endif</span>
3309 <a name="l03285"></a>03285 <span class="preprocessor"></span>            const_reverse_iterator1 rend ()<span class="keyword"> const </span>{
3310 <a name="l03286"></a>03286                 <span class="keywordflow">return</span> const_reverse_iterator1 (begin ());
3311 <a name="l03287"></a>03287             }
3312 <a name="l03288"></a>03288 <span class="preprocessor">#endif</span>
3313 <a name="l03289"></a>03289 <span class="preprocessor"></span>
3314 <a name="l03290"></a>03290             <span class="comment">// Indices</span>
3315 <a name="l03291"></a>03291             BOOST_UBLAS_INLINE
3316 <a name="l03292"></a>03292             size_type index1 ()<span class="keyword"> const </span>{
3317 <a name="l03293"></a>03293                 <span class="keywordflow">return</span> it1_.index1 ();
3318 <a name="l03294"></a>03294             }
3319 <a name="l03295"></a>03295             BOOST_UBLAS_INLINE
3320 <a name="l03296"></a>03296             size_type index2 ()<span class="keyword"> const </span>{
3321 <a name="l03297"></a>03297                 <span class="keywordflow">return</span> it1_.index2 ();
3322 <a name="l03298"></a>03298             }
3323 <a name="l03299"></a>03299 
3324 <a name="l03300"></a>03300             <span class="comment">// Assignment </span>
3325 <a name="l03301"></a>03301             BOOST_UBLAS_INLINE
3326 <a name="l03302"></a>03302             const_iterator2 &amp;operator = (<span class="keyword">const</span> const_iterator2 &amp;it) {
3327 <a name="l03303"></a>03303                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
3328 <a name="l03304"></a>03304                 it1_ = it.it1_;
3329 <a name="l03305"></a>03305                 it2_ = it.it2_;
3330 <a name="l03306"></a>03306                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3331 <a name="l03307"></a>03307             }
3332 <a name="l03308"></a>03308 
3333 <a name="l03309"></a>03309             <span class="comment">// Comparison</span>
3334 <a name="l03310"></a>03310             BOOST_UBLAS_INLINE
3335 <a name="l03311"></a>03311             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
3336 <a name="l03312"></a>03312                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
3337 <a name="l03313"></a>03313                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
3338 <a name="l03314"></a>03314                 <span class="comment">// BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());</span>
3339 <a name="l03315"></a>03315                 <span class="keywordflow">return</span> it1_ == it.it1_;
3340 <a name="l03316"></a>03316             }
3341 <a name="l03317"></a>03317             BOOST_UBLAS_INLINE
3342 <a name="l03318"></a>03318             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
3343 <a name="l03319"></a>03319                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
3344 <a name="l03320"></a>03320                 <span class="comment">// FIXME we shouldn&apos;t compare floats</span>
3345 <a name="l03321"></a>03321                 <span class="comment">// BOOST_UBLAS_CHECK (it2_ == it.it2_, external_logic ());</span>
3346 <a name="l03322"></a>03322                 <span class="keywordflow">return</span> it1_ &lt; it.it1_;
3347 <a name="l03323"></a>03323             }
3348 <a name="l03324"></a>03324 
3349 <a name="l03325"></a>03325         <span class="keyword">private</span>:
3350 <a name="l03326"></a>03326             const_iterator12_type it1_;
3351 <a name="l03327"></a>03327             const_subiterator2_type it2_;
3352 <a name="l03328"></a>03328         };
3353 <a name="l03329"></a>03329 <span class="preprocessor">#endif</span>
3354 <a name="l03330"></a>03330 <span class="preprocessor"></span>
3355 <a name="l03331"></a>03331         BOOST_UBLAS_INLINE
3356 <a name="l03332"></a>03332         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2_1_1const__iterator2.html">const_iterator2</a> begin2 ()<span class="keyword"> const </span>{
3357 <a name="l03333"></a>03333             <span class="keywordflow">return</span> find2 (0, 0, 0);
3358 <a name="l03334"></a>03334         }
3359 <a name="l03335"></a>03335         BOOST_UBLAS_INLINE
3360 <a name="l03336"></a>03336         const_iterator2 end2 ()<span class="keyword"> const </span>{
3361 <a name="l03337"></a>03337             <span class="keywordflow">return</span> find2 (0, 0, size2 ());
3362 <a name="l03338"></a>03338         }
3363 <a name="l03339"></a>03339 
3364 <a name="l03340"></a>03340         <span class="comment">// Reverse iterators</span>
3365 <a name="l03341"></a>03341 
3366 <a name="l03342"></a>03342         BOOST_UBLAS_INLINE
3367 <a name="l03343"></a>03343         const_reverse_iterator1 rbegin1 ()<span class="keyword"> const </span>{
3368 <a name="l03344"></a>03344             <span class="keywordflow">return</span> const_reverse_iterator1 (end1 ());
3369 <a name="l03345"></a>03345         }
3370 <a name="l03346"></a>03346         BOOST_UBLAS_INLINE
3371 <a name="l03347"></a>03347         const_reverse_iterator1 rend1 ()<span class="keyword"> const </span>{
3372 <a name="l03348"></a>03348             <span class="keywordflow">return</span> const_reverse_iterator1 (begin1 ());
3373 <a name="l03349"></a>03349         }
3374 <a name="l03350"></a>03350 
3375 <a name="l03351"></a>03351         BOOST_UBLAS_INLINE
3376 <a name="l03352"></a>03352         const_reverse_iterator2 rbegin2 ()<span class="keyword"> const </span>{
3377 <a name="l03353"></a>03353             <span class="keywordflow">return</span> const_reverse_iterator2 (end2 ());
3378 <a name="l03354"></a>03354         }
3379 <a name="l03355"></a>03355         BOOST_UBLAS_INLINE
3380 <a name="l03356"></a>03356         const_reverse_iterator2 rend2 ()<span class="keyword"> const </span>{
3381 <a name="l03357"></a>03357             <span class="keywordflow">return</span> const_reverse_iterator2 (begin2 ());
3382 <a name="l03358"></a>03358         }
3383 <a name="l03359"></a>03359 
3384 <a name="l03360"></a>03360     <span class="keyword">private</span>:
3385 <a name="l03361"></a>03361         expression1_closure_type e1_;
3386 <a name="l03362"></a>03362         expression2_closure_type e2_;
3387 <a name="l03363"></a>03363     };
3388 <a name="l03364"></a>03364 
3389 <a name="l03365"></a>03365     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2, <span class="keyword">class</span> F&gt;
3390 <a name="l03366"></a><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2__traits.html">03366</a>     <span class="keyword">struct </span><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2__traits.html">matrix_binary_scalar2_traits</a> {
3391 <a name="l03367"></a>03367         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">matrix_binary_scalar2&lt;E1, E2, F&gt;</a> expression_type;   <span class="comment">// allow E2 to be builtin type</span>
3392 <a name="l03368"></a>03368 <span class="preprocessor">#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG</span>
3393 <a name="l03369"></a>03369 <span class="preprocessor"></span>        <span class="keyword">typedef</span> expression_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">result_type</a>; 
3394 <a name="l03370"></a>03370 <span class="preprocessor">#else</span>
3395 <a name="l03371"></a>03371 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::matrix_temporary_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2.html">result_type</a>;
3396 <a name="l03372"></a>03372 <span class="preprocessor">#endif</span>
3397 <a name="l03373"></a>03373 <span class="preprocessor"></span>    };
3398 <a name="l03374"></a>03374 
3399 <a name="l03375"></a>03375     <span class="comment">// (m * t) [i] [j] = m [i] [j] * t</span>
3400 <a name="l03376"></a>03376     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> T2&gt;
3401 <a name="l03377"></a>03377     BOOST_UBLAS_INLINE
3402 <a name="l03378"></a>03378     <span class="keyword">typename</span> enable_if&lt; is_convertible&lt;T2, typename E1::value_type&gt;,
3403 <a name="l03379"></a>03379     <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2__traits.html">matrix_binary_scalar2_traits&lt;E1, const T2, scalar_multiplies&lt;typename E1::value_type, T2&gt;</a> &gt;::result_type
3404 <a name="l03380"></a>03380     &gt;::type
3405 <a name="l03381"></a>03381     operator * (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;E1&gt;</a> &amp;e1,
3406 <a name="l03382"></a>03382                 <span class="keyword">const</span> T2 &amp;e2) {
3407 <a name="l03383"></a>03383         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__binary__scalar2__traits.html">matrix_binary_scalar2_traits&lt;E1, const T2, scalar_multiplies&lt;typename E1::value_type, T2&gt;</a> &gt;::expression_type expression_type;
3408 <a name="l03384"></a>03384         <span class="keywordflow">return</span> expression_type (e1 (), e2);
3409 <a name="l03385"></a>03385     }
3410 <a name="l03386"></a>03386 
3411 <a name="l03387"></a>03387     <span class="comment">// (m / t) [i] [j] = m [i] [j] / t</span>
3412 <a name="l03388"></a>03388     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> T2&gt;
3413 <a name="l03389"></a>03389     BOOST_UBLAS_INLINE
3414 <a name="l03390"></a>03390     <span class="keyword">typename</span> matrix_binary_scalar2_traits&lt;E1, const T2, scalar_divides&lt;typename E1::value_type, T2&gt; &gt;::result_type
3415 <a name="l03391"></a>03391     operator / (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
3416 <a name="l03392"></a>03392                 <span class="keyword">const</span> T2 &amp;e2) {
3417 <a name="l03393"></a>03393         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_binary_scalar2_traits&lt;E1, const T2, scalar_divides&lt;typename E1::value_type, T2&gt; &gt;::expression_type expression_type;
3418 <a name="l03394"></a>03394         <span class="keywordflow">return</span> expression_type (e1 (), e2);
3419 <a name="l03395"></a>03395     }
3420 <a name="l03396"></a>03396 
3421 <a name="l03397"></a>03397 
3422 <a name="l03398"></a>03398     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2, <span class="keyword">class</span> F&gt;
3423 <a name="l03399"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">03399</a>     <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">matrix_vector_binary1</a>:
3424 <a name="l03400"></a>03400         <span class="keyword">public</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__expression.html" title="Base class for Vector Expression models.">vector_expression</a>&lt;matrix_vector_binary1&lt;E1, E2, F&gt; &gt; {
3425 <a name="l03401"></a>03401 
3426 <a name="l03402"></a>03402     <span class="keyword">public</span>:
3427 <a name="l03403"></a>03403         <span class="keyword">typedef</span> E1 expression1_type;
3428 <a name="l03404"></a>03404         <span class="keyword">typedef</span> E2 expression2_type;
3429 <a name="l03405"></a>03405     <span class="keyword">private</span>:
3430 <a name="l03406"></a>03406         <span class="keyword">typedef</span> F functor_type;
3431 <a name="l03407"></a>03407     <span class="keyword">public</span>:
3432 <a name="l03408"></a>03408         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_closure_type expression1_closure_type;
3433 <a name="l03409"></a>03409         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_closure_type expression2_closure_type;
3434 <a name="l03410"></a>03410     <span class="keyword">private</span>:
3435 <a name="l03411"></a>03411         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">matrix_vector_binary1&lt;E1, E2, F&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">self_type</a>;
3436 <a name="l03412"></a>03412     <span class="keyword">public</span>:
3437 <a name="l03413"></a>03413 <span class="preprocessor">#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS</span>
3438 <a name="l03414"></a>03414 <span class="preprocessor"></span>        <span class="keyword">using</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__expression.html" title="Base class for Vector Expression models.">vector_expression&lt;self_type&gt;::operator </a>();
3439 <a name="l03415"></a>03415 <span class="preprocessor">#endif</span>
3440 <a name="l03416"></a>03416 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> complexity = 1;
3441 <a name="l03417"></a>03417         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;typename E1::size_type, typename E2::size_type&gt;::promote_type</a> size_type;
3442 <a name="l03418"></a>03418         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;typename E1::difference_type, typename E2::difference_type&gt;::promote_type</a> difference_type;
3443 <a name="l03419"></a>03419         <span class="keyword">typedef</span> <span class="keyword">typename</span> F::result_type value_type;
3444 <a name="l03420"></a>03420         <span class="keyword">typedef</span> value_type const_reference;
3445 <a name="l03421"></a>03421         <span class="keyword">typedef</span> const_reference reference;
3446 <a name="l03422"></a>03422         <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">const_closure_type</a>;
3447 <a name="l03423"></a>03423         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">const_closure_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">closure_type</a>;
3448 <a name="l03424"></a>03424         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">storage_category</a>;
3449 <a name="l03425"></a>03425 
3450 <a name="l03426"></a>03426         <span class="comment">// Construction and destruction</span>
3451 <a name="l03427"></a>03427         BOOST_UBLAS_INLINE
3452 <a name="l03428"></a>03428         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">matrix_vector_binary1</a> (<span class="keyword">const</span> expression1_type &amp;e1, <span class="keyword">const</span> expression2_type &amp;e2):
3453 <a name="l03429"></a>03429             e1_ (e1), e2_ (e2) {}
3454 <a name="l03430"></a>03430 
3455 <a name="l03431"></a>03431         <span class="comment">// Accessors</span>
3456 <a name="l03432"></a>03432         BOOST_UBLAS_INLINE
3457 <a name="l03433"></a>03433         size_type size ()<span class="keyword"> const </span>{
3458 <a name="l03434"></a>03434             <span class="keywordflow">return</span> e1_.size1 ();
3459 <a name="l03435"></a>03435         }
3460 <a name="l03436"></a>03436 
3461 <a name="l03437"></a>03437     <span class="keyword">public</span>:
3462 <a name="l03438"></a>03438         <span class="comment">// Expression accessors</span>
3463 <a name="l03439"></a>03439         BOOST_UBLAS_INLINE
3464 <a name="l03440"></a>03440         <span class="keyword">const</span> expression1_closure_type &amp;expression1 ()<span class="keyword"> const </span>{
3465 <a name="l03441"></a>03441             <span class="keywordflow">return</span> e1_;
3466 <a name="l03442"></a>03442         }
3467 <a name="l03443"></a>03443         BOOST_UBLAS_INLINE
3468 <a name="l03444"></a>03444         <span class="keyword">const</span> expression2_closure_type &amp;expression2 ()<span class="keyword"> const </span>{
3469 <a name="l03445"></a>03445             <span class="keywordflow">return</span> e2_;
3470 <a name="l03446"></a>03446         }
3471 <a name="l03447"></a>03447 
3472 <a name="l03448"></a>03448     <span class="keyword">public</span>:
3473 <a name="l03449"></a>03449         <span class="comment">// Element access</span>
3474 <a name="l03450"></a>03450         BOOST_UBLAS_INLINE
3475 <a name="l03451"></a>03451         const_reference operator () (size_type i)<span class="keyword"> const </span>{
3476 <a name="l03452"></a>03452             <span class="keywordflow">return</span> functor_type::apply (e1_, e2_, i);
3477 <a name="l03453"></a>03453         }
3478 <a name="l03454"></a>03454 
3479 <a name="l03455"></a>03455         <span class="comment">// Closure comparison</span>
3480 <a name="l03456"></a>03456         BOOST_UBLAS_INLINE
3481 <a name="l03457"></a>03457         <span class="keywordtype">bool</span> same_closure (<span class="keyword">const</span> matrix_vector_binary1 &amp;mvb1)<span class="keyword"> const </span>{
3482 <a name="l03458"></a>03458             <span class="keywordflow">return</span> (*this).expression1 ().same_closure (mvb1.expression1 ()) &amp;&amp;
3483 <a name="l03459"></a>03459                    (*this).expression2 ().same_closure (mvb1.expression2 ());
3484 <a name="l03460"></a>03460         }
3485 <a name="l03461"></a>03461 
3486 <a name="l03462"></a>03462         <span class="comment">// Iterator types</span>
3487 <a name="l03463"></a>03463     <span class="keyword">private</span>:
3488 <a name="l03464"></a>03464         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_iterator1 const_subiterator1_type;
3489 <a name="l03465"></a>03465         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_iterator const_subiterator2_type;
3490 <a name="l03466"></a>03466         <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
3491 <a name="l03467"></a>03467 
3492 <a name="l03468"></a>03468     <span class="keyword">public</span>:
3493 <a name="l03469"></a>03469 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
3494 <a name="l03470"></a>03470 <span class="preprocessor"></span>        <span class="keyword">typedef</span> indexed_const_iterator&lt;const_closure_type, typename const_subiterator1_type::iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">const_iterator</a>;
3495 <a name="l03471"></a>03471         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">const_iterator</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">iterator</a>;
3496 <a name="l03472"></a>03472 <span class="preprocessor">#else</span>
3497 <a name="l03473"></a>03473 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">const_iterator</a>;
3498 <a name="l03474"></a>03474         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">const_iterator</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">iterator</a>;
3499 <a name="l03475"></a>03475 <span class="preprocessor">#endif</span>
3500 <a name="l03476"></a>03476 <span class="preprocessor"></span>
3501 <a name="l03477"></a>03477         <span class="comment">// Element lookup</span>
3502 <a name="l03478"></a>03478         BOOST_UBLAS_INLINE
3503 <a name="l03479"></a>03479         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">const_iterator</a> find (size_type i)<span class="keyword"> const </span>{
3504 <a name="l03480"></a>03480 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
3505 <a name="l03481"></a>03481 <span class="preprocessor"></span>            const_subiterator1_type it1 (e1_.find1 (0, i, 0));
3506 <a name="l03482"></a>03482             <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">const_iterator</a> (*<span class="keyword">this</span>, it1.index1 ());
3507 <a name="l03483"></a>03483 <span class="preprocessor">#else</span>
3508 <a name="l03484"></a>03484 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">const_iterator</a> (*<span class="keyword">this</span>, e1_.find1 (0, i, 0));
3509 <a name="l03485"></a>03485 <span class="preprocessor">#endif</span>
3510 <a name="l03486"></a>03486 <span class="preprocessor"></span>        }
3511 <a name="l03487"></a>03487 
3512 <a name="l03488"></a>03488 
3513 <a name="l03489"></a>03489 <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
3514 <a name="l03490"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">03490</a> <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">const_iterator</a>:
3515 <a name="l03491"></a>03491             <span class="keyword">public</span> container_const_reference&lt;matrix_vector_binary1&gt;,
3516 <a name="l03492"></a>03492             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename iterator_restrict_traits&lt;typename E1::const_iterator1::iterator_category,
3517 <a name="l03493"></a>03493                                                                           typename E2::const_iterator::iterator_category&gt;::iterator_category&gt;::template
3518 <a name="l03494"></a>03494                 iterator_base&lt;const_iterator, value_type&gt;::type {
3519 <a name="l03495"></a>03495         <span class="keyword">public</span>:
3520 <a name="l03496"></a>03496             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> E1::const_iterator1::iterator_category, 
3521 <a name="l03497"></a>03497                                                       <span class="keyword">typename</span> E2::const_iterator::iterator_category&gt;::iterator_category iterator_category;
3522 <a name="l03498"></a>03498             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary1::difference_type difference_type;
3523 <a name="l03499"></a>03499             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary1::value_type value_type;
3524 <a name="l03500"></a>03500             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary1::const_reference reference;
3525 <a name="l03501"></a>03501             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary1::const_pointer pointer;
3526 <a name="l03502"></a>03502 
3527 <a name="l03503"></a>03503             <span class="comment">// Construction and destruction</span>
3528 <a name="l03504"></a>03504 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3529 <a name="l03505"></a>03505 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
3530 <a name="l03506"></a>03506             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">const_iterator</a> ():
3531 <a name="l03507"></a>03507                 container_const_reference&lt;self_type&gt; (), it1_ (), e2_begin_ (), e2_end_ () {}
3532 <a name="l03508"></a>03508             BOOST_UBLAS_INLINE
3533 <a name="l03509"></a>03509             const_iterator (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">self_type</a> &amp;mvb, <span class="keyword">const</span> const_subiterator1_type &amp;it1):
3534 <a name="l03510"></a>03510                 container_const_reference&lt;self_type&gt; (mvb), it1_ (it1), e2_begin_ (mvb.expression2 ().begin ()), e2_end_ (mvb.expression2 ().end ()) {}
3535 <a name="l03511"></a>03511 <span class="preprocessor">#else</span>
3536 <a name="l03512"></a>03512 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
3537 <a name="l03513"></a>03513             const_iterator ():
3538 <a name="l03514"></a>03514                 container_const_reference&lt;self_type&gt; (), it1_ () {}
3539 <a name="l03515"></a>03515             BOOST_UBLAS_INLINE
3540 <a name="l03516"></a>03516             const_iterator (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">self_type</a> &amp;mvb, <span class="keyword">const</span> const_subiterator1_type &amp;it1):
3541 <a name="l03517"></a>03517                 container_const_reference&lt;self_type&gt; (mvb), it1_ (it1) {}
3542 <a name="l03518"></a>03518 <span class="preprocessor">#endif</span>
3543 <a name="l03519"></a>03519 <span class="preprocessor"></span>
3544 <a name="l03520"></a>03520         <span class="keyword">private</span>:
3545 <a name="l03521"></a>03521             <span class="comment">// Dense random access specialization</span>
3546 <a name="l03522"></a>03522             BOOST_UBLAS_INLINE
3547 <a name="l03523"></a>03523             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
3548 <a name="l03524"></a>03524                 <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">self_type</a> &amp;mvb = (*this) ();
3549 <a name="l03525"></a>03525 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXING</span>
3550 <a name="l03526"></a>03526 <span class="preprocessor"></span>                <span class="keywordflow">return</span> mvb (index ());
3551 <a name="l03527"></a>03527 <span class="preprocessor">#elif BOOST_UBLAS_USE_ITERATING</span>
3552 <a name="l03528"></a>03528 <span class="preprocessor"></span>                difference_type size = BOOST_UBLAS_SAME (mvb.expression1 ().size2 (), mvb.expression2 ().size ());
3553 <a name="l03529"></a>03529 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3554 <a name="l03530"></a>03530 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (size, it1_.begin (), e2_begin_);
3555 <a name="l03531"></a>03531 <span class="preprocessor">#else</span>
3556 <a name="l03532"></a>03532 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (size, it1_.begin (), mvb.expression2 ().begin ());
3557 <a name="l03533"></a>03533 <span class="preprocessor">#endif</span>
3558 <a name="l03534"></a>03534 <span class="preprocessor"></span><span class="preprocessor">#else</span>
3559 <a name="l03535"></a>03535 <span class="preprocessor"></span>                difference_type size = BOOST_UBLAS_SAME (mvb.expression1 ().size2 (), mvb.expression2 ().size ());
3560 <a name="l03536"></a>03536                 <span class="keywordflow">if</span> (size &gt;= BOOST_UBLAS_ITERATOR_THRESHOLD)
3561 <a name="l03537"></a>03537 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3562 <a name="l03538"></a>03538 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> functor_type::apply (size, it1_.begin (), e2_begin_);
3563 <a name="l03539"></a>03539 <span class="preprocessor">#else</span>
3564 <a name="l03540"></a>03540 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> functor_type::apply (size, it1_.begin (), mvb.expression2 ().begin ());
3565 <a name="l03541"></a>03541 <span class="preprocessor">#endif</span>
3566 <a name="l03542"></a>03542 <span class="preprocessor"></span>                <span class="keywordflow">else</span>
3567 <a name="l03543"></a>03543                     <span class="keywordflow">return</span> mvb (index ());
3568 <a name="l03544"></a>03544 <span class="preprocessor">#endif</span>
3569 <a name="l03545"></a>03545 <span class="preprocessor"></span>            }
3570 <a name="l03546"></a>03546 
3571 <a name="l03547"></a>03547             <span class="comment">// Packed bidirectional specialization</span>
3572 <a name="l03548"></a>03548             BOOST_UBLAS_INLINE
3573 <a name="l03549"></a>03549             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
3574 <a name="l03550"></a>03550 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3575 <a name="l03551"></a>03551 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_.begin (), it1_.end (), e2_begin_, e2_end_);
3576 <a name="l03552"></a>03552 <span class="preprocessor">#else</span>
3577 <a name="l03553"></a>03553 <span class="preprocessor"></span>                <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">self_type</a> &amp;mvb = (*this) ();
3578 <a name="l03554"></a>03554 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
3579 <a name="l03555"></a>03555 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_.begin (), it1_.end (),
3580 <a name="l03556"></a>03556                                         mvb.expression2 ().begin (), mvb.expression2 ().end ());
3581 <a name="l03557"></a>03557 <span class="preprocessor">#else</span>
3582 <a name="l03558"></a>03558 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
3583 <a name="l03559"></a>03559                                         boost::numeric::ublas::end (it1_, iterator1_tag ()),
3584 <a name="l03560"></a>03560                                         mvb.expression2 ().begin (), mvb.expression2 ().end ());
3585 <a name="l03561"></a>03561 <span class="preprocessor">#endif</span>
3586 <a name="l03562"></a>03562 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
3587 <a name="l03563"></a>03563 <span class="preprocessor"></span>            }
3588 <a name="l03564"></a>03564 
3589 <a name="l03565"></a>03565             <span class="comment">// Sparse bidirectional specialization</span>
3590 <a name="l03566"></a>03566             BOOST_UBLAS_INLINE
3591 <a name="l03567"></a>03567             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>)<span class="keyword"> const </span>{
3592 <a name="l03568"></a>03568 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3593 <a name="l03569"></a>03569 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_.begin (), it1_.end (), e2_begin_, e2_end_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
3594 <a name="l03570"></a>03570 <span class="preprocessor">#else</span>
3595 <a name="l03571"></a>03571 <span class="preprocessor"></span>                <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">self_type</a> &amp;mvb = (*this) ();
3596 <a name="l03572"></a>03572 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
3597 <a name="l03573"></a>03573 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_.begin (), it1_.end (),
3598 <a name="l03574"></a>03574                                         mvb.expression2 ().begin (), mvb.expression2 ().end (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
3599 <a name="l03575"></a>03575 <span class="preprocessor">#else</span>
3600 <a name="l03576"></a>03576 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
3601 <a name="l03577"></a>03577                                         boost::numeric::ublas::end (it1_, iterator1_tag ()),
3602 <a name="l03578"></a>03578                                         mvb.expression2 ().begin (), mvb.expression2 ().end (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
3603 <a name="l03579"></a>03579 <span class="preprocessor">#endif</span>
3604 <a name="l03580"></a>03580 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
3605 <a name="l03581"></a>03581 <span class="preprocessor"></span>            }
3606 <a name="l03582"></a>03582 
3607 <a name="l03583"></a>03583         <span class="keyword">public</span>:
3608 <a name="l03584"></a>03584             <span class="comment">// Arithmetic</span>
3609 <a name="l03585"></a>03585             BOOST_UBLAS_INLINE
3610 <a name="l03586"></a>03586             const_iterator &amp;operator ++ () {
3611 <a name="l03587"></a>03587                 ++ it1_;
3612 <a name="l03588"></a>03588                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3613 <a name="l03589"></a>03589             }
3614 <a name="l03590"></a>03590             BOOST_UBLAS_INLINE
3615 <a name="l03591"></a>03591             const_iterator &amp;operator -- () {
3616 <a name="l03592"></a>03592                 -- it1_;
3617 <a name="l03593"></a>03593                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3618 <a name="l03594"></a>03594             }
3619 <a name="l03595"></a>03595             BOOST_UBLAS_INLINE
3620 <a name="l03596"></a>03596             const_iterator &amp;operator += (difference_type n) {
3621 <a name="l03597"></a>03597                 it1_ += n;
3622 <a name="l03598"></a>03598                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3623 <a name="l03599"></a>03599             }
3624 <a name="l03600"></a>03600             BOOST_UBLAS_INLINE
3625 <a name="l03601"></a>03601             const_iterator &amp;operator -= (difference_type n) {
3626 <a name="l03602"></a>03602                 it1_ -= n;
3627 <a name="l03603"></a>03603                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3628 <a name="l03604"></a>03604             }
3629 <a name="l03605"></a>03605             BOOST_UBLAS_INLINE
3630 <a name="l03606"></a>03606             difference_type operator - (<span class="keyword">const</span> const_iterator &amp;it)<span class="keyword"> const </span>{
3631 <a name="l03607"></a>03607                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
3632 <a name="l03608"></a>03608                 <span class="keywordflow">return</span> it1_ - it.it1_;
3633 <a name="l03609"></a>03609             }
3634 <a name="l03610"></a>03610 
3635 <a name="l03611"></a>03611             <span class="comment">// Dereference</span>
3636 <a name="l03612"></a>03612             BOOST_UBLAS_INLINE
3637 <a name="l03613"></a>03613             const_reference operator * ()<span class="keyword"> const </span>{
3638 <a name="l03614"></a>03614                 <span class="keywordflow">return</span> dereference (iterator_category ());
3639 <a name="l03615"></a>03615             }
3640 <a name="l03616"></a>03616             BOOST_UBLAS_INLINE
3641 <a name="l03617"></a>03617             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
3642 <a name="l03618"></a>03618                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
3643 <a name="l03619"></a>03619             }
3644 <a name="l03620"></a>03620 
3645 <a name="l03621"></a>03621             <span class="comment">// Index</span>
3646 <a name="l03622"></a>03622             BOOST_UBLAS_INLINE
3647 <a name="l03623"></a>03623             size_type index ()<span class="keyword"> const </span>{
3648 <a name="l03624"></a>03624                 <span class="keywordflow">return</span> it1_.index1 ();
3649 <a name="l03625"></a>03625             }
3650 <a name="l03626"></a>03626 
3651 <a name="l03627"></a>03627             <span class="comment">// Assignment</span>
3652 <a name="l03628"></a>03628             BOOST_UBLAS_INLINE
3653 <a name="l03629"></a>03629             const_iterator &amp;operator = (<span class="keyword">const</span> const_iterator &amp;it) {
3654 <a name="l03630"></a>03630                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
3655 <a name="l03631"></a>03631                 it1_ = it.it1_;
3656 <a name="l03632"></a>03632 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3657 <a name="l03633"></a>03633 <span class="preprocessor"></span>                e2_begin_ = it.e2_begin_;
3658 <a name="l03634"></a>03634                 e2_end_ = it.e2_end_;
3659 <a name="l03635"></a>03635 <span class="preprocessor">#endif</span>
3660 <a name="l03636"></a>03636 <span class="preprocessor"></span>                <span class="keywordflow">return</span> *<span class="keyword">this</span>;
3661 <a name="l03637"></a>03637             }
3662 <a name="l03638"></a>03638 
3663 <a name="l03639"></a>03639             <span class="comment">// Comparison</span>
3664 <a name="l03640"></a>03640             BOOST_UBLAS_INLINE
3665 <a name="l03641"></a>03641             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator &amp;it)<span class="keyword"> const </span>{
3666 <a name="l03642"></a>03642                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
3667 <a name="l03643"></a>03643                 <span class="keywordflow">return</span> it1_ == it.it1_;
3668 <a name="l03644"></a>03644             }
3669 <a name="l03645"></a>03645             BOOST_UBLAS_INLINE
3670 <a name="l03646"></a>03646             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator &amp;it)<span class="keyword"> const </span>{
3671 <a name="l03647"></a>03647                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
3672 <a name="l03648"></a>03648                 <span class="keywordflow">return</span> it1_ &lt; it.it1_;
3673 <a name="l03649"></a>03649             }
3674 <a name="l03650"></a>03650 
3675 <a name="l03651"></a>03651         <span class="keyword">private</span>:
3676 <a name="l03652"></a>03652             const_subiterator1_type it1_;
3677 <a name="l03653"></a>03653 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3678 <a name="l03654"></a>03654 <span class="preprocessor"></span>            <span class="comment">// Mutable due to assignment</span>
3679 <a name="l03655"></a>03655             <span class="comment">/* const */</span> const_subiterator2_type e2_begin_;
3680 <a name="l03656"></a>03656             <span class="comment">/* const */</span> const_subiterator2_type e2_end_;
3681 <a name="l03657"></a>03657 <span class="preprocessor">#endif</span>
3682 <a name="l03658"></a>03658 <span class="preprocessor"></span>        };
3683 <a name="l03659"></a>03659 <span class="preprocessor">#endif</span>
3684 <a name="l03660"></a>03660 <span class="preprocessor"></span>
3685 <a name="l03661"></a>03661         BOOST_UBLAS_INLINE
3686 <a name="l03662"></a>03662         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1_1_1const__iterator.html">const_iterator</a> begin ()<span class="keyword"> const </span>{
3687 <a name="l03663"></a>03663             <span class="keywordflow">return</span> find (0);
3688 <a name="l03664"></a>03664         }
3689 <a name="l03665"></a>03665         BOOST_UBLAS_INLINE
3690 <a name="l03666"></a>03666         const_iterator end ()<span class="keyword"> const </span>{
3691 <a name="l03667"></a>03667             <span class="keywordflow">return</span> find (size ()); 
3692 <a name="l03668"></a>03668         }
3693 <a name="l03669"></a>03669 
3694 <a name="l03670"></a>03670         <span class="comment">// Reverse iterator</span>
3695 <a name="l03671"></a>03671         <span class="keyword">typedef</span> reverse_iterator_base&lt;const_iterator&gt; const_reverse_iterator;
3696 <a name="l03672"></a>03672 
3697 <a name="l03673"></a>03673         BOOST_UBLAS_INLINE
3698 <a name="l03674"></a>03674         const_reverse_iterator rbegin ()<span class="keyword"> const </span>{
3699 <a name="l03675"></a>03675             <span class="keywordflow">return</span> const_reverse_iterator (end ());
3700 <a name="l03676"></a>03676         }
3701 <a name="l03677"></a>03677         BOOST_UBLAS_INLINE
3702 <a name="l03678"></a>03678         const_reverse_iterator rend ()<span class="keyword"> const </span>{
3703 <a name="l03679"></a>03679             <span class="keywordflow">return</span> const_reverse_iterator (begin ());
3704 <a name="l03680"></a>03680         }
3705 <a name="l03681"></a>03681 
3706 <a name="l03682"></a>03682     <span class="keyword">private</span>:
3707 <a name="l03683"></a>03683         expression1_closure_type e1_;
3708 <a name="l03684"></a>03684         expression2_closure_type e2_;
3709 <a name="l03685"></a>03685     };
3710 <a name="l03686"></a>03686 
3711 <a name="l03687"></a>03687     <span class="keyword">template</span>&lt;<span class="keyword">class</span> T1, <span class="keyword">class</span> E1, <span class="keyword">class</span> T2, <span class="keyword">class</span> E2&gt;
3712 <a name="l03688"></a><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1__traits.html">03688</a>     <span class="keyword">struct </span><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1__traits.html">matrix_vector_binary1_traits</a> {
3713 <a name="l03689"></a>03689         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">storage_category</a>;
3714 <a name="l03690"></a>03690         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1row__major__tag.html">row_major_tag</a> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1row__major__tag.html">orientation_category</a>;
3715 <a name="l03691"></a>03691         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;T1, T2&gt;::promote_type</a> promote_type;
3716 <a name="l03692"></a>03692         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">matrix_vector_binary1&lt;E1, E2, matrix_vector_prod1&lt;E1, E2, promote_type&gt;</a> &gt; expression_type;
3717 <a name="l03693"></a>03693 <span class="preprocessor">#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG</span>
3718 <a name="l03694"></a>03694 <span class="preprocessor"></span>        <span class="keyword">typedef</span> expression_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">result_type</a>;
3719 <a name="l03695"></a>03695 <span class="preprocessor">#else</span>
3720 <a name="l03696"></a>03696 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::vector_temporary_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1.html">result_type</a>;
3721 <a name="l03697"></a>03697 <span class="preprocessor">#endif</span>
3722 <a name="l03698"></a>03698 <span class="preprocessor"></span>    };
3723 <a name="l03699"></a>03699 
3724 <a name="l03700"></a>03700     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
3725 <a name="l03701"></a>03701     BOOST_UBLAS_INLINE
3726 <a name="l03702"></a>03702     <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1__traits.html">matrix_vector_binary1_traits</a>&lt;<span class="keyword">typename</span> E1::value_type, E1,
3727 <a name="l03703"></a>03703                                           <span class="keyword">typename</span> E2::value_type, E2&gt;::result_type
3728 <a name="l03704"></a>03704     prod (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;E1&gt;</a> &amp;e1,
3729 <a name="l03705"></a>03705           <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__expression.html" title="Base class for Vector Expression models.">vector_expression&lt;E2&gt;</a> &amp;e2,
3730 <a name="l03706"></a>03706           <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a>,
3731 <a name="l03707"></a>03707           <a class="code" href="structboost_1_1numeric_1_1ublas_1_1row__major__tag.html">row_major_tag</a>) {
3732 <a name="l03708"></a>03708         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__vector__binary1__traits.html">matrix_vector_binary1_traits</a>&lt;<span class="keyword">typename</span> E1::value_type, E1,
3733 <a name="l03709"></a>03709                                                       <span class="keyword">typename</span> E2::value_type, E2&gt;::expression_type expression_type;
3734 <a name="l03710"></a>03710         <span class="keywordflow">return</span> expression_type (e1 (), e2 ());
3735 <a name="l03711"></a>03711     }
3736 <a name="l03712"></a>03712 
3737 <a name="l03713"></a>03713     <span class="comment">// Dispatcher</span>
3738 <a name="l03714"></a>03714     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
3739 <a name="l03715"></a>03715     BOOST_UBLAS_INLINE
3740 <a name="l03716"></a>03716     <span class="keyword">typename</span> matrix_vector_binary1_traits&lt;<span class="keyword">typename</span> E1::value_type, E1,
3741 <a name="l03717"></a>03717                                           <span class="keyword">typename</span> E2::value_type, E2&gt;::result_type
3742 <a name="l03718"></a>03718     prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
3743 <a name="l03719"></a>03719           <span class="keyword">const</span> vector_expression&lt;E2&gt; &amp;e2) {
3744 <a name="l03720"></a>03720         BOOST_STATIC_ASSERT (E2::complexity == 0);
3745 <a name="l03721"></a>03721         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary1_traits&lt;<span class="keyword">typename</span> E1::value_type, E1,
3746 <a name="l03722"></a>03722                                                       <span class="keyword">typename</span> E2::value_type, E2&gt;::storage_category storage_category;
3747 <a name="l03723"></a>03723         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary1_traits&lt;<span class="keyword">typename</span> E1::value_type, E1,
3748 <a name="l03724"></a>03724                                                       <span class="keyword">typename</span> E2::value_type, E2&gt;::orientation_category orientation_category;
3749 <a name="l03725"></a>03725         <span class="keywordflow">return</span> prod (e1, e2, storage_category (), orientation_category ());
3750 <a name="l03726"></a>03726     }
3751 <a name="l03727"></a>03727 
3752 <a name="l03728"></a>03728     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
3753 <a name="l03729"></a>03729     BOOST_UBLAS_INLINE
3754 <a name="l03730"></a>03730     <span class="keyword">typename</span> matrix_vector_binary1_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
3755 <a name="l03731"></a>03731                                           <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::result_type
3756 <a name="l03732"></a>03732     prec_prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
3757 <a name="l03733"></a>03733                <span class="keyword">const</span> vector_expression&lt;E2&gt; &amp;e2,
3758 <a name="l03734"></a>03734                unknown_storage_tag,
3759 <a name="l03735"></a>03735                row_major_tag) {
3760 <a name="l03736"></a>03736         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary1_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
3761 <a name="l03737"></a>03737                                                       <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::expression_type expression_type;
3762 <a name="l03738"></a>03738         <span class="keywordflow">return</span> expression_type (e1 (), e2 ());
3763 <a name="l03739"></a>03739     }
3764 <a name="l03740"></a>03740 
3765 <a name="l03741"></a>03741     <span class="comment">// Dispatcher</span>
3766 <a name="l03742"></a>03742     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
3767 <a name="l03743"></a>03743     BOOST_UBLAS_INLINE
3768 <a name="l03744"></a>03744     <span class="keyword">typename</span> matrix_vector_binary1_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
3769 <a name="l03745"></a>03745                                           <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::result_type
3770 <a name="l03746"></a>03746     prec_prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
3771 <a name="l03747"></a>03747                <span class="keyword">const</span> vector_expression&lt;E2&gt; &amp;e2) {
3772 <a name="l03748"></a>03748         BOOST_STATIC_ASSERT (E2::complexity == 0);
3773 <a name="l03749"></a>03749         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary1_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
3774 <a name="l03750"></a>03750                                                       <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::storage_category storage_category;
3775 <a name="l03751"></a>03751         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary1_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
3776 <a name="l03752"></a>03752                                                       <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::orientation_category orientation_category;
3777 <a name="l03753"></a>03753         <span class="keywordflow">return</span> prec_prod (e1, e2, storage_category (), orientation_category ());
3778 <a name="l03754"></a>03754     }
3779 <a name="l03755"></a>03755 
3780 <a name="l03756"></a>03756     <span class="keyword">template</span>&lt;<span class="keyword">class</span> V, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
3781 <a name="l03757"></a>03757     BOOST_UBLAS_INLINE
3782 <a name="l03758"></a>03758     V &amp;
3783 <a name="l03759"></a>03759     prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
3784 <a name="l03760"></a>03760           <span class="keyword">const</span> vector_expression&lt;E2&gt; &amp;e2,
3785 <a name="l03761"></a>03761           V &amp;v) {
3786 <a name="l03762"></a>03762         <span class="keywordflow">return</span> v.assign (prod (e1, e2));
3787 <a name="l03763"></a>03763     }
3788 <a name="l03764"></a>03764 
3789 <a name="l03765"></a>03765     <span class="keyword">template</span>&lt;<span class="keyword">class</span> V, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
3790 <a name="l03766"></a>03766     BOOST_UBLAS_INLINE
3791 <a name="l03767"></a>03767     V &amp;
3792 <a name="l03768"></a>03768     prec_prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
3793 <a name="l03769"></a>03769                <span class="keyword">const</span> vector_expression&lt;E2&gt; &amp;e2,
3794 <a name="l03770"></a>03770                V &amp;v) {
3795 <a name="l03771"></a>03771         <span class="keywordflow">return</span> v.assign (prec_prod (e1, e2));
3796 <a name="l03772"></a>03772     }
3797 <a name="l03773"></a>03773 
3798 <a name="l03774"></a>03774     <span class="keyword">template</span>&lt;<span class="keyword">class</span> V, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
3799 <a name="l03775"></a>03775     BOOST_UBLAS_INLINE
3800 <a name="l03776"></a>03776     V
3801 <a name="l03777"></a>03777     prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
3802 <a name="l03778"></a>03778           <span class="keyword">const</span> vector_expression&lt;E2&gt; &amp;e2) {
3803 <a name="l03779"></a>03779         <span class="keywordflow">return</span> V (prod (e1, e2));
3804 <a name="l03780"></a>03780     }
3805 <a name="l03781"></a>03781 
3806 <a name="l03782"></a>03782     <span class="keyword">template</span>&lt;<span class="keyword">class</span> V, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
3807 <a name="l03783"></a>03783     BOOST_UBLAS_INLINE
3808 <a name="l03784"></a>03784     V
3809 <a name="l03785"></a>03785     prec_prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
3810 <a name="l03786"></a>03786                <span class="keyword">const</span> vector_expression&lt;E2&gt; &amp;e2) {
3811 <a name="l03787"></a>03787         <span class="keywordflow">return</span> V (prec_prod (e1, e2));
3812 <a name="l03788"></a>03788     }
3813 <a name="l03789"></a>03789 
3814 <a name="l03790"></a>03790     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2, <span class="keyword">class</span> F&gt;
3815 <a name="l03791"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">03791</a>     <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">matrix_vector_binary2</a>:
3816 <a name="l03792"></a>03792         <span class="keyword">public</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__expression.html" title="Base class for Vector Expression models.">vector_expression</a>&lt;matrix_vector_binary2&lt;E1, E2, F&gt; &gt; {
3817 <a name="l03793"></a>03793 
3818 <a name="l03794"></a>03794         <span class="keyword">typedef</span> E1 expression1_type;
3819 <a name="l03795"></a>03795         <span class="keyword">typedef</span> E2 expression2_type;
3820 <a name="l03796"></a>03796         <span class="keyword">typedef</span> F functor_type;
3821 <a name="l03797"></a>03797     <span class="keyword">public</span>:
3822 <a name="l03798"></a>03798         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_closure_type expression1_closure_type;
3823 <a name="l03799"></a>03799         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_closure_type expression2_closure_type;
3824 <a name="l03800"></a>03800     <span class="keyword">private</span>:
3825 <a name="l03801"></a>03801         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">matrix_vector_binary2&lt;E1, E2, F&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">self_type</a>;
3826 <a name="l03802"></a>03802     <span class="keyword">public</span>:
3827 <a name="l03803"></a>03803 <span class="preprocessor">#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS</span>
3828 <a name="l03804"></a>03804 <span class="preprocessor"></span>        <span class="keyword">using</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__expression.html" title="Base class for Vector Expression models.">vector_expression&lt;self_type&gt;::operator </a>();
3829 <a name="l03805"></a>03805 <span class="preprocessor">#endif</span>
3830 <a name="l03806"></a>03806 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> complexity = 1;
3831 <a name="l03807"></a>03807         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;typename E1::size_type, typename E2::size_type&gt;::promote_type</a> size_type;
3832 <a name="l03808"></a>03808         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;typename E1::difference_type, typename E2::difference_type&gt;::promote_type</a> difference_type;
3833 <a name="l03809"></a>03809         <span class="keyword">typedef</span> <span class="keyword">typename</span> F::result_type value_type;
3834 <a name="l03810"></a>03810         <span class="keyword">typedef</span> value_type const_reference;
3835 <a name="l03811"></a>03811         <span class="keyword">typedef</span> const_reference reference;
3836 <a name="l03812"></a>03812         <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">const_closure_type</a>;
3837 <a name="l03813"></a>03813         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">const_closure_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">closure_type</a>;
3838 <a name="l03814"></a>03814         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a> storage_category;
3839 <a name="l03815"></a>03815 
3840 <a name="l03816"></a>03816         <span class="comment">// Construction and destruction</span>
3841 <a name="l03817"></a>03817         BOOST_UBLAS_INLINE
3842 <a name="l03818"></a>03818         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">matrix_vector_binary2</a> (<span class="keyword">const</span> expression1_type &amp;e1, <span class="keyword">const</span> expression2_type &amp;e2): 
3843 <a name="l03819"></a>03819             e1_ (e1), e2_ (e2) {}
3844 <a name="l03820"></a>03820 
3845 <a name="l03821"></a>03821         <span class="comment">// Accessors</span>
3846 <a name="l03822"></a>03822         BOOST_UBLAS_INLINE
3847 <a name="l03823"></a>03823         size_type size ()<span class="keyword"> const </span>{ 
3848 <a name="l03824"></a>03824             <span class="keywordflow">return</span> e2_.size2 (); 
3849 <a name="l03825"></a>03825         }
3850 <a name="l03826"></a>03826 
3851 <a name="l03827"></a>03827     <span class="keyword">public</span>:
3852 <a name="l03828"></a>03828         <span class="comment">// Expression accessors</span>
3853 <a name="l03829"></a>03829         BOOST_UBLAS_INLINE
3854 <a name="l03830"></a>03830         <span class="keyword">const</span> expression1_closure_type &amp;expression1 ()<span class="keyword"> const </span>{
3855 <a name="l03831"></a>03831             <span class="keywordflow">return</span> e1_;
3856 <a name="l03832"></a>03832         }
3857 <a name="l03833"></a>03833         BOOST_UBLAS_INLINE
3858 <a name="l03834"></a>03834         <span class="keyword">const</span> expression2_closure_type &amp;expression2 ()<span class="keyword"> const </span>{
3859 <a name="l03835"></a>03835             <span class="keywordflow">return</span> e2_;
3860 <a name="l03836"></a>03836         }
3861 <a name="l03837"></a>03837     <span class="keyword">public</span>:
3862 <a name="l03838"></a>03838 
3863 <a name="l03839"></a>03839         <span class="comment">// Element access</span>
3864 <a name="l03840"></a>03840         BOOST_UBLAS_INLINE
3865 <a name="l03841"></a>03841         const_reference operator () (size_type j)<span class="keyword"> const </span>{ 
3866 <a name="l03842"></a>03842             <span class="keywordflow">return</span> functor_type::apply (e1_, e2_, j); 
3867 <a name="l03843"></a>03843         }
3868 <a name="l03844"></a>03844 
3869 <a name="l03845"></a>03845         <span class="comment">// Closure comparison</span>
3870 <a name="l03846"></a>03846         BOOST_UBLAS_INLINE
3871 <a name="l03847"></a>03847         <span class="keywordtype">bool</span> same_closure (<span class="keyword">const</span> matrix_vector_binary2 &amp;mvb2)<span class="keyword"> const </span>{
3872 <a name="l03848"></a>03848             <span class="keywordflow">return</span> (*this).expression1 ().same_closure (mvb2.expression1 ()) &amp;&amp;
3873 <a name="l03849"></a>03849                    (*this).expression2 ().same_closure (mvb2.expression2 ());
3874 <a name="l03850"></a>03850         }
3875 <a name="l03851"></a>03851 
3876 <a name="l03852"></a>03852         <span class="comment">// Iterator types</span>
3877 <a name="l03853"></a>03853     <span class="keyword">private</span>:
3878 <a name="l03854"></a>03854         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_iterator const_subiterator1_type;
3879 <a name="l03855"></a>03855         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_iterator2 const_subiterator2_type;
3880 <a name="l03856"></a>03856         <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
3881 <a name="l03857"></a>03857 
3882 <a name="l03858"></a>03858     <span class="keyword">public</span>:
3883 <a name="l03859"></a>03859 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
3884 <a name="l03860"></a>03860 <span class="preprocessor"></span>        <span class="keyword">typedef</span> indexed_const_iterator&lt;const_closure_type, typename const_subiterator2_type::iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">const_iterator</a>;
3885 <a name="l03861"></a>03861         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">const_iterator</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">iterator</a>;
3886 <a name="l03862"></a>03862 <span class="preprocessor">#else</span>
3887 <a name="l03863"></a>03863 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">const_iterator</a>;
3888 <a name="l03864"></a>03864         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">const_iterator</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">iterator</a>;
3889 <a name="l03865"></a>03865 <span class="preprocessor">#endif</span>
3890 <a name="l03866"></a>03866 <span class="preprocessor"></span>
3891 <a name="l03867"></a>03867         <span class="comment">// Element lookup</span>
3892 <a name="l03868"></a>03868         BOOST_UBLAS_INLINE
3893 <a name="l03869"></a>03869         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">const_iterator</a> find (size_type j)<span class="keyword"> const </span>{
3894 <a name="l03870"></a>03870 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
3895 <a name="l03871"></a>03871 <span class="preprocessor"></span>            const_subiterator2_type it2 (e2_.find2 (0, 0, j));
3896 <a name="l03872"></a>03872             <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">const_iterator</a> (*<span class="keyword">this</span>, it2.index2 ());
3897 <a name="l03873"></a>03873 <span class="preprocessor">#else</span>
3898 <a name="l03874"></a>03874 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">const_iterator</a> (*<span class="keyword">this</span>, e2_.find2 (0, 0, j));
3899 <a name="l03875"></a>03875 <span class="preprocessor">#endif</span>
3900 <a name="l03876"></a>03876 <span class="preprocessor"></span>        }
3901 <a name="l03877"></a>03877 
3902 <a name="l03878"></a>03878 
3903 <a name="l03879"></a>03879 <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
3904 <a name="l03880"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">03880</a> <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">const_iterator</a>:
3905 <a name="l03881"></a>03881             <span class="keyword">public</span> container_const_reference&lt;matrix_vector_binary2&gt;,
3906 <a name="l03882"></a>03882             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename iterator_restrict_traits&lt;typename E1::const_iterator::iterator_category,
3907 <a name="l03883"></a>03883                                                                           typename E2::const_iterator2::iterator_category&gt;::iterator_category&gt;::template
3908 <a name="l03884"></a>03884                 iterator_base&lt;const_iterator, value_type&gt;::type {
3909 <a name="l03885"></a>03885         <span class="keyword">public</span>:
3910 <a name="l03886"></a>03886             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> E1::const_iterator::iterator_category,
3911 <a name="l03887"></a>03887                                                       <span class="keyword">typename</span> E2::const_iterator2::iterator_category&gt;::iterator_category iterator_category;
3912 <a name="l03888"></a>03888             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary2::difference_type difference_type;
3913 <a name="l03889"></a>03889             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary2::value_type value_type;
3914 <a name="l03890"></a>03890             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary2::const_reference reference;
3915 <a name="l03891"></a>03891             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary2::const_pointer pointer;
3916 <a name="l03892"></a>03892 
3917 <a name="l03893"></a>03893             <span class="comment">// Construction and destruction</span>
3918 <a name="l03894"></a>03894 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3919 <a name="l03895"></a>03895 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
3920 <a name="l03896"></a>03896             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">const_iterator</a> ():
3921 <a name="l03897"></a>03897                 container_const_reference&lt;self_type&gt; (), it2_ (), e1_begin_ (), e1_end_ () {}
3922 <a name="l03898"></a>03898             BOOST_UBLAS_INLINE
3923 <a name="l03899"></a>03899             const_iterator (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">self_type</a> &amp;mvb, <span class="keyword">const</span> const_subiterator2_type &amp;it2):
3924 <a name="l03900"></a>03900                 container_const_reference&lt;self_type&gt; (mvb), it2_ (it2), e1_begin_ (mvb.expression1 ().begin ()), e1_end_ (mvb.expression1 ().end ()) {}
3925 <a name="l03901"></a>03901 <span class="preprocessor">#else</span>
3926 <a name="l03902"></a>03902 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
3927 <a name="l03903"></a>03903             const_iterator ():
3928 <a name="l03904"></a>03904                 container_const_reference&lt;self_type&gt; (), it2_ () {}
3929 <a name="l03905"></a>03905             BOOST_UBLAS_INLINE
3930 <a name="l03906"></a>03906             const_iterator (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">self_type</a> &amp;mvb, <span class="keyword">const</span> const_subiterator2_type &amp;it2):
3931 <a name="l03907"></a>03907                 container_const_reference&lt;self_type&gt; (mvb), it2_ (it2) {}
3932 <a name="l03908"></a>03908 <span class="preprocessor">#endif</span>
3933 <a name="l03909"></a>03909 <span class="preprocessor"></span>
3934 <a name="l03910"></a>03910         <span class="keyword">private</span>:
3935 <a name="l03911"></a>03911             <span class="comment">// Dense random access specialization</span>
3936 <a name="l03912"></a>03912             BOOST_UBLAS_INLINE
3937 <a name="l03913"></a>03913             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
3938 <a name="l03914"></a>03914                 <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">self_type</a> &amp;mvb = (*this) ();
3939 <a name="l03915"></a>03915 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXING</span>
3940 <a name="l03916"></a>03916 <span class="preprocessor"></span>                <span class="keywordflow">return</span> mvb (index ());
3941 <a name="l03917"></a>03917 <span class="preprocessor">#elif BOOST_UBLAS_USE_ITERATING</span>
3942 <a name="l03918"></a>03918 <span class="preprocessor"></span>                difference_type size = BOOST_UBLAS_SAME (mvb.expression2 ().size1 (), mvb.expression1 ().size ());
3943 <a name="l03919"></a>03919 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3944 <a name="l03920"></a>03920 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (size, e1_begin_, it2_.begin ());
3945 <a name="l03921"></a>03921 <span class="preprocessor">#else</span>
3946 <a name="l03922"></a>03922 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (size, mvb.expression1 ().begin (), it2_.begin ());
3947 <a name="l03923"></a>03923 <span class="preprocessor">#endif</span>
3948 <a name="l03924"></a>03924 <span class="preprocessor"></span><span class="preprocessor">#else</span>
3949 <a name="l03925"></a>03925 <span class="preprocessor"></span>                difference_type size = BOOST_UBLAS_SAME (mvb.expression2 ().size1 (), mvb.expression1 ().size ());
3950 <a name="l03926"></a>03926                 <span class="keywordflow">if</span> (size &gt;= BOOST_UBLAS_ITERATOR_THRESHOLD)
3951 <a name="l03927"></a>03927 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3952 <a name="l03928"></a>03928 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> functor_type::apply (size, e1_begin_, it2_.begin ());
3953 <a name="l03929"></a>03929 <span class="preprocessor">#else</span>
3954 <a name="l03930"></a>03930 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> functor_type::apply (size, mvb.expression1 ().begin (), it2_.begin ());
3955 <a name="l03931"></a>03931 <span class="preprocessor">#endif</span>
3956 <a name="l03932"></a>03932 <span class="preprocessor"></span>                <span class="keywordflow">else</span>
3957 <a name="l03933"></a>03933                     <span class="keywordflow">return</span> mvb (index ());
3958 <a name="l03934"></a>03934 <span class="preprocessor">#endif</span>
3959 <a name="l03935"></a>03935 <span class="preprocessor"></span>            }
3960 <a name="l03936"></a>03936 
3961 <a name="l03937"></a>03937             <span class="comment">// Packed bidirectional specialization</span>
3962 <a name="l03938"></a>03938             BOOST_UBLAS_INLINE
3963 <a name="l03939"></a>03939             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
3964 <a name="l03940"></a>03940 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3965 <a name="l03941"></a>03941 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (e1_begin_, e1_end_, it2_.begin (), it2_.end ());
3966 <a name="l03942"></a>03942 <span class="preprocessor">#else</span>
3967 <a name="l03943"></a>03943 <span class="preprocessor"></span>                <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">self_type</a> &amp;mvb = (*this) ();
3968 <a name="l03944"></a>03944 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
3969 <a name="l03945"></a>03945 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (mvb.expression1 ().begin (), mvb.expression1 ().end (),
3970 <a name="l03946"></a>03946                                         it2_.begin (), it2_.end ());
3971 <a name="l03947"></a>03947 <span class="preprocessor">#else</span>
3972 <a name="l03948"></a>03948 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (mvb.expression1 ().begin (), mvb.expression1 ().end (),
3973 <a name="l03949"></a>03949                                         boost::numeric::ublas::begin (it2_, iterator2_tag ()),
3974 <a name="l03950"></a>03950                                         boost::numeric::ublas::end (it2_, iterator2_tag ()));
3975 <a name="l03951"></a>03951 <span class="preprocessor">#endif</span>
3976 <a name="l03952"></a>03952 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
3977 <a name="l03953"></a>03953 <span class="preprocessor"></span>            }
3978 <a name="l03954"></a>03954 
3979 <a name="l03955"></a>03955             <span class="comment">// Sparse bidirectional specialization</span>
3980 <a name="l03956"></a>03956             BOOST_UBLAS_INLINE
3981 <a name="l03957"></a>03957             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>)<span class="keyword"> const </span>{
3982 <a name="l03958"></a>03958 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
3983 <a name="l03959"></a>03959 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (e1_begin_, e1_end_, it2_.begin (), it2_.end (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
3984 <a name="l03960"></a>03960 <span class="preprocessor">#else</span>
3985 <a name="l03961"></a>03961 <span class="preprocessor"></span>                <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">self_type</a> &amp;mvb = (*this) ();
3986 <a name="l03962"></a>03962 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
3987 <a name="l03963"></a>03963 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (mvb.expression1 ().begin (), mvb.expression1 ().end (),
3988 <a name="l03964"></a>03964                                         it2_.begin (), it2_.end (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
3989 <a name="l03965"></a>03965 <span class="preprocessor">#else</span>
3990 <a name="l03966"></a>03966 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (mvb.expression1 ().begin (), mvb.expression1 ().end (),
3991 <a name="l03967"></a>03967                                         boost::numeric::ublas::begin (it2_, iterator2_tag ()),
3992 <a name="l03968"></a>03968                                         boost::numeric::ublas::end (it2_, iterator2_tag ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
3993 <a name="l03969"></a>03969 <span class="preprocessor">#endif</span>
3994 <a name="l03970"></a>03970 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
3995 <a name="l03971"></a>03971 <span class="preprocessor"></span>            }
3996 <a name="l03972"></a>03972 
3997 <a name="l03973"></a>03973         <span class="keyword">public</span>:
3998 <a name="l03974"></a>03974             <span class="comment">// Arithmetic</span>
3999 <a name="l03975"></a>03975             BOOST_UBLAS_INLINE
4000 <a name="l03976"></a>03976             const_iterator &amp;operator ++ () {
4001 <a name="l03977"></a>03977                 ++ it2_;
4002 <a name="l03978"></a>03978                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4003 <a name="l03979"></a>03979             }
4004 <a name="l03980"></a>03980             BOOST_UBLAS_INLINE
4005 <a name="l03981"></a>03981             const_iterator &amp;operator -- () {
4006 <a name="l03982"></a>03982                 -- it2_;
4007 <a name="l03983"></a>03983                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4008 <a name="l03984"></a>03984             }
4009 <a name="l03985"></a>03985             BOOST_UBLAS_INLINE
4010 <a name="l03986"></a>03986             const_iterator &amp;operator += (difference_type n) {
4011 <a name="l03987"></a>03987                 it2_ += n;
4012 <a name="l03988"></a>03988                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4013 <a name="l03989"></a>03989             }
4014 <a name="l03990"></a>03990             BOOST_UBLAS_INLINE
4015 <a name="l03991"></a>03991             const_iterator &amp;operator -= (difference_type n) {
4016 <a name="l03992"></a>03992                 it2_ -= n;
4017 <a name="l03993"></a>03993                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4018 <a name="l03994"></a>03994             }
4019 <a name="l03995"></a>03995             BOOST_UBLAS_INLINE
4020 <a name="l03996"></a>03996             difference_type operator - (<span class="keyword">const</span> const_iterator &amp;it)<span class="keyword"> const </span>{
4021 <a name="l03997"></a>03997                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4022 <a name="l03998"></a>03998                 <span class="keywordflow">return</span> it2_ - it.it2_;
4023 <a name="l03999"></a>03999             }
4024 <a name="l04000"></a>04000 
4025 <a name="l04001"></a>04001             <span class="comment">// Dereference</span>
4026 <a name="l04002"></a>04002             BOOST_UBLAS_INLINE
4027 <a name="l04003"></a>04003             const_reference operator * ()<span class="keyword"> const </span>{
4028 <a name="l04004"></a>04004                 <span class="keywordflow">return</span> dereference (iterator_category ());
4029 <a name="l04005"></a>04005             }
4030 <a name="l04006"></a>04006             BOOST_UBLAS_INLINE
4031 <a name="l04007"></a>04007             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
4032 <a name="l04008"></a>04008                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
4033 <a name="l04009"></a>04009             }
4034 <a name="l04010"></a>04010 
4035 <a name="l04011"></a>04011             <span class="comment">// Index</span>
4036 <a name="l04012"></a>04012             BOOST_UBLAS_INLINE
4037 <a name="l04013"></a>04013             size_type index ()<span class="keyword"> const </span>{
4038 <a name="l04014"></a>04014                 <span class="keywordflow">return</span> it2_.index2 ();
4039 <a name="l04015"></a>04015             }
4040 <a name="l04016"></a>04016 
4041 <a name="l04017"></a>04017             <span class="comment">// Assignment </span>
4042 <a name="l04018"></a>04018             BOOST_UBLAS_INLINE
4043 <a name="l04019"></a>04019             const_iterator &amp;operator = (<span class="keyword">const</span> const_iterator &amp;it) {
4044 <a name="l04020"></a>04020                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
4045 <a name="l04021"></a>04021                 it2_ = it.it2_;
4046 <a name="l04022"></a>04022 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4047 <a name="l04023"></a>04023 <span class="preprocessor"></span>                e1_begin_ = it.e1_begin_;
4048 <a name="l04024"></a>04024                 e1_end_ = it.e1_end_;
4049 <a name="l04025"></a>04025 <span class="preprocessor">#endif</span>
4050 <a name="l04026"></a>04026 <span class="preprocessor"></span>                <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4051 <a name="l04027"></a>04027             }
4052 <a name="l04028"></a>04028 
4053 <a name="l04029"></a>04029             <span class="comment">// Comparison</span>
4054 <a name="l04030"></a>04030             BOOST_UBLAS_INLINE
4055 <a name="l04031"></a>04031             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator &amp;it)<span class="keyword"> const </span>{
4056 <a name="l04032"></a>04032                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4057 <a name="l04033"></a>04033                 <span class="keywordflow">return</span> it2_ == it.it2_;
4058 <a name="l04034"></a>04034             }
4059 <a name="l04035"></a>04035             BOOST_UBLAS_INLINE
4060 <a name="l04036"></a>04036             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator &amp;it)<span class="keyword"> const </span>{
4061 <a name="l04037"></a>04037                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4062 <a name="l04038"></a>04038                 <span class="keywordflow">return</span> it2_ &lt; it.it2_;
4063 <a name="l04039"></a>04039             }
4064 <a name="l04040"></a>04040 
4065 <a name="l04041"></a>04041         <span class="keyword">private</span>:
4066 <a name="l04042"></a>04042             const_subiterator2_type it2_;
4067 <a name="l04043"></a>04043 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4068 <a name="l04044"></a>04044 <span class="preprocessor"></span>            <span class="comment">// Mutable due to assignment </span>
4069 <a name="l04045"></a>04045             <span class="comment">/* const */</span> const_subiterator1_type e1_begin_;
4070 <a name="l04046"></a>04046             <span class="comment">/* const */</span> const_subiterator1_type e1_end_;
4071 <a name="l04047"></a>04047 <span class="preprocessor">#endif</span>
4072 <a name="l04048"></a>04048 <span class="preprocessor"></span>        };
4073 <a name="l04049"></a>04049 <span class="preprocessor">#endif</span>
4074 <a name="l04050"></a>04050 <span class="preprocessor"></span>
4075 <a name="l04051"></a>04051         BOOST_UBLAS_INLINE
4076 <a name="l04052"></a>04052         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2_1_1const__iterator.html">const_iterator</a> begin ()<span class="keyword"> const </span>{
4077 <a name="l04053"></a>04053             <span class="keywordflow">return</span> find (0);
4078 <a name="l04054"></a>04054         }
4079 <a name="l04055"></a>04055         BOOST_UBLAS_INLINE
4080 <a name="l04056"></a>04056         const_iterator end ()<span class="keyword"> const </span>{
4081 <a name="l04057"></a>04057             <span class="keywordflow">return</span> find (size ()); 
4082 <a name="l04058"></a>04058         }
4083 <a name="l04059"></a>04059 
4084 <a name="l04060"></a>04060         <span class="comment">// Reverse iterator</span>
4085 <a name="l04061"></a>04061         <span class="keyword">typedef</span> reverse_iterator_base&lt;const_iterator&gt; const_reverse_iterator;
4086 <a name="l04062"></a>04062 
4087 <a name="l04063"></a>04063         BOOST_UBLAS_INLINE
4088 <a name="l04064"></a>04064         const_reverse_iterator rbegin ()<span class="keyword"> const </span>{
4089 <a name="l04065"></a>04065             <span class="keywordflow">return</span> const_reverse_iterator (end ());
4090 <a name="l04066"></a>04066         }
4091 <a name="l04067"></a>04067         BOOST_UBLAS_INLINE
4092 <a name="l04068"></a>04068         const_reverse_iterator rend ()<span class="keyword"> const </span>{
4093 <a name="l04069"></a>04069             <span class="keywordflow">return</span> const_reverse_iterator (begin ());
4094 <a name="l04070"></a>04070         }
4095 <a name="l04071"></a>04071 
4096 <a name="l04072"></a>04072     <span class="keyword">private</span>:
4097 <a name="l04073"></a>04073         expression1_closure_type e1_;
4098 <a name="l04074"></a>04074         expression2_closure_type e2_;
4099 <a name="l04075"></a>04075     };
4100 <a name="l04076"></a>04076 
4101 <a name="l04077"></a>04077     <span class="keyword">template</span>&lt;<span class="keyword">class</span> T1, <span class="keyword">class</span> E1, <span class="keyword">class</span> T2, <span class="keyword">class</span> E2&gt;
4102 <a name="l04078"></a><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2__traits.html">04078</a>     <span class="keyword">struct </span><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2__traits.html">matrix_vector_binary2_traits</a> {
4103 <a name="l04079"></a>04079         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a> storage_category;
4104 <a name="l04080"></a>04080         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1column__major__tag.html">column_major_tag</a> orientation_category;
4105 <a name="l04081"></a>04081         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;T1, T2&gt;::promote_type</a> promote_type;
4106 <a name="l04082"></a>04082         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">matrix_vector_binary2&lt;E1, E2, matrix_vector_prod2&lt;E1, E2, promote_type&gt;</a> &gt; expression_type;
4107 <a name="l04083"></a>04083 <span class="preprocessor">#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG</span>
4108 <a name="l04084"></a>04084 <span class="preprocessor"></span>        <span class="keyword">typedef</span> expression_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">result_type</a>;
4109 <a name="l04085"></a>04085 <span class="preprocessor">#else</span>
4110 <a name="l04086"></a>04086 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::vector_temporary_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2.html">result_type</a>;
4111 <a name="l04087"></a>04087 <span class="preprocessor">#endif</span>
4112 <a name="l04088"></a>04088 <span class="preprocessor"></span>    };
4113 <a name="l04089"></a>04089 
4114 <a name="l04090"></a>04090     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4115 <a name="l04091"></a>04091     BOOST_UBLAS_INLINE
4116 <a name="l04092"></a>04092     <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2__traits.html">matrix_vector_binary2_traits</a>&lt;<span class="keyword">typename</span> E1::value_type, E1,
4117 <a name="l04093"></a>04093                                           <span class="keyword">typename</span> E2::value_type, E2&gt;::result_type
4118 <a name="l04094"></a>04094     prod (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1vector__expression.html" title="Base class for Vector Expression models.">vector_expression&lt;E1&gt;</a> &amp;e1,
4119 <a name="l04095"></a>04095           <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;E2&gt;</a> &amp;e2,
4120 <a name="l04096"></a>04096           <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a>,
4121 <a name="l04097"></a>04097           <a class="code" href="structboost_1_1numeric_1_1ublas_1_1column__major__tag.html">column_major_tag</a>) {
4122 <a name="l04098"></a>04098         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__vector__binary2__traits.html">matrix_vector_binary2_traits</a>&lt;<span class="keyword">typename</span> E1::value_type, E1,
4123 <a name="l04099"></a>04099                                                       <span class="keyword">typename</span> E2::value_type, E2&gt;::expression_type expression_type;
4124 <a name="l04100"></a>04100         <span class="keywordflow">return</span> expression_type (e1 (), e2 ());
4125 <a name="l04101"></a>04101     }
4126 <a name="l04102"></a>04102 
4127 <a name="l04103"></a>04103     <span class="comment">// Dispatcher</span>
4128 <a name="l04104"></a>04104     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4129 <a name="l04105"></a>04105     BOOST_UBLAS_INLINE
4130 <a name="l04106"></a>04106     <span class="keyword">typename</span> matrix_vector_binary2_traits&lt;<span class="keyword">typename</span> E1::value_type, E1,
4131 <a name="l04107"></a>04107                                           <span class="keyword">typename</span> E2::value_type, E2&gt;::result_type
4132 <a name="l04108"></a>04108     prod (<span class="keyword">const</span> vector_expression&lt;E1&gt; &amp;e1,
4133 <a name="l04109"></a>04109           <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2) {
4134 <a name="l04110"></a>04110         BOOST_STATIC_ASSERT (E1::complexity == 0);
4135 <a name="l04111"></a>04111         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary2_traits&lt;<span class="keyword">typename</span> E1::value_type, E1,
4136 <a name="l04112"></a>04112                                                       <span class="keyword">typename</span> E2::value_type, E2&gt;::storage_category storage_category;
4137 <a name="l04113"></a>04113         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary2_traits&lt;<span class="keyword">typename</span> E1::value_type, E1,
4138 <a name="l04114"></a>04114                                                       <span class="keyword">typename</span> E2::value_type, E2&gt;::orientation_category orientation_category;
4139 <a name="l04115"></a>04115         <span class="keywordflow">return</span> prod (e1, e2, storage_category (), orientation_category ());
4140 <a name="l04116"></a>04116     }
4141 <a name="l04117"></a>04117 
4142 <a name="l04118"></a>04118     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4143 <a name="l04119"></a>04119     BOOST_UBLAS_INLINE
4144 <a name="l04120"></a>04120     <span class="keyword">typename</span> matrix_vector_binary2_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
4145 <a name="l04121"></a>04121                                           <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::result_type
4146 <a name="l04122"></a>04122     prec_prod (<span class="keyword">const</span> vector_expression&lt;E1&gt; &amp;e1,
4147 <a name="l04123"></a>04123                <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2,
4148 <a name="l04124"></a>04124                unknown_storage_tag,
4149 <a name="l04125"></a>04125                column_major_tag) {
4150 <a name="l04126"></a>04126         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary2_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
4151 <a name="l04127"></a>04127                                                       <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::expression_type expression_type;
4152 <a name="l04128"></a>04128         <span class="keywordflow">return</span> expression_type (e1 (), e2 ());
4153 <a name="l04129"></a>04129     }
4154 <a name="l04130"></a>04130 
4155 <a name="l04131"></a>04131     <span class="comment">// Dispatcher</span>
4156 <a name="l04132"></a>04132     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4157 <a name="l04133"></a>04133     BOOST_UBLAS_INLINE
4158 <a name="l04134"></a>04134     <span class="keyword">typename</span> matrix_vector_binary2_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
4159 <a name="l04135"></a>04135                                           <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::result_type
4160 <a name="l04136"></a>04136     prec_prod (<span class="keyword">const</span> vector_expression&lt;E1&gt; &amp;e1,
4161 <a name="l04137"></a>04137                <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2) {
4162 <a name="l04138"></a>04138         BOOST_STATIC_ASSERT (E1::complexity == 0);
4163 <a name="l04139"></a>04139         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary2_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
4164 <a name="l04140"></a>04140                                                       <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::storage_category storage_category;
4165 <a name="l04141"></a>04141         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_vector_binary2_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
4166 <a name="l04142"></a>04142                                                       <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::orientation_category orientation_category;
4167 <a name="l04143"></a>04143         <span class="keywordflow">return</span> prec_prod (e1, e2, storage_category (), orientation_category ());
4168 <a name="l04144"></a>04144     }
4169 <a name="l04145"></a>04145 
4170 <a name="l04146"></a>04146     <span class="keyword">template</span>&lt;<span class="keyword">class</span> V, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4171 <a name="l04147"></a>04147     BOOST_UBLAS_INLINE
4172 <a name="l04148"></a>04148     V &amp;
4173 <a name="l04149"></a>04149     prod (<span class="keyword">const</span> vector_expression&lt;E1&gt; &amp;e1,
4174 <a name="l04150"></a>04150           <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2,
4175 <a name="l04151"></a>04151           V &amp;v) {
4176 <a name="l04152"></a>04152         <span class="keywordflow">return</span> v.assign (prod (e1, e2));
4177 <a name="l04153"></a>04153     }
4178 <a name="l04154"></a>04154 
4179 <a name="l04155"></a>04155     <span class="keyword">template</span>&lt;<span class="keyword">class</span> V, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4180 <a name="l04156"></a>04156     BOOST_UBLAS_INLINE
4181 <a name="l04157"></a>04157     V &amp;
4182 <a name="l04158"></a>04158     prec_prod (<span class="keyword">const</span> vector_expression&lt;E1&gt; &amp;e1,
4183 <a name="l04159"></a>04159                <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2,
4184 <a name="l04160"></a>04160                V &amp;v) {
4185 <a name="l04161"></a>04161         <span class="keywordflow">return</span> v.assign (prec_prod (e1, e2));
4186 <a name="l04162"></a>04162     }
4187 <a name="l04163"></a>04163 
4188 <a name="l04164"></a>04164     <span class="keyword">template</span>&lt;<span class="keyword">class</span> V, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4189 <a name="l04165"></a>04165     BOOST_UBLAS_INLINE
4190 <a name="l04166"></a>04166     V
4191 <a name="l04167"></a>04167     prod (<span class="keyword">const</span> vector_expression&lt;E1&gt; &amp;e1,
4192 <a name="l04168"></a>04168           <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2) {
4193 <a name="l04169"></a>04169         <span class="keywordflow">return</span> V (prod (e1, e2));
4194 <a name="l04170"></a>04170     }
4195 <a name="l04171"></a>04171 
4196 <a name="l04172"></a>04172     <span class="keyword">template</span>&lt;<span class="keyword">class</span> V, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4197 <a name="l04173"></a>04173     BOOST_UBLAS_INLINE
4198 <a name="l04174"></a>04174     V
4199 <a name="l04175"></a>04175     prec_prod (<span class="keyword">const</span> vector_expression&lt;E1&gt; &amp;e1,
4200 <a name="l04176"></a>04176                <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2) {
4201 <a name="l04177"></a>04177         <span class="keywordflow">return</span> V (prec_prod (e1, e2));
4202 <a name="l04178"></a>04178     }
4203 <a name="l04179"></a>04179 
4204 <a name="l04180"></a>04180     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2, <span class="keyword">class</span> F&gt;
4205 <a name="l04181"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">04181</a>     <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">matrix_matrix_binary</a>:
4206 <a name="l04182"></a>04182         <span class="keyword">public</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression</a>&lt;matrix_matrix_binary&lt;E1, E2, F&gt; &gt; {
4207 <a name="l04183"></a>04183 
4208 <a name="l04184"></a>04184     <span class="keyword">public</span>:
4209 <a name="l04185"></a>04185         <span class="keyword">typedef</span> E1 expression1_type;
4210 <a name="l04186"></a>04186         <span class="keyword">typedef</span> E2 expression2_type;
4211 <a name="l04187"></a>04187     <span class="keyword">private</span>:
4212 <a name="l04188"></a>04188         <span class="keyword">typedef</span> F functor_type;
4213 <a name="l04189"></a>04189     <span class="keyword">public</span>:
4214 <a name="l04190"></a>04190         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_closure_type expression1_closure_type;
4215 <a name="l04191"></a>04191         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_closure_type expression2_closure_type;
4216 <a name="l04192"></a>04192     <span class="keyword">private</span>:
4217 <a name="l04193"></a>04193         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">matrix_matrix_binary&lt;E1, E2, F&gt;</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a>;
4218 <a name="l04194"></a>04194     <span class="keyword">public</span>:
4219 <a name="l04195"></a>04195 <span class="preprocessor">#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS</span>
4220 <a name="l04196"></a>04196 <span class="preprocessor"></span>        <span class="keyword">using</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;self_type&gt;::operator </a>();
4221 <a name="l04197"></a>04197 <span class="preprocessor">#endif</span>
4222 <a name="l04198"></a>04198 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> complexity = 1;
4223 <a name="l04199"></a>04199         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;typename E1::size_type, typename E2::size_type&gt;::promote_type</a> size_type;
4224 <a name="l04200"></a>04200         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;typename E1::difference_type, typename E2::difference_type&gt;::promote_type</a> difference_type;
4225 <a name="l04201"></a>04201         <span class="keyword">typedef</span> <span class="keyword">typename</span> F::result_type value_type;
4226 <a name="l04202"></a>04202         <span class="keyword">typedef</span> value_type const_reference;
4227 <a name="l04203"></a>04203         <span class="keyword">typedef</span> const_reference reference;
4228 <a name="l04204"></a>04204         <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">const_closure_type</a>;
4229 <a name="l04205"></a>04205         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">const_closure_type</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">closure_type</a>;
4230 <a name="l04206"></a>04206         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__orientation__tag.html">unknown_orientation_tag</a> orientation_category;
4231 <a name="l04207"></a>04207         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a> storage_category;
4232 <a name="l04208"></a>04208 
4233 <a name="l04209"></a>04209         <span class="comment">// Construction and destruction</span>
4234 <a name="l04210"></a>04210         BOOST_UBLAS_INLINE
4235 <a name="l04211"></a>04211         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">matrix_matrix_binary</a> (<span class="keyword">const</span> expression1_type &amp;e1, <span class="keyword">const</span> expression2_type &amp;e2):
4236 <a name="l04212"></a>04212             e1_ (e1), e2_ (e2) {}
4237 <a name="l04213"></a>04213 
4238 <a name="l04214"></a>04214         <span class="comment">// Accessors</span>
4239 <a name="l04215"></a>04215         BOOST_UBLAS_INLINE
4240 <a name="l04216"></a>04216         size_type size1 ()<span class="keyword"> const </span>{
4241 <a name="l04217"></a>04217             <span class="keywordflow">return</span> e1_.size1 ();
4242 <a name="l04218"></a>04218         }
4243 <a name="l04219"></a>04219         BOOST_UBLAS_INLINE
4244 <a name="l04220"></a>04220         size_type size2 ()<span class="keyword"> const </span>{
4245 <a name="l04221"></a>04221             <span class="keywordflow">return</span> e2_.size2 ();
4246 <a name="l04222"></a>04222         }
4247 <a name="l04223"></a>04223 
4248 <a name="l04224"></a>04224     <span class="keyword">public</span>:
4249 <a name="l04225"></a>04225         <span class="comment">// Expression accessors</span>
4250 <a name="l04226"></a>04226         BOOST_UBLAS_INLINE
4251 <a name="l04227"></a>04227         <span class="keyword">const</span> expression1_closure_type &amp;expression1 ()<span class="keyword"> const </span>{
4252 <a name="l04228"></a>04228             <span class="keywordflow">return</span> e1_;
4253 <a name="l04229"></a>04229         }
4254 <a name="l04230"></a>04230         BOOST_UBLAS_INLINE
4255 <a name="l04231"></a>04231         <span class="keyword">const</span> expression2_closure_type &amp;expression2 ()<span class="keyword"> const </span>{
4256 <a name="l04232"></a>04232             <span class="keywordflow">return</span> e2_;
4257 <a name="l04233"></a>04233         }
4258 <a name="l04234"></a>04234 
4259 <a name="l04235"></a>04235     <span class="keyword">public</span>:
4260 <a name="l04236"></a>04236         <span class="comment">// Element access</span>
4261 <a name="l04237"></a>04237         BOOST_UBLAS_INLINE
4262 <a name="l04238"></a>04238         const_reference operator () (size_type i, size_type j)<span class="keyword"> const </span>{
4263 <a name="l04239"></a>04239             <span class="keywordflow">return</span> functor_type::apply (e1_, e2_, i, j);
4264 <a name="l04240"></a>04240         }
4265 <a name="l04241"></a>04241 
4266 <a name="l04242"></a>04242         <span class="comment">// Closure comparison</span>
4267 <a name="l04243"></a>04243         BOOST_UBLAS_INLINE
4268 <a name="l04244"></a>04244         <span class="keywordtype">bool</span> same_closure (<span class="keyword">const</span> matrix_matrix_binary &amp;mmb)<span class="keyword"> const </span>{
4269 <a name="l04245"></a>04245             <span class="keywordflow">return</span> (*this).expression1 ().same_closure (mmb.expression1 ()) &amp;&amp;
4270 <a name="l04246"></a>04246                    (*this).expression2 ().same_closure (mmb.expression2 ());
4271 <a name="l04247"></a>04247         }
4272 <a name="l04248"></a>04248 
4273 <a name="l04249"></a>04249         <span class="comment">// Iterator types</span>
4274 <a name="l04250"></a>04250     <span class="keyword">private</span>:
4275 <a name="l04251"></a>04251         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_iterator1 const_iterator11_type;
4276 <a name="l04252"></a>04252         <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::const_iterator2 const_iterator12_type;
4277 <a name="l04253"></a>04253         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_iterator1 const_iterator21_type;
4278 <a name="l04254"></a>04254         <span class="keyword">typedef</span> <span class="keyword">typename</span> E2::const_iterator2 const_iterator22_type;
4279 <a name="l04255"></a>04255         <span class="keyword">typedef</span> <span class="keyword">const</span> value_type *const_pointer;
4280 <a name="l04256"></a>04256 
4281 <a name="l04257"></a>04257     <span class="keyword">public</span>:
4282 <a name="l04258"></a>04258 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
4283 <a name="l04259"></a>04259 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> const_iterator11_type::iterator_category,
4284 <a name="l04260"></a>04260                                                   <span class="keyword">typename</span> const_iterator22_type::iterator_category&gt;::iterator_category iterator_category;
4285 <a name="l04261"></a>04261         <span class="keyword">typedef</span> indexed_const_iterator1&lt;const_closure_type, iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a>;
4286 <a name="l04262"></a>04262         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">iterator1</a>;
4287 <a name="l04263"></a>04263         <span class="keyword">typedef</span> indexed_const_iterator2&lt;const_closure_type, iterator_category&gt; <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a>;
4288 <a name="l04264"></a>04264         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">iterator2</a>;
4289 <a name="l04265"></a>04265 <span class="preprocessor">#else</span>
4290 <a name="l04266"></a>04266 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a>;
4291 <a name="l04267"></a>04267         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">iterator1</a>;
4292 <a name="l04268"></a>04268         <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a>;
4293 <a name="l04269"></a>04269         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">iterator2</a>;
4294 <a name="l04270"></a>04270 <span class="preprocessor">#endif</span>
4295 <a name="l04271"></a>04271 <span class="preprocessor"></span>        <span class="keyword">typedef</span> reverse_iterator_base1&lt;const_iterator1&gt; const_reverse_iterator1;
4296 <a name="l04272"></a>04272         <span class="keyword">typedef</span> reverse_iterator_base2&lt;const_iterator2&gt; const_reverse_iterator2;
4297 <a name="l04273"></a>04273 
4298 <a name="l04274"></a>04274         <span class="comment">// Element lookup</span>
4299 <a name="l04275"></a>04275         BOOST_UBLAS_INLINE
4300 <a name="l04276"></a>04276         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a> find1 (<span class="keywordtype">int</span> <span class="comment">/* rank */</span>, size_type i, size_type j)<span class="keyword"> const </span>{
4301 <a name="l04277"></a>04277             <span class="comment">// FIXME sparse matrix tests fail!</span>
4302 <a name="l04278"></a>04278             <span class="comment">// const_iterator11_type it11 (e1_.find1 (rank, i, 0));</span>
4303 <a name="l04279"></a>04279             const_iterator11_type it11 (e1_.find1 (0, i, 0));
4304 <a name="l04280"></a>04280 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
4305 <a name="l04281"></a>04281 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, it11.index1 (), j);
4306 <a name="l04282"></a>04282 <span class="preprocessor">#else</span>
4307 <a name="l04283"></a>04283 <span class="preprocessor"></span>            <span class="comment">// FIXME sparse matrix tests fail!</span>
4308 <a name="l04284"></a>04284             <span class="comment">// const_iterator22_type it22 (e2_.find2 (rank, 0, j));</span>
4309 <a name="l04285"></a>04285             const_iterator22_type it22 (e2_.find2 (0, 0, j));
4310 <a name="l04286"></a>04286             <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a> (*<span class="keyword">this</span>, it11, it22);
4311 <a name="l04287"></a>04287 <span class="preprocessor">#endif</span>
4312 <a name="l04288"></a>04288 <span class="preprocessor"></span>        }
4313 <a name="l04289"></a>04289         BOOST_UBLAS_INLINE
4314 <a name="l04290"></a>04290         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a> find2 (<span class="keywordtype">int</span> <span class="comment">/* rank */</span>, size_type i, size_type j)<span class="keyword"> const </span>{
4315 <a name="l04291"></a>04291             <span class="comment">// FIXME sparse matrix tests fail!</span>
4316 <a name="l04292"></a>04292             <span class="comment">// const_iterator22_type it22 (e2_.find2 (rank, 0, j));</span>
4317 <a name="l04293"></a>04293             const_iterator22_type it22 (e2_.find2 (0, 0, j));
4318 <a name="l04294"></a>04294 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
4319 <a name="l04295"></a>04295 <span class="preprocessor"></span>            <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, i, it22.index2 ());
4320 <a name="l04296"></a>04296 <span class="preprocessor">#else</span>
4321 <a name="l04297"></a>04297 <span class="preprocessor"></span>            <span class="comment">// FIXME sparse matrix tests fail!</span>
4322 <a name="l04298"></a>04298             <span class="comment">// const_iterator11_type it11 (e1_.find1 (rank, i, 0));</span>
4323 <a name="l04299"></a>04299             const_iterator11_type it11 (e1_.find1 (0, i, 0));
4324 <a name="l04300"></a>04300             <span class="keywordflow">return</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a> (*<span class="keyword">this</span>, it11, it22);
4325 <a name="l04301"></a>04301 <span class="preprocessor">#endif</span>
4326 <a name="l04302"></a>04302 <span class="preprocessor"></span>        }
4327 <a name="l04303"></a>04303 
4328 <a name="l04304"></a>04304 
4329 <a name="l04305"></a>04305 <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
4330 <a name="l04306"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">04306</a> <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a>:
4331 <a name="l04307"></a>04307             <span class="keyword">public</span> container_const_reference&lt;matrix_matrix_binary&gt;,
4332 <a name="l04308"></a>04308             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename iterator_restrict_traits&lt;typename E1::const_iterator1::iterator_category,
4333 <a name="l04309"></a>04309                                                                           typename E2::const_iterator2::iterator_category&gt;::iterator_category&gt;::template
4334 <a name="l04310"></a>04310                 iterator_base&lt;const_iterator1, value_type&gt;::type {
4335 <a name="l04311"></a>04311         <span class="keyword">public</span>:
4336 <a name="l04312"></a>04312             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> E1::const_iterator1::iterator_category,
4337 <a name="l04313"></a>04313                                                       <span class="keyword">typename</span> E2::const_iterator2::iterator_category&gt;::iterator_category iterator_category;
4338 <a name="l04314"></a>04314             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary::difference_type difference_type;
4339 <a name="l04315"></a>04315             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary::value_type value_type;
4340 <a name="l04316"></a>04316             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary::const_reference reference;
4341 <a name="l04317"></a>04317             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary::const_pointer pointer;
4342 <a name="l04318"></a>04318 
4343 <a name="l04319"></a>04319             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">dual_iterator_type</a>;
4344 <a name="l04320"></a>04320             <span class="keyword">typedef</span> const_reverse_iterator2 dual_reverse_iterator_type;
4345 <a name="l04321"></a>04321 
4346 <a name="l04322"></a>04322             <span class="comment">// Construction and destruction</span>
4347 <a name="l04323"></a>04323 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4348 <a name="l04324"></a>04324 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
4349 <a name="l04325"></a>04325             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a> ():
4350 <a name="l04326"></a>04326                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ (), it2_begin_ (), it2_end_ () {}
4351 <a name="l04327"></a>04327             BOOST_UBLAS_INLINE
4352 <a name="l04328"></a>04328             const_iterator1 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a> &amp;mmb, <span class="keyword">const</span> const_iterator11_type &amp;it1, <span class="keyword">const</span> const_iterator22_type &amp;it2):
4353 <a name="l04329"></a>04329                 container_const_reference&lt;self_type&gt; (mmb), it1_ (it1), it2_ (it2), it2_begin_ (it2.begin ()), it2_end_ (it2.end ()) {}
4354 <a name="l04330"></a>04330 <span class="preprocessor">#else</span>
4355 <a name="l04331"></a>04331 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
4356 <a name="l04332"></a>04332             const_iterator1 ():
4357 <a name="l04333"></a>04333                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ () {}
4358 <a name="l04334"></a>04334             BOOST_UBLAS_INLINE
4359 <a name="l04335"></a>04335             const_iterator1 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a> &amp;mmb, <span class="keyword">const</span> const_iterator11_type &amp;it1, <span class="keyword">const</span> const_iterator22_type &amp;it2):
4360 <a name="l04336"></a>04336                 container_const_reference&lt;self_type&gt; (mmb), it1_ (it1), it2_ (it2) {}
4361 <a name="l04337"></a>04337 <span class="preprocessor">#endif</span>
4362 <a name="l04338"></a>04338 <span class="preprocessor"></span>
4363 <a name="l04339"></a>04339         <span class="keyword">private</span>:
4364 <a name="l04340"></a>04340             <span class="comment">// Random access specialization</span>
4365 <a name="l04341"></a>04341             BOOST_UBLAS_INLINE
4366 <a name="l04342"></a>04342             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
4367 <a name="l04343"></a>04343                 <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a> &amp;mmb = (*this) ();
4368 <a name="l04344"></a>04344 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXING</span>
4369 <a name="l04345"></a>04345 <span class="preprocessor"></span>                <span class="keywordflow">return</span> mmb (index1 (), index2 ());
4370 <a name="l04346"></a>04346 <span class="preprocessor">#elif BOOST_UBLAS_USE_ITERATING</span>
4371 <a name="l04347"></a>04347 <span class="preprocessor"></span>                difference_type size = BOOST_UBLAS_SAME (mmb.expression1 ().size2 (), mmb.expression2 ().size1 ());
4372 <a name="l04348"></a>04348 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4373 <a name="l04349"></a>04349 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (size, it1_.begin (), it2_begin_);
4374 <a name="l04350"></a>04350 <span class="preprocessor">#else</span>
4375 <a name="l04351"></a>04351 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (size, it1_.begin (), it2_.begin ());
4376 <a name="l04352"></a>04352 <span class="preprocessor">#endif</span>
4377 <a name="l04353"></a>04353 <span class="preprocessor"></span><span class="preprocessor">#else</span>
4378 <a name="l04354"></a>04354 <span class="preprocessor"></span>                difference_type size = BOOST_UBLAS_SAME (mmb.expression1 ().size2 (), mmb.expression2 ().size1 ());
4379 <a name="l04355"></a>04355                 <span class="keywordflow">if</span> (size &gt;= BOOST_UBLAS_ITERATOR_THRESHOLD)
4380 <a name="l04356"></a>04356 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4381 <a name="l04357"></a>04357 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> functor_type::apply (size, it1_.begin (), it2_begin_);
4382 <a name="l04358"></a>04358 <span class="preprocessor">#else</span>
4383 <a name="l04359"></a>04359 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> functor_type::apply (size, it1_.begin (), it2_.begin ());
4384 <a name="l04360"></a>04360 <span class="preprocessor">#endif</span>
4385 <a name="l04361"></a>04361 <span class="preprocessor"></span>                <span class="keywordflow">else</span>
4386 <a name="l04362"></a>04362                     <span class="keywordflow">return</span> mmb (index1 (), index2 ());
4387 <a name="l04363"></a>04363 <span class="preprocessor">#endif</span>
4388 <a name="l04364"></a>04364 <span class="preprocessor"></span>            }
4389 <a name="l04365"></a>04365 
4390 <a name="l04366"></a>04366             <span class="comment">// Packed bidirectional specialization</span>
4391 <a name="l04367"></a>04367             BOOST_UBLAS_INLINE
4392 <a name="l04368"></a>04368             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
4393 <a name="l04369"></a>04369 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4394 <a name="l04370"></a>04370 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_.begin (), it1_.end (),
4395 <a name="l04371"></a>04371                                         it2_begin_, it2_end_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
4396 <a name="l04372"></a>04372 <span class="preprocessor">#else</span>
4397 <a name="l04373"></a>04373 <span class="preprocessor"></span><span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
4398 <a name="l04374"></a>04374 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_.begin (), it1_.end (),
4399 <a name="l04375"></a>04375                                         it2_.begin (), it2_.end (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
4400 <a name="l04376"></a>04376 <span class="preprocessor">#else</span>
4401 <a name="l04377"></a>04377 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
4402 <a name="l04378"></a>04378                                         boost::numeric::ublas::end (it1_, iterator1_tag ()),
4403 <a name="l04379"></a>04379                                         boost::numeric::ublas::begin (it2_, iterator2_tag ()),
4404 <a name="l04380"></a>04380                                         boost::numeric::ublas::end (it2_, iterator2_tag ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
4405 <a name="l04381"></a>04381 <span class="preprocessor">#endif</span>
4406 <a name="l04382"></a>04382 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
4407 <a name="l04383"></a>04383 <span class="preprocessor"></span>            }
4408 <a name="l04384"></a>04384 
4409 <a name="l04385"></a>04385             <span class="comment">// Sparse bidirectional specialization</span>
4410 <a name="l04386"></a>04386             BOOST_UBLAS_INLINE
4411 <a name="l04387"></a>04387             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>)<span class="keyword"> const </span>{
4412 <a name="l04388"></a>04388 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4413 <a name="l04389"></a>04389 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_.begin (), it1_.end (),
4414 <a name="l04390"></a>04390                                         it2_begin_, it2_end_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
4415 <a name="l04391"></a>04391 <span class="preprocessor">#else</span>
4416 <a name="l04392"></a>04392 <span class="preprocessor"></span><span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
4417 <a name="l04393"></a>04393 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_.begin (), it1_.end (),
4418 <a name="l04394"></a>04394                                         it2_.begin (), it2_.end (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
4419 <a name="l04395"></a>04395 <span class="preprocessor">#else</span>
4420 <a name="l04396"></a>04396 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
4421 <a name="l04397"></a>04397                                         boost::numeric::ublas::end (it1_, iterator1_tag ()),
4422 <a name="l04398"></a>04398                                         boost::numeric::ublas::begin (it2_, iterator2_tag ()),
4423 <a name="l04399"></a>04399                                         boost::numeric::ublas::end (it2_, iterator2_tag ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
4424 <a name="l04400"></a>04400 <span class="preprocessor">#endif</span>
4425 <a name="l04401"></a>04401 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
4426 <a name="l04402"></a>04402 <span class="preprocessor"></span>            }
4427 <a name="l04403"></a>04403 
4428 <a name="l04404"></a>04404         <span class="keyword">public</span>:
4429 <a name="l04405"></a>04405             <span class="comment">// Arithmetic</span>
4430 <a name="l04406"></a>04406             BOOST_UBLAS_INLINE
4431 <a name="l04407"></a>04407             const_iterator1 &amp;operator ++ () {
4432 <a name="l04408"></a>04408                 ++ it1_;
4433 <a name="l04409"></a>04409                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4434 <a name="l04410"></a>04410             }
4435 <a name="l04411"></a>04411             BOOST_UBLAS_INLINE
4436 <a name="l04412"></a>04412             const_iterator1 &amp;operator -- () {
4437 <a name="l04413"></a>04413                 -- it1_;
4438 <a name="l04414"></a>04414                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4439 <a name="l04415"></a>04415             }
4440 <a name="l04416"></a>04416             BOOST_UBLAS_INLINE
4441 <a name="l04417"></a>04417             const_iterator1 &amp;operator += (difference_type n) {
4442 <a name="l04418"></a>04418                 it1_ += n;
4443 <a name="l04419"></a>04419                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4444 <a name="l04420"></a>04420             }
4445 <a name="l04421"></a>04421             BOOST_UBLAS_INLINE
4446 <a name="l04422"></a>04422             const_iterator1 &amp;operator -= (difference_type n) {
4447 <a name="l04423"></a>04423                 it1_ -= n;
4448 <a name="l04424"></a>04424                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4449 <a name="l04425"></a>04425             }
4450 <a name="l04426"></a>04426             BOOST_UBLAS_INLINE
4451 <a name="l04427"></a>04427             difference_type operator - (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
4452 <a name="l04428"></a>04428                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4453 <a name="l04429"></a>04429                 BOOST_UBLAS_CHECK (it2_ == it.it2_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4454 <a name="l04430"></a>04430                 <span class="keywordflow">return</span> it1_ - it.it1_;
4455 <a name="l04431"></a>04431             }
4456 <a name="l04432"></a>04432 
4457 <a name="l04433"></a>04433             <span class="comment">// Dereference</span>
4458 <a name="l04434"></a>04434             BOOST_UBLAS_INLINE
4459 <a name="l04435"></a>04435             const_reference operator * ()<span class="keyword"> const </span>{
4460 <a name="l04436"></a>04436                 <span class="keywordflow">return</span> dereference (iterator_category ());
4461 <a name="l04437"></a>04437             }
4462 <a name="l04438"></a>04438             BOOST_UBLAS_INLINE
4463 <a name="l04439"></a>04439             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
4464 <a name="l04440"></a>04440                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
4465 <a name="l04441"></a>04441             }
4466 <a name="l04442"></a>04442 
4467 <a name="l04443"></a>04443 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
4468 <a name="l04444"></a>04444 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
4469 <a name="l04445"></a>04445 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
4470 <a name="l04446"></a>04446 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a>::
4471 <a name="l04447"></a>04447 <span class="preprocessor">#endif</span>
4472 <a name="l04448"></a>04448 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a> begin ()<span class="keyword"> const </span>{
4473 <a name="l04449"></a>04449                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), 0);
4474 <a name="l04450"></a>04450             }
4475 <a name="l04451"></a>04451             BOOST_UBLAS_INLINE
4476 <a name="l04452"></a>04452 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
4477 <a name="l04453"></a>04453 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a>::
4478 <a name="l04454"></a>04454 <span class="preprocessor">#endif</span>
4479 <a name="l04455"></a>04455 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a> end ()<span class="keyword"> const </span>{
4480 <a name="l04456"></a>04456                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find2 (1, index1 (), (*this) ().size2 ());
4481 <a name="l04457"></a>04457             }
4482 <a name="l04458"></a>04458             BOOST_UBLAS_INLINE
4483 <a name="l04459"></a>04459 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
4484 <a name="l04460"></a>04460 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a>::
4485 <a name="l04461"></a>04461 <span class="preprocessor">#endif</span>
4486 <a name="l04462"></a>04462 <span class="preprocessor"></span>            const_reverse_iterator2 rbegin ()<span class="keyword"> const </span>{
4487 <a name="l04463"></a>04463                 <span class="keywordflow">return</span> const_reverse_iterator2 (end ());
4488 <a name="l04464"></a>04464             }
4489 <a name="l04465"></a>04465             BOOST_UBLAS_INLINE
4490 <a name="l04466"></a>04466 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
4491 <a name="l04467"></a>04467 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a>::
4492 <a name="l04468"></a>04468 <span class="preprocessor">#endif</span>
4493 <a name="l04469"></a>04469 <span class="preprocessor"></span>            const_reverse_iterator2 rend ()<span class="keyword"> const </span>{
4494 <a name="l04470"></a>04470                 <span class="keywordflow">return</span> const_reverse_iterator2 (begin ());
4495 <a name="l04471"></a>04471             }
4496 <a name="l04472"></a>04472 <span class="preprocessor">#endif</span>
4497 <a name="l04473"></a>04473 <span class="preprocessor"></span>
4498 <a name="l04474"></a>04474             <span class="comment">// Indices</span>
4499 <a name="l04475"></a>04475             BOOST_UBLAS_INLINE
4500 <a name="l04476"></a>04476             size_type index1 ()<span class="keyword"> const </span>{
4501 <a name="l04477"></a>04477                 <span class="keywordflow">return</span> it1_.index1 ();
4502 <a name="l04478"></a>04478             }
4503 <a name="l04479"></a>04479             BOOST_UBLAS_INLINE
4504 <a name="l04480"></a>04480             size_type index2 ()<span class="keyword"> const </span>{
4505 <a name="l04481"></a>04481                 <span class="keywordflow">return</span> it2_.index2 ();
4506 <a name="l04482"></a>04482             }
4507 <a name="l04483"></a>04483 
4508 <a name="l04484"></a>04484             <span class="comment">// Assignment</span>
4509 <a name="l04485"></a>04485             BOOST_UBLAS_INLINE
4510 <a name="l04486"></a>04486             const_iterator1 &amp;operator = (<span class="keyword">const</span> const_iterator1 &amp;it) {
4511 <a name="l04487"></a>04487                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
4512 <a name="l04488"></a>04488                 it1_ = it.it1_;
4513 <a name="l04489"></a>04489                 it2_ = it.it2_;
4514 <a name="l04490"></a>04490 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4515 <a name="l04491"></a>04491 <span class="preprocessor"></span>                it2_begin_ = it.it2_begin_;
4516 <a name="l04492"></a>04492                 it2_end_ = it.it2_end_;
4517 <a name="l04493"></a>04493 <span class="preprocessor">#endif</span>
4518 <a name="l04494"></a>04494 <span class="preprocessor"></span>                <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4519 <a name="l04495"></a>04495             }
4520 <a name="l04496"></a>04496 
4521 <a name="l04497"></a>04497             <span class="comment">// Comparison</span>
4522 <a name="l04498"></a>04498             BOOST_UBLAS_INLINE
4523 <a name="l04499"></a>04499             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
4524 <a name="l04500"></a>04500                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4525 <a name="l04501"></a>04501                 BOOST_UBLAS_CHECK (it2_ == it.it2_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4526 <a name="l04502"></a>04502                 <span class="keywordflow">return</span> it1_ == it.it1_;
4527 <a name="l04503"></a>04503             }
4528 <a name="l04504"></a>04504             BOOST_UBLAS_INLINE
4529 <a name="l04505"></a>04505             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator1 &amp;it)<span class="keyword"> const </span>{
4530 <a name="l04506"></a>04506                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4531 <a name="l04507"></a>04507                 BOOST_UBLAS_CHECK (it2_ == it.it2_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4532 <a name="l04508"></a>04508                 <span class="keywordflow">return</span> it1_ &lt; it.it1_;
4533 <a name="l04509"></a>04509             }
4534 <a name="l04510"></a>04510 
4535 <a name="l04511"></a>04511         <span class="keyword">private</span>:
4536 <a name="l04512"></a>04512             const_iterator11_type it1_;
4537 <a name="l04513"></a>04513             <span class="comment">// Mutable due to assignment</span>
4538 <a name="l04514"></a>04514             <span class="comment">/* const */</span> const_iterator22_type it2_;
4539 <a name="l04515"></a>04515 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4540 <a name="l04516"></a>04516 <span class="preprocessor"></span>            <span class="comment">/* const */</span> const_iterator21_type it2_begin_;
4541 <a name="l04517"></a>04517             <span class="comment">/* const */</span> const_iterator21_type it2_end_;
4542 <a name="l04518"></a>04518 <span class="preprocessor">#endif</span>
4543 <a name="l04519"></a>04519 <span class="preprocessor"></span>        };
4544 <a name="l04520"></a>04520 <span class="preprocessor">#endif</span>
4545 <a name="l04521"></a>04521 <span class="preprocessor"></span>
4546 <a name="l04522"></a>04522         BOOST_UBLAS_INLINE
4547 <a name="l04523"></a>04523         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a> begin1 ()<span class="keyword"> const </span>{
4548 <a name="l04524"></a>04524             <span class="keywordflow">return</span> find1 (0, 0, 0);
4549 <a name="l04525"></a>04525         }
4550 <a name="l04526"></a>04526         BOOST_UBLAS_INLINE
4551 <a name="l04527"></a>04527         const_iterator1 end1 ()<span class="keyword"> const </span>{
4552 <a name="l04528"></a>04528             <span class="keywordflow">return</span> find1 (0, size1 (), 0);
4553 <a name="l04529"></a>04529         }
4554 <a name="l04530"></a>04530 
4555 <a name="l04531"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">04531</a> <span class="preprocessor">#ifndef BOOST_UBLAS_USE_INDEXED_ITERATOR</span>
4556 <a name="l04532"></a>04532 <span class="preprocessor"></span>        <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a>:
4557 <a name="l04533"></a>04533             <span class="keyword">public</span> container_const_reference&lt;matrix_matrix_binary&gt;,
4558 <a name="l04534"></a>04534             <span class="keyword">public</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__base__traits.html">iterator_base_traits</a>&lt;typename iterator_restrict_traits&lt;typename E1::const_iterator1::iterator_category,
4559 <a name="l04535"></a>04535                                                                           typename E2::const_iterator2::iterator_category&gt;::iterator_category&gt;::template
4560 <a name="l04536"></a>04536                 iterator_base&lt;const_iterator2, value_type&gt;::type {
4561 <a name="l04537"></a>04537         <span class="keyword">public</span>:
4562 <a name="l04538"></a>04538             <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1iterator__restrict__traits.html">iterator_restrict_traits</a>&lt;<span class="keyword">typename</span> E1::const_iterator1::iterator_category,
4563 <a name="l04539"></a>04539                                                       <span class="keyword">typename</span> E2::const_iterator2::iterator_category&gt;::iterator_category iterator_category;
4564 <a name="l04540"></a>04540             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary::difference_type difference_type;
4565 <a name="l04541"></a>04541             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary::value_type value_type;
4566 <a name="l04542"></a>04542             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary::const_reference reference;
4567 <a name="l04543"></a>04543             <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary::const_pointer pointer;
4568 <a name="l04544"></a>04544 
4569 <a name="l04545"></a>04545             <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">dual_iterator_type</a>;
4570 <a name="l04546"></a>04546             <span class="keyword">typedef</span> const_reverse_iterator1 dual_reverse_iterator_type;
4571 <a name="l04547"></a>04547 
4572 <a name="l04548"></a>04548             <span class="comment">// Construction and destruction</span>
4573 <a name="l04549"></a>04549 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4574 <a name="l04550"></a>04550 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
4575 <a name="l04551"></a>04551             <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a> ():
4576 <a name="l04552"></a>04552                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ (), it1_begin_ (), it1_end_ () {}
4577 <a name="l04553"></a>04553             BOOST_UBLAS_INLINE
4578 <a name="l04554"></a>04554             const_iterator2 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a> &amp;mmb, <span class="keyword">const</span> const_iterator11_type &amp;it1, <span class="keyword">const</span> const_iterator22_type &amp;it2):
4579 <a name="l04555"></a>04555                 container_const_reference&lt;self_type&gt; (mmb), it1_ (it1), it2_ (it2), it1_begin_ (it1.begin ()), it1_end_ (it1.end ()) {}
4580 <a name="l04556"></a>04556 <span class="preprocessor">#else</span>
4581 <a name="l04557"></a>04557 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
4582 <a name="l04558"></a>04558             const_iterator2 ():
4583 <a name="l04559"></a>04559                 container_const_reference&lt;self_type&gt; (), it1_ (), it2_ () {}
4584 <a name="l04560"></a>04560             BOOST_UBLAS_INLINE
4585 <a name="l04561"></a>04561             const_iterator2 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a> &amp;mmb, <span class="keyword">const</span> const_iterator11_type &amp;it1, <span class="keyword">const</span> const_iterator22_type &amp;it2):
4586 <a name="l04562"></a>04562                 container_const_reference&lt;self_type&gt; (mmb), it1_ (it1), it2_ (it2) {}
4587 <a name="l04563"></a>04563 <span class="preprocessor">#endif</span>
4588 <a name="l04564"></a>04564 <span class="preprocessor"></span>
4589 <a name="l04565"></a>04565         <span class="keyword">private</span>:
4590 <a name="l04566"></a>04566             <span class="comment">// Random access specialization</span>
4591 <a name="l04567"></a>04567             BOOST_UBLAS_INLINE
4592 <a name="l04568"></a>04568             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1dense__random__access__iterator__tag.html">dense_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
4593 <a name="l04569"></a>04569                 <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a> &amp;mmb = (*this) ();
4594 <a name="l04570"></a>04570 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INDEXING</span>
4595 <a name="l04571"></a>04571 <span class="preprocessor"></span>                <span class="keywordflow">return</span> mmb (index1 (), index2 ());
4596 <a name="l04572"></a>04572 <span class="preprocessor">#elif BOOST_UBLAS_USE_ITERATING</span>
4597 <a name="l04573"></a>04573 <span class="preprocessor"></span>                difference_type size = BOOST_UBLAS_SAME (mmb.expression1 ().size2 (), mmb.expression2 ().size1 ());
4598 <a name="l04574"></a>04574 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4599 <a name="l04575"></a>04575 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (size, it1_begin_, it2_.begin ());
4600 <a name="l04576"></a>04576 <span class="preprocessor">#else</span>
4601 <a name="l04577"></a>04577 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (size, it1_.begin (), it2_.begin ());
4602 <a name="l04578"></a>04578 <span class="preprocessor">#endif</span>
4603 <a name="l04579"></a>04579 <span class="preprocessor"></span><span class="preprocessor">#else</span>
4604 <a name="l04580"></a>04580 <span class="preprocessor"></span>                difference_type size = BOOST_UBLAS_SAME (mmb.expression1 ().size2 (), mmb.expression2 ().size1 ());
4605 <a name="l04581"></a>04581                 <span class="keywordflow">if</span> (size &gt;= BOOST_UBLAS_ITERATOR_THRESHOLD)
4606 <a name="l04582"></a>04582 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4607 <a name="l04583"></a>04583 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> functor_type::apply (size, it1_begin_, it2_.begin ());
4608 <a name="l04584"></a>04584 <span class="preprocessor">#else</span>
4609 <a name="l04585"></a>04585 <span class="preprocessor"></span>                    <span class="keywordflow">return</span> functor_type::apply (size, it1_.begin (), it2_.begin ());
4610 <a name="l04586"></a>04586 <span class="preprocessor">#endif</span>
4611 <a name="l04587"></a>04587 <span class="preprocessor"></span>                <span class="keywordflow">else</span>
4612 <a name="l04588"></a>04588                     <span class="keywordflow">return</span> mmb (index1 (), index2 ());
4613 <a name="l04589"></a>04589 <span class="preprocessor">#endif</span>
4614 <a name="l04590"></a>04590 <span class="preprocessor"></span>            }
4615 <a name="l04591"></a>04591 
4616 <a name="l04592"></a>04592             <span class="comment">// Packed bidirectional specialization</span>
4617 <a name="l04593"></a>04593             BOOST_UBLAS_INLINE
4618 <a name="l04594"></a>04594             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a>)<span class="keyword"> const </span>{
4619 <a name="l04595"></a>04595 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4620 <a name="l04596"></a>04596 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_begin_, it1_end_,
4621 <a name="l04597"></a>04597                                         it2_.begin (), it2_.end (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
4622 <a name="l04598"></a>04598 <span class="preprocessor">#else</span>
4623 <a name="l04599"></a>04599 <span class="preprocessor"></span><span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
4624 <a name="l04600"></a>04600 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_.begin (), it1_.end (),
4625 <a name="l04601"></a>04601                                         it2_.begin (), it2_.end (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
4626 <a name="l04602"></a>04602 <span class="preprocessor">#else</span>
4627 <a name="l04603"></a>04603 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
4628 <a name="l04604"></a>04604                                         boost::numeric::ublas::end (it1_, iterator1_tag ()),
4629 <a name="l04605"></a>04605                                         boost::numeric::ublas::begin (it2_, iterator2_tag ()),
4630 <a name="l04606"></a>04606                                         boost::numeric::ublas::end (it2_, iterator2_tag ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1packed__random__access__iterator__tag.html">packed_random_access_iterator_tag</a> ());
4631 <a name="l04607"></a>04607 <span class="preprocessor">#endif</span>
4632 <a name="l04608"></a>04608 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
4633 <a name="l04609"></a>04609 <span class="preprocessor"></span>            }
4634 <a name="l04610"></a>04610 
4635 <a name="l04611"></a>04611             <span class="comment">// Sparse bidirectional specialization</span>
4636 <a name="l04612"></a>04612             BOOST_UBLAS_INLINE
4637 <a name="l04613"></a>04613             value_type dereference (<a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a>)<span class="keyword"> const </span>{
4638 <a name="l04614"></a>04614 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4639 <a name="l04615"></a>04615 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_begin_, it1_end_,
4640 <a name="l04616"></a>04616                                         it2_.begin (), it2_.end (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
4641 <a name="l04617"></a>04617 <span class="preprocessor">#else</span>
4642 <a name="l04618"></a>04618 <span class="preprocessor"></span><span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
4643 <a name="l04619"></a>04619 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (it1_.begin (), it1_.end (),
4644 <a name="l04620"></a>04620                                         it2_.begin (), it2_.end (), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
4645 <a name="l04621"></a>04621 <span class="preprocessor">#else</span>
4646 <a name="l04622"></a>04622 <span class="preprocessor"></span>                <span class="keywordflow">return</span> functor_type::apply (boost::numeric::ublas::begin (it1_, iterator1_tag ()),
4647 <a name="l04623"></a>04623                                         boost::numeric::ublas::end (it1_, iterator1_tag ()),
4648 <a name="l04624"></a>04624                                         boost::numeric::ublas::begin (it2_, iterator2_tag ()),
4649 <a name="l04625"></a>04625                                         boost::numeric::ublas::end (it2_, iterator2_tag ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1sparse__bidirectional__iterator__tag.html">sparse_bidirectional_iterator_tag</a> ());
4650 <a name="l04626"></a>04626 <span class="preprocessor">#endif</span>
4651 <a name="l04627"></a>04627 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
4652 <a name="l04628"></a>04628 <span class="preprocessor"></span>            }
4653 <a name="l04629"></a>04629 
4654 <a name="l04630"></a>04630         <span class="keyword">public</span>:
4655 <a name="l04631"></a>04631             <span class="comment">// Arithmetic</span>
4656 <a name="l04632"></a>04632             BOOST_UBLAS_INLINE
4657 <a name="l04633"></a>04633             const_iterator2 &amp;operator ++ () {
4658 <a name="l04634"></a>04634                 ++ it2_;
4659 <a name="l04635"></a>04635                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4660 <a name="l04636"></a>04636             }
4661 <a name="l04637"></a>04637             BOOST_UBLAS_INLINE
4662 <a name="l04638"></a>04638             const_iterator2 &amp;operator -- () {
4663 <a name="l04639"></a>04639                 -- it2_;
4664 <a name="l04640"></a>04640                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4665 <a name="l04641"></a>04641             }
4666 <a name="l04642"></a>04642             BOOST_UBLAS_INLINE
4667 <a name="l04643"></a>04643             const_iterator2 &amp;operator += (difference_type n) {
4668 <a name="l04644"></a>04644                 it2_ += n;
4669 <a name="l04645"></a>04645                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4670 <a name="l04646"></a>04646             }
4671 <a name="l04647"></a>04647             BOOST_UBLAS_INLINE
4672 <a name="l04648"></a>04648             const_iterator2 &amp;operator -= (difference_type n) {
4673 <a name="l04649"></a>04649                 it2_ -= n;
4674 <a name="l04650"></a>04650                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4675 <a name="l04651"></a>04651             }
4676 <a name="l04652"></a>04652             BOOST_UBLAS_INLINE
4677 <a name="l04653"></a>04653             difference_type operator - (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
4678 <a name="l04654"></a>04654                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4679 <a name="l04655"></a>04655                 BOOST_UBLAS_CHECK (it1_ == it.it1_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4680 <a name="l04656"></a>04656                 <span class="keywordflow">return</span> it2_ - it.it2_;
4681 <a name="l04657"></a>04657             }
4682 <a name="l04658"></a>04658 
4683 <a name="l04659"></a>04659             <span class="comment">// Dereference</span>
4684 <a name="l04660"></a>04660             BOOST_UBLAS_INLINE
4685 <a name="l04661"></a>04661             const_reference operator * ()<span class="keyword"> const </span>{
4686 <a name="l04662"></a>04662                 <span class="keywordflow">return</span> dereference (iterator_category ());
4687 <a name="l04663"></a>04663             }
4688 <a name="l04664"></a>04664             BOOST_UBLAS_INLINE
4689 <a name="l04665"></a>04665             const_reference operator [] (difference_type n)<span class="keyword"> const </span>{
4690 <a name="l04666"></a>04666                 <span class="keywordflow">return</span> *(*<span class="keyword">this</span> + n);
4691 <a name="l04667"></a>04667             }
4692 <a name="l04668"></a>04668 
4693 <a name="l04669"></a>04669 <span class="preprocessor">#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION</span>
4694 <a name="l04670"></a>04670 <span class="preprocessor"></span>            BOOST_UBLAS_INLINE
4695 <a name="l04671"></a>04671 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
4696 <a name="l04672"></a>04672 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a>::
4697 <a name="l04673"></a>04673 <span class="preprocessor">#endif</span>
4698 <a name="l04674"></a>04674 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a> begin ()<span class="keyword"> const </span>{
4699 <a name="l04675"></a>04675                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, 0, index2 ());
4700 <a name="l04676"></a>04676             }
4701 <a name="l04677"></a>04677             BOOST_UBLAS_INLINE
4702 <a name="l04678"></a>04678 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
4703 <a name="l04679"></a>04679 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a>::
4704 <a name="l04680"></a>04680 <span class="preprocessor">#endif</span>
4705 <a name="l04681"></a>04681 <span class="preprocessor"></span>            <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator1.html">const_iterator1</a> end ()<span class="keyword"> const </span>{
4706 <a name="l04682"></a>04682                 <span class="keywordflow">return</span> (*<span class="keyword">this</span>) ().find1 (1, (*<span class="keyword">this</span>) ().size1 (), index2 ());
4707 <a name="l04683"></a>04683             }
4708 <a name="l04684"></a>04684             BOOST_UBLAS_INLINE
4709 <a name="l04685"></a>04685 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
4710 <a name="l04686"></a>04686 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a>::
4711 <a name="l04687"></a>04687 <span class="preprocessor">#endif</span>
4712 <a name="l04688"></a>04688 <span class="preprocessor"></span>            const_reverse_iterator1 rbegin ()<span class="keyword"> const </span>{
4713 <a name="l04689"></a>04689                 <span class="keywordflow">return</span> const_reverse_iterator1 (end ());
4714 <a name="l04690"></a>04690             }
4715 <a name="l04691"></a>04691             BOOST_UBLAS_INLINE
4716 <a name="l04692"></a>04692 <span class="preprocessor">#ifdef BOOST_UBLAS_MSVC_NESTED_CLASS_RELATION</span>
4717 <a name="l04693"></a>04693 <span class="preprocessor"></span>            <span class="keyword">typename</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">self_type</a>::
4718 <a name="l04694"></a>04694 <span class="preprocessor">#endif</span>
4719 <a name="l04695"></a>04695 <span class="preprocessor"></span>            const_reverse_iterator1 rend ()<span class="keyword"> const </span>{
4720 <a name="l04696"></a>04696                 <span class="keywordflow">return</span> const_reverse_iterator1 (begin ());
4721 <a name="l04697"></a>04697             }
4722 <a name="l04698"></a>04698 <span class="preprocessor">#endif</span>
4723 <a name="l04699"></a>04699 <span class="preprocessor"></span>
4724 <a name="l04700"></a>04700             <span class="comment">// Indices</span>
4725 <a name="l04701"></a>04701             BOOST_UBLAS_INLINE
4726 <a name="l04702"></a>04702             size_type index1 ()<span class="keyword"> const </span>{
4727 <a name="l04703"></a>04703                 <span class="keywordflow">return</span> it1_.index1 ();
4728 <a name="l04704"></a>04704             }
4729 <a name="l04705"></a>04705             BOOST_UBLAS_INLINE
4730 <a name="l04706"></a>04706             size_type index2 ()<span class="keyword"> const </span>{
4731 <a name="l04707"></a>04707                 <span class="keywordflow">return</span> it2_.index2 ();
4732 <a name="l04708"></a>04708             }
4733 <a name="l04709"></a>04709 
4734 <a name="l04710"></a>04710             <span class="comment">// Assignment</span>
4735 <a name="l04711"></a>04711             BOOST_UBLAS_INLINE
4736 <a name="l04712"></a>04712             const_iterator2 &amp;operator = (<span class="keyword">const</span> const_iterator2 &amp;it) {
4737 <a name="l04713"></a>04713                 container_const_reference&lt;self_type&gt;::assign (&amp;it ());
4738 <a name="l04714"></a>04714                 it1_ = it.it1_;
4739 <a name="l04715"></a>04715                 it2_ = it.it2_;
4740 <a name="l04716"></a>04716 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4741 <a name="l04717"></a>04717 <span class="preprocessor"></span>                it1_begin_ = it.it1_begin_;
4742 <a name="l04718"></a>04718                 it1_end_ = it.it1_end_;
4743 <a name="l04719"></a>04719 <span class="preprocessor">#endif</span>
4744 <a name="l04720"></a>04720 <span class="preprocessor"></span>                <span class="keywordflow">return</span> *<span class="keyword">this</span>;
4745 <a name="l04721"></a>04721             }
4746 <a name="l04722"></a>04722 
4747 <a name="l04723"></a>04723             <span class="comment">// Comparison</span>
4748 <a name="l04724"></a>04724             BOOST_UBLAS_INLINE
4749 <a name="l04725"></a>04725             <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
4750 <a name="l04726"></a>04726                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4751 <a name="l04727"></a>04727                 BOOST_UBLAS_CHECK (it1_ == it.it1_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4752 <a name="l04728"></a>04728                 <span class="keywordflow">return</span> it2_ == it.it2_;
4753 <a name="l04729"></a>04729             }
4754 <a name="l04730"></a>04730             BOOST_UBLAS_INLINE
4755 <a name="l04731"></a>04731             <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> const_iterator2 &amp;it)<span class="keyword"> const </span>{
4756 <a name="l04732"></a>04732                 BOOST_UBLAS_CHECK ((*<span class="keyword">this</span>) ().same_closure (it ()), <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4757 <a name="l04733"></a>04733                 BOOST_UBLAS_CHECK (it1_ == it.it1_, <a class="code" href="structboost_1_1numeric_1_1ublas_1_1external__logic.html">external_logic</a> ());
4758 <a name="l04734"></a>04734                 <span class="keywordflow">return</span> it2_ &lt; it.it2_;
4759 <a name="l04735"></a>04735             }
4760 <a name="l04736"></a>04736 
4761 <a name="l04737"></a>04737         <span class="keyword">private</span>:
4762 <a name="l04738"></a>04738             <span class="comment">// Mutable due to assignment</span>
4763 <a name="l04739"></a>04739             <span class="comment">/* const */</span> const_iterator11_type it1_;
4764 <a name="l04740"></a>04740             const_iterator22_type it2_;
4765 <a name="l04741"></a>04741 <span class="preprocessor">#ifdef BOOST_UBLAS_USE_INVARIANT_HOISTING</span>
4766 <a name="l04742"></a>04742 <span class="preprocessor"></span>            <span class="comment">/* const */</span> const_iterator12_type it1_begin_;
4767 <a name="l04743"></a>04743             <span class="comment">/* const */</span> const_iterator12_type it1_end_;
4768 <a name="l04744"></a>04744 <span class="preprocessor">#endif</span>
4769 <a name="l04745"></a>04745 <span class="preprocessor"></span>        };
4770 <a name="l04746"></a>04746 <span class="preprocessor">#endif</span>
4771 <a name="l04747"></a>04747 <span class="preprocessor"></span>
4772 <a name="l04748"></a>04748         BOOST_UBLAS_INLINE
4773 <a name="l04749"></a>04749         <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary_1_1const__iterator2.html">const_iterator2</a> begin2 ()<span class="keyword"> const </span>{
4774 <a name="l04750"></a>04750             <span class="keywordflow">return</span> find2 (0, 0, 0);
4775 <a name="l04751"></a>04751         }
4776 <a name="l04752"></a>04752         BOOST_UBLAS_INLINE
4777 <a name="l04753"></a>04753         const_iterator2 end2 ()<span class="keyword"> const </span>{
4778 <a name="l04754"></a>04754             <span class="keywordflow">return</span> find2 (0, 0, size2 ());
4779 <a name="l04755"></a>04755         }
4780 <a name="l04756"></a>04756 
4781 <a name="l04757"></a>04757         <span class="comment">// Reverse iterators</span>
4782 <a name="l04758"></a>04758 
4783 <a name="l04759"></a>04759         BOOST_UBLAS_INLINE
4784 <a name="l04760"></a>04760         const_reverse_iterator1 rbegin1 ()<span class="keyword"> const </span>{
4785 <a name="l04761"></a>04761             <span class="keywordflow">return</span> const_reverse_iterator1 (end1 ());
4786 <a name="l04762"></a>04762         }
4787 <a name="l04763"></a>04763         BOOST_UBLAS_INLINE
4788 <a name="l04764"></a>04764         const_reverse_iterator1 rend1 ()<span class="keyword"> const </span>{
4789 <a name="l04765"></a>04765             <span class="keywordflow">return</span> const_reverse_iterator1 (begin1 ());
4790 <a name="l04766"></a>04766         }
4791 <a name="l04767"></a>04767 
4792 <a name="l04768"></a>04768         BOOST_UBLAS_INLINE
4793 <a name="l04769"></a>04769         const_reverse_iterator2 rbegin2 ()<span class="keyword"> const </span>{
4794 <a name="l04770"></a>04770             <span class="keywordflow">return</span> const_reverse_iterator2 (end2 ());
4795 <a name="l04771"></a>04771         }
4796 <a name="l04772"></a>04772         BOOST_UBLAS_INLINE
4797 <a name="l04773"></a>04773         const_reverse_iterator2 rend2 ()<span class="keyword"> const </span>{
4798 <a name="l04774"></a>04774             <span class="keywordflow">return</span> const_reverse_iterator2 (begin2 ());
4799 <a name="l04775"></a>04775         }
4800 <a name="l04776"></a>04776 
4801 <a name="l04777"></a>04777     <span class="keyword">private</span>:
4802 <a name="l04778"></a>04778         expression1_closure_type e1_;
4803 <a name="l04779"></a>04779         expression2_closure_type e2_;
4804 <a name="l04780"></a>04780     };
4805 <a name="l04781"></a>04781 
4806 <a name="l04782"></a>04782     <span class="keyword">template</span>&lt;<span class="keyword">class</span> T1, <span class="keyword">class</span> E1, <span class="keyword">class</span> T2, <span class="keyword">class</span> E2&gt;
4807 <a name="l04783"></a><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary__traits.html">04783</a>     <span class="keyword">struct </span><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary__traits.html">matrix_matrix_binary_traits</a> {
4808 <a name="l04784"></a>04784         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a> storage_category;
4809 <a name="l04785"></a>04785         <span class="keyword">typedef</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__orientation__tag.html">unknown_orientation_tag</a> orientation_category;
4810 <a name="l04786"></a>04786         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1promote__traits.html">promote_traits&lt;T1, T2&gt;::promote_type</a> promote_type;
4811 <a name="l04787"></a>04787         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">matrix_matrix_binary&lt;E1, E2, matrix_matrix_prod&lt;E1, E2, promote_type&gt;</a> &gt; expression_type;
4812 <a name="l04788"></a>04788 <span class="preprocessor">#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG</span>
4813 <a name="l04789"></a>04789 <span class="preprocessor"></span>        <span class="keyword">typedef</span> expression_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">result_type</a>;
4814 <a name="l04790"></a>04790 <span class="preprocessor">#else</span>
4815 <a name="l04791"></a>04791 <span class="preprocessor"></span>        <span class="keyword">typedef</span> <span class="keyword">typename</span> E1::matrix_temporary_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary.html">result_type</a>;
4816 <a name="l04792"></a>04792 <span class="preprocessor">#endif</span>
4817 <a name="l04793"></a>04793 <span class="preprocessor"></span>    };
4818 <a name="l04794"></a>04794 
4819 <a name="l04795"></a>04795     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4820 <a name="l04796"></a>04796     BOOST_UBLAS_INLINE
4821 <a name="l04797"></a>04797     <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary__traits.html">matrix_matrix_binary_traits</a>&lt;<span class="keyword">typename</span> E1::value_type, E1,
4822 <a name="l04798"></a>04798                                          <span class="keyword">typename</span> E2::value_type, E2&gt;::result_type
4823 <a name="l04799"></a>04799     prod (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;E1&gt;</a> &amp;e1,
4824 <a name="l04800"></a>04800           <span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;E2&gt;</a> &amp;e2,
4825 <a name="l04801"></a>04801           <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__storage__tag.html">unknown_storage_tag</a>,
4826 <a name="l04802"></a>04802           <a class="code" href="structboost_1_1numeric_1_1ublas_1_1unknown__orientation__tag.html">unknown_orientation_tag</a>) {
4827 <a name="l04803"></a>04803         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__matrix__binary__traits.html">matrix_matrix_binary_traits</a>&lt;<span class="keyword">typename</span> E1::value_type, E1,
4828 <a name="l04804"></a>04804                                                      <span class="keyword">typename</span> E2::value_type, E2&gt;::expression_type expression_type;
4829 <a name="l04805"></a>04805         <span class="keywordflow">return</span> expression_type (e1 (), e2 ());
4830 <a name="l04806"></a>04806     }
4831 <a name="l04807"></a>04807 
4832 <a name="l04808"></a>04808     <span class="comment">// Dispatcher</span>
4833 <a name="l04809"></a>04809     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4834 <a name="l04810"></a>04810     BOOST_UBLAS_INLINE
4835 <a name="l04811"></a>04811     <span class="keyword">typename</span> matrix_matrix_binary_traits&lt;<span class="keyword">typename</span> E1::value_type, E1,
4836 <a name="l04812"></a>04812                                          <span class="keyword">typename</span> E2::value_type, E2&gt;::result_type
4837 <a name="l04813"></a>04813     prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
4838 <a name="l04814"></a>04814           <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2) {
4839 <a name="l04815"></a>04815         BOOST_STATIC_ASSERT (E1::complexity == 0 &amp;&amp; E2::complexity == 0);
4840 <a name="l04816"></a>04816         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary_traits&lt;<span class="keyword">typename</span> E1::value_type, E1,
4841 <a name="l04817"></a>04817                                                      <span class="keyword">typename</span> E2::value_type, E2&gt;::storage_category storage_category;
4842 <a name="l04818"></a>04818         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary_traits&lt;<span class="keyword">typename</span> E1::value_type, E1,
4843 <a name="l04819"></a>04819                                                      <span class="keyword">typename</span> E2::value_type, E2&gt;::orientation_category orientation_category;
4844 <a name="l04820"></a>04820         <span class="keywordflow">return</span> prod (e1, e2, storage_category (), orientation_category ());
4845 <a name="l04821"></a>04821     }
4846 <a name="l04822"></a>04822 
4847 <a name="l04823"></a>04823     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4848 <a name="l04824"></a>04824     BOOST_UBLAS_INLINE
4849 <a name="l04825"></a>04825     <span class="keyword">typename</span> matrix_matrix_binary_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
4850 <a name="l04826"></a>04826                                          <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::result_type
4851 <a name="l04827"></a>04827     prec_prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
4852 <a name="l04828"></a>04828                <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2,
4853 <a name="l04829"></a>04829                unknown_storage_tag,
4854 <a name="l04830"></a>04830                unknown_orientation_tag) {
4855 <a name="l04831"></a>04831         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
4856 <a name="l04832"></a>04832                                                      <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::expression_type expression_type;
4857 <a name="l04833"></a>04833         <span class="keywordflow">return</span> expression_type (e1 (), e2 ());
4858 <a name="l04834"></a>04834     }
4859 <a name="l04835"></a>04835 
4860 <a name="l04836"></a>04836     <span class="comment">// Dispatcher</span>
4861 <a name="l04837"></a>04837     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4862 <a name="l04838"></a>04838     BOOST_UBLAS_INLINE
4863 <a name="l04839"></a>04839     <span class="keyword">typename</span> matrix_matrix_binary_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
4864 <a name="l04840"></a>04840                                          <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::result_type
4865 <a name="l04841"></a>04841     prec_prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
4866 <a name="l04842"></a>04842                <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2) {
4867 <a name="l04843"></a>04843         BOOST_STATIC_ASSERT (E1::complexity == 0 &amp;&amp; E2::complexity == 0);
4868 <a name="l04844"></a>04844         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
4869 <a name="l04845"></a>04845                                                      <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::storage_category storage_category;
4870 <a name="l04846"></a>04846         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_matrix_binary_traits&lt;typename type_traits&lt;typename E1::value_type&gt;::precision_type, E1,
4871 <a name="l04847"></a>04847                                                      <span class="keyword">typename</span> type_traits&lt;typename E2::value_type&gt;::precision_type, E2&gt;::orientation_category orientation_category;
4872 <a name="l04848"></a>04848         <span class="keywordflow">return</span> prec_prod (e1, e2, storage_category (), orientation_category ());
4873 <a name="l04849"></a>04849     }
4874 <a name="l04850"></a>04850 
4875 <a name="l04851"></a>04851     <span class="keyword">template</span>&lt;<span class="keyword">class</span> M, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4876 <a name="l04852"></a>04852     BOOST_UBLAS_INLINE
4877 <a name="l04853"></a>04853     M &amp;
4878 <a name="l04854"></a>04854     prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
4879 <a name="l04855"></a>04855           <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2,
4880 <a name="l04856"></a>04856           M &amp;m) {
4881 <a name="l04857"></a>04857         <span class="keywordflow">return</span> m.assign (prod (e1, e2));
4882 <a name="l04858"></a>04858     }
4883 <a name="l04859"></a>04859 
4884 <a name="l04860"></a>04860     <span class="keyword">template</span>&lt;<span class="keyword">class</span> M, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4885 <a name="l04861"></a>04861     BOOST_UBLAS_INLINE
4886 <a name="l04862"></a>04862     M &amp;
4887 <a name="l04863"></a>04863     prec_prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
4888 <a name="l04864"></a>04864                <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2,
4889 <a name="l04865"></a>04865                M &amp;m) {
4890 <a name="l04866"></a>04866         <span class="keywordflow">return</span> m.assign (prec_prod (e1, e2));
4891 <a name="l04867"></a>04867     }
4892 <a name="l04868"></a>04868 
4893 <a name="l04869"></a>04869     <span class="keyword">template</span>&lt;<span class="keyword">class</span> M, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4894 <a name="l04870"></a>04870     BOOST_UBLAS_INLINE
4895 <a name="l04871"></a>04871     M
4896 <a name="l04872"></a>04872     prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
4897 <a name="l04873"></a>04873           <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2) {
4898 <a name="l04874"></a>04874         <span class="keywordflow">return</span> M (prod (e1, e2));
4899 <a name="l04875"></a>04875     }
4900 <a name="l04876"></a>04876 
4901 <a name="l04877"></a>04877     <span class="keyword">template</span>&lt;<span class="keyword">class</span> M, <span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;
4902 <a name="l04878"></a>04878     BOOST_UBLAS_INLINE
4903 <a name="l04879"></a>04879     M
4904 <a name="l04880"></a>04880     prec_prod (<span class="keyword">const</span> matrix_expression&lt;E1&gt; &amp;e1,
4905 <a name="l04881"></a>04881                <span class="keyword">const</span> matrix_expression&lt;E2&gt; &amp;e2) {
4906 <a name="l04882"></a>04882         <span class="keywordflow">return</span> M (prec_prod (e1, e2));
4907 <a name="l04883"></a>04883     }
4908 <a name="l04884"></a>04884 
4909 <a name="l04885"></a>04885     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E, <span class="keyword">class</span> F&gt;
4910 <a name="l04886"></a><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__scalar__unary.html">04886</a>     <span class="keyword">class </span><a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__scalar__unary.html">matrix_scalar_unary</a>:
4911 <a name="l04887"></a>04887         <span class="keyword">public</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1scalar__expression.html" title="Base class for Scalar Expression models.">scalar_expression</a>&lt;matrix_scalar_unary&lt;E, F&gt; &gt; {
4912 <a name="l04888"></a>04888     <span class="keyword">public</span>:
4913 <a name="l04889"></a>04889         <span class="keyword">typedef</span> E expression_type;
4914 <a name="l04890"></a>04890         <span class="keyword">typedef</span> F functor_type;
4915 <a name="l04891"></a>04891         <span class="keyword">typedef</span> <span class="keyword">typename</span> F::result_type value_type;
4916 <a name="l04892"></a>04892         <span class="keyword">typedef</span> <span class="keyword">typename</span> E::const_closure_type expression_closure_type;
4917 <a name="l04893"></a>04893 
4918 <a name="l04894"></a>04894         <span class="comment">// Construction and destruction</span>
4919 <a name="l04895"></a>04895         BOOST_UBLAS_INLINE
4920 <a name="l04896"></a>04896         <span class="keyword">explicit</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__scalar__unary.html">matrix_scalar_unary</a> (<span class="keyword">const</span> expression_type &amp;e):
4921 <a name="l04897"></a>04897             e_ (e) {}
4922 <a name="l04898"></a>04898 
4923 <a name="l04899"></a>04899     <span class="keyword">private</span>:
4924 <a name="l04900"></a>04900         <span class="comment">// Expression accessors</span>
4925 <a name="l04901"></a>04901         BOOST_UBLAS_INLINE
4926 <a name="l04902"></a>04902         <span class="keyword">const</span> expression_closure_type &amp;expression ()<span class="keyword"> const </span>{
4927 <a name="l04903"></a>04903             <span class="keywordflow">return</span> e_;
4928 <a name="l04904"></a>04904         }
4929 <a name="l04905"></a>04905 
4930 <a name="l04906"></a>04906     <span class="keyword">public</span>:
4931 <a name="l04907"></a>04907         BOOST_UBLAS_INLINE
4932 <a name="l04908"></a>04908         operator value_type ()<span class="keyword"> const </span>{
4933 <a name="l04909"></a>04909             <span class="keywordflow">return</span> functor_type::apply (e_);
4934 <a name="l04910"></a>04910         }
4935 <a name="l04911"></a>04911 
4936 <a name="l04912"></a>04912     <span class="keyword">private</span>:
4937 <a name="l04913"></a>04913         expression_closure_type e_;
4938 <a name="l04914"></a>04914     };
4939 <a name="l04915"></a>04915 
4940 <a name="l04916"></a>04916     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E, <span class="keyword">class</span> F&gt;
4941 <a name="l04917"></a><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__scalar__unary__traits.html">04917</a>     <span class="keyword">struct </span><a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__scalar__unary__traits.html">matrix_scalar_unary_traits</a> {
4942 <a name="l04918"></a>04918         <span class="keyword">typedef</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__scalar__unary.html">matrix_scalar_unary&lt;E, F&gt;</a> expression_type;
4943 <a name="l04919"></a>04919 <span class="preprocessor">#ifndef BOOST_UBLAS_SIMPLE_ET_DEBUG</span>
4944 <a name="l04920"></a>04920 <span class="preprocessor"></span>         <span class="keyword">typedef</span> expression_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__scalar__unary.html">result_type</a>;
4945 <a name="l04921"></a>04921 <span class="preprocessor">#else</span>
4946 <a name="l04922"></a>04922 <span class="preprocessor"></span>         <span class="keyword">typedef</span> <span class="keyword">typename</span> F::result_type <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__scalar__unary.html">result_type</a>;
4947 <a name="l04923"></a>04923 <span class="preprocessor">#endif</span>
4948 <a name="l04924"></a>04924 <span class="preprocessor"></span>    };
4949 <a name="l04925"></a>04925 
4950 <a name="l04926"></a>04926     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt;
4951 <a name="l04927"></a>04927     BOOST_UBLAS_INLINE
4952 <a name="l04928"></a>04928     <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__scalar__unary__traits.html">matrix_scalar_unary_traits&lt;E, matrix_norm_1&lt;E&gt;</a> &gt;::result_type
4953 <a name="l04929"></a>04929     norm_1 (<span class="keyword">const</span> <a class="code" href="classboost_1_1numeric_1_1ublas_1_1matrix__expression.html" title="Base class for Matrix Expression models.">matrix_expression&lt;E&gt;</a> &amp;e) {
4954 <a name="l04930"></a>04930         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structboost_1_1numeric_1_1ublas_1_1matrix__scalar__unary__traits.html">matrix_scalar_unary_traits&lt;E, matrix_norm_1&lt;E&gt;</a> &gt;::expression_type expression_type;
4955 <a name="l04931"></a>04931         <span class="keywordflow">return</span> expression_type (e ());
4956 <a name="l04932"></a>04932     }
4957 <a name="l04933"></a>04933 
4958 <a name="l04934"></a>04934     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt;
4959 <a name="l04935"></a>04935     BOOST_UBLAS_INLINE
4960 <a name="l04936"></a>04936     <span class="keyword">typename</span> matrix_scalar_unary_traits&lt;E, matrix_norm_frobenius&lt;E&gt; &gt;::result_type
4961 <a name="l04937"></a>04937     norm_frobenius (<span class="keyword">const</span> matrix_expression&lt;E&gt; &amp;e) {
4962 <a name="l04938"></a>04938         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_scalar_unary_traits&lt;E, matrix_norm_frobenius&lt;E&gt; &gt;::expression_type expression_type;
4963 <a name="l04939"></a>04939         <span class="keywordflow">return</span> expression_type (e ());
4964 <a name="l04940"></a>04940     }
4965 <a name="l04941"></a>04941 
4966 <a name="l04942"></a>04942     <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt;
4967 <a name="l04943"></a>04943     BOOST_UBLAS_INLINE
4968 <a name="l04944"></a>04944     <span class="keyword">typename</span> matrix_scalar_unary_traits&lt;E, matrix_norm_inf&lt;E&gt; &gt;::result_type
4969 <a name="l04945"></a>04945     norm_inf (<span class="keyword">const</span> matrix_expression&lt;E&gt; &amp;e) {
4970 <a name="l04946"></a>04946         <span class="keyword">typedef</span> <span class="keyword">typename</span> matrix_scalar_unary_traits&lt;E, matrix_norm_inf&lt;E&gt; &gt;::expression_type expression_type;
4971 <a name="l04947"></a>04947         <span class="keywordflow">return</span> expression_type (e ());
4972 <a name="l04948"></a>04948     }
4973 <a name="l04949"></a>04949 
4974 <a name="l04950"></a>04950 }}}
4975 <a name="l04951"></a>04951 
4976 <a name="l04952"></a>04952 <span class="preprocessor">#endif</span>
4977 </pre></div></div>
4978 <hr size="1"/><address style="text-align: right;"><small>Generated on Sun Jul 4 20:30:52 2010 for ublas by&nbsp;
4979 <a href="http://www.doxygen.org/index.html">
4980 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
4981 </body>
4982 </html>