<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>The MRPT project: MappedSparseMatrix.h Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <div align="left"><a href="http://www.mrpt.org/">Main MRPT website</a> > <b>C++ reference</b> </div> <div align="right"> <a href="index.html"><img border="0" src="mrpt_logo.png" alt="MRPT logo"></a> </div> <!-- Generated by Doxygen 1.7.2 --> <script type="text/javascript"><!-- var searchBox = new SearchBox("searchBox", "search",false,'Search'); --></script> <div class="navigation" id="top"> <div class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li id="searchli"> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> <form id="FSearchBox" action="search.php" method="get"> <img id="MSearchSelect" src="search/mag.png" alt=""/> <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"/> </form> </span><span class="right"></span> </div> </li> </ul> </div> <div class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div class="header"> <div class="headertitle"> <h1>MappedSparseMatrix.h</h1> </div> </div> <div class="contents"> <a href="_mapped_sparse_matrix_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// This file is part of Eigen, a lightweight C++ template library</span> <a name="l00002"></a>00002 <span class="comment">// for linear algebra.</span> <a name="l00003"></a>00003 <span class="comment">//</span> <a name="l00004"></a>00004 <span class="comment">// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr></span> <a name="l00005"></a>00005 <span class="comment">//</span> <a name="l00006"></a>00006 <span class="comment">// Eigen is free software; you can redistribute it and/or</span> <a name="l00007"></a>00007 <span class="comment">// modify it under the terms of the GNU Lesser General Public</span> <a name="l00008"></a>00008 <span class="comment">// License as published by the Free Software Foundation; either</span> <a name="l00009"></a>00009 <span class="comment">// version 3 of the License, or (at your option) any later version.</span> <a name="l00010"></a>00010 <span class="comment">//</span> <a name="l00011"></a>00011 <span class="comment">// Alternatively, you can redistribute it and/or</span> <a name="l00012"></a>00012 <span class="comment">// modify it under the terms of the GNU General Public License as</span> <a name="l00013"></a>00013 <span class="comment">// published by the Free Software Foundation; either version 2 of</span> <a name="l00014"></a>00014 <span class="comment">// the License, or (at your option) any later version.</span> <a name="l00015"></a>00015 <span class="comment">//</span> <a name="l00016"></a>00016 <span class="comment">// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY</span> <a name="l00017"></a>00017 <span class="comment">// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span> <a name="l00018"></a>00018 <span class="comment">// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the</span> <a name="l00019"></a>00019 <span class="comment">// GNU General Public License for more details.</span> <a name="l00020"></a>00020 <span class="comment">//</span> <a name="l00021"></a>00021 <span class="comment">// You should have received a copy of the GNU Lesser General Public</span> <a name="l00022"></a>00022 <span class="comment">// License and a copy of the GNU General Public License along with</span> <a name="l00023"></a>00023 <span class="comment">// Eigen. If not, see <http://www.gnu.org/licenses/>.</span> <a name="l00024"></a>00024 <a name="l00025"></a>00025 <span class="preprocessor">#ifndef EIGEN_MAPPED_SPARSEMATRIX_H</span> <a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define EIGEN_MAPPED_SPARSEMATRIX_H</span> <a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment"></span> <a name="l00028"></a>00028 <span class="comment">/** \class MappedSparseMatrix</span> <a name="l00029"></a>00029 <span class="comment"> *</span> <a name="l00030"></a>00030 <span class="comment"> * \brief Sparse matrix</span> <a name="l00031"></a>00031 <span class="comment"> *</span> <a name="l00032"></a>00032 <span class="comment"> * \param _Scalar the scalar type, i.e. the type of the coefficients</span> <a name="l00033"></a>00033 <span class="comment"> *</span> <a name="l00034"></a>00034 <span class="comment"> * See http://www.netlib.org/linalg/html_templates/node91.html for details on the storage scheme.</span> <a name="l00035"></a>00035 <span class="comment"> *</span> <a name="l00036"></a>00036 <span class="comment"> */</span> <a name="l00037"></a>00037 <span class="keyword">namespace </span>internal { <a name="l00038"></a>00038 <span class="keyword">template</span><<span class="keyword">typename</span> _Scalar, <span class="keywordtype">int</span> _Flags, <span class="keyword">typename</span> _Index> <a name="l00039"></a><a class="code" href="structinternal_1_1traits_3_01_mapped_sparse_matrix_3_01___scalar_00_01___flags_00_01___index_01_4_01_4.html">00039</a> <span class="keyword">struct </span>traits<<a class="code" href="class_mapped_sparse_matrix.html" title="Sparse matrix.">MappedSparseMatrix</a><_Scalar, _Flags, _Index> > : traits<SparseMatrix<_Scalar, _Flags, _Index> > <a name="l00040"></a>00040 {}; <a name="l00041"></a>00041 } <a name="l00042"></a>00042 <a name="l00043"></a>00043 <span class="keyword">template</span><<span class="keyword">typename</span> _Scalar, <span class="keywordtype">int</span> _Flags, <span class="keyword">typename</span> _Index> <a name="l00044"></a><a class="code" href="class_mapped_sparse_matrix.html">00044</a> <span class="keyword">class </span><a class="code" href="class_mapped_sparse_matrix.html" title="Sparse matrix.">MappedSparseMatrix</a> <a name="l00045"></a>00045 : <span class="keyword">public</span> <a class="code" href="class_sparse_matrix_base.html" title="Base class of any sparse matrices or sparse expressions.">SparseMatrixBase</a><MappedSparseMatrix<_Scalar, _Flags, _Index> > <a name="l00046"></a>00046 { <a name="l00047"></a>00047 <span class="keyword">public</span>: <a name="l00048"></a>00048 <a class="code" href="_sparse_util_8h.html#a936f4ca73ea9a70e080520f8c7c4fa03">EIGEN_SPARSE_PUBLIC_INTERFACE</a>(<a class="code" href="class_mapped_sparse_matrix.html" title="Sparse matrix.">MappedSparseMatrix</a>) <a name="l00049"></a>00049 <a name="l00050"></a>00050 <span class="keyword">protected</span>: <a name="l00051"></a><a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">00051</a> <span class="keyword">enum</span> { <a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">IsRowMajor</a> = Base::IsRowMajor }; <a name="l00052"></a>00052 <a name="l00053"></a><a class="code" href="class_mapped_sparse_matrix.html#ab14fa1e69764b7a61871c709559397e4">00053</a> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_mapped_sparse_matrix.html#ab14fa1e69764b7a61871c709559397e4">m_outerSize</a>; <a name="l00054"></a><a class="code" href="class_mapped_sparse_matrix.html#a701b945260d591c987bb6b14f5651392">00054</a> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_mapped_sparse_matrix.html#a701b945260d591c987bb6b14f5651392">m_innerSize</a>; <a name="l00055"></a><a class="code" href="class_mapped_sparse_matrix.html#ab5a1b8b289b2069a3909111317bfb31a">00055</a> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_mapped_sparse_matrix.html#ab5a1b8b289b2069a3909111317bfb31a">m_nnz</a>; <a name="l00056"></a><a class="code" href="class_mapped_sparse_matrix.html#ac02c7bd19f28e85c9ec03f52ca0e3f7e">00056</a> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* <a class="code" href="class_mapped_sparse_matrix.html#ac02c7bd19f28e85c9ec03f52ca0e3f7e">m_outerIndex</a>; <a name="l00057"></a><a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">00057</a> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* <a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>; <a name="l00058"></a><a class="code" href="class_mapped_sparse_matrix.html#a50c8389ca6822ea24f47c2c43c5a4272">00058</a> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>* <a class="code" href="class_mapped_sparse_matrix.html#a50c8389ca6822ea24f47c2c43c5a4272">m_values</a>; <a name="l00059"></a>00059 <a name="l00060"></a>00060 <span class="keyword">public</span>: <a name="l00061"></a>00061 <a name="l00062"></a><a class="code" href="class_mapped_sparse_matrix.html#a5013aaf0f5c9b11967b0d253753d6dc5">00062</a> <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_mapped_sparse_matrix.html#a5013aaf0f5c9b11967b0d253753d6dc5">rows</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">IsRowMajor</a> ? <a class="code" href="class_mapped_sparse_matrix.html#ab14fa1e69764b7a61871c709559397e4">m_outerSize</a> : <a class="code" href="class_mapped_sparse_matrix.html#a701b945260d591c987bb6b14f5651392">m_innerSize</a>; } <a name="l00063"></a><a class="code" href="class_mapped_sparse_matrix.html#a619c53e6e4a9a2b92ac0f1404d7eae6a">00063</a> <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_mapped_sparse_matrix.html#a619c53e6e4a9a2b92ac0f1404d7eae6a">cols</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">IsRowMajor</a> ? <a class="code" href="class_mapped_sparse_matrix.html#a701b945260d591c987bb6b14f5651392">m_innerSize</a> : <a class="code" href="class_mapped_sparse_matrix.html#ab14fa1e69764b7a61871c709559397e4">m_outerSize</a>; } <a name="l00064"></a><a class="code" href="class_mapped_sparse_matrix.html#a271666f6731f1ccbca25d75a7393456c">00064</a> <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_mapped_sparse_matrix.html#a271666f6731f1ccbca25d75a7393456c">innerSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#a701b945260d591c987bb6b14f5651392">m_innerSize</a>; } <a name="l00065"></a><a class="code" href="class_mapped_sparse_matrix.html#addef0d59e2f256e98d2ce8db27bd2aaf">00065</a> <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_mapped_sparse_matrix.html#addef0d59e2f256e98d2ce8db27bd2aaf">outerSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#ab14fa1e69764b7a61871c709559397e4">m_outerSize</a>; } <a name="l00066"></a><a class="code" href="class_mapped_sparse_matrix.html#a4f3f765448c64e70b58840ba6abc73f0">00066</a> <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_mapped_sparse_matrix.html#a4f3f765448c64e70b58840ba6abc73f0">innerNonZeros</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> j)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#ac02c7bd19f28e85c9ec03f52ca0e3f7e">m_outerIndex</a>[j+1]-<a class="code" href="class_mapped_sparse_matrix.html#ac02c7bd19f28e85c9ec03f52ca0e3f7e">m_outerIndex</a>[j]; } <a name="l00067"></a>00067 <a name="l00068"></a>00068 <span class="comment">//----------------------------------------</span> <a name="l00069"></a>00069 <span class="comment">// direct access interface</span> <a name="l00070"></a><a class="code" href="class_mapped_sparse_matrix.html#ae0e846aacaf00d2725b52b202d7a946e">00070</a> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>* <a class="code" href="class_mapped_sparse_matrix.html#ae0e846aacaf00d2725b52b202d7a946e">_valuePtr</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#a50c8389ca6822ea24f47c2c43c5a4272">m_values</a>; } <a name="l00071"></a><a class="code" href="class_mapped_sparse_matrix.html#a54e91cb420c5888d1b0ca7bd7ee20e2f">00071</a> <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>* <a class="code" href="class_mapped_sparse_matrix.html#a54e91cb420c5888d1b0ca7bd7ee20e2f">_valuePtr</a>() { <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#a50c8389ca6822ea24f47c2c43c5a4272">m_values</a>; } <a name="l00072"></a>00072 <a name="l00073"></a><a class="code" href="class_mapped_sparse_matrix.html#a704a3923ab429a5994b85cc0ee529b73">00073</a> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* <a class="code" href="class_mapped_sparse_matrix.html#a704a3923ab429a5994b85cc0ee529b73">_innerIndexPtr</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>; } <a name="l00074"></a><a class="code" href="class_mapped_sparse_matrix.html#aea21f571e84a95cd21f9a4e15a2b8baa">00074</a> <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* <a class="code" href="class_mapped_sparse_matrix.html#aea21f571e84a95cd21f9a4e15a2b8baa">_innerIndexPtr</a>() { <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>; } <a name="l00075"></a>00075 <a name="l00076"></a><a class="code" href="class_mapped_sparse_matrix.html#a11de20d0435372772e7f4f6584ddc221">00076</a> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* <a class="code" href="class_mapped_sparse_matrix.html#a11de20d0435372772e7f4f6584ddc221">_outerIndexPtr</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#ac02c7bd19f28e85c9ec03f52ca0e3f7e">m_outerIndex</a>; } <a name="l00077"></a><a class="code" href="class_mapped_sparse_matrix.html#a3bcb3159510197828ebbd6d9408f1507">00077</a> <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* <a class="code" href="class_mapped_sparse_matrix.html#a3bcb3159510197828ebbd6d9408f1507">_outerIndexPtr</a>() { <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#ac02c7bd19f28e85c9ec03f52ca0e3f7e">m_outerIndex</a>; } <a name="l00078"></a>00078 <span class="comment">//----------------------------------------</span> <a name="l00079"></a>00079 <a name="l00080"></a><a class="code" href="class_mapped_sparse_matrix.html#a8ec92eff2961a24be933ca80b2a06c43">00080</a> <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a> <a class="code" href="class_mapped_sparse_matrix.html#a8ec92eff2961a24be933ca80b2a06c43">coeff</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_base.html#a69b30d59e93b1dffa5234bdfbc98d286">row</a>, <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_base.html#a8afce4f24094824bd538a3bc1b83b84f">col</a>)<span class="keyword"> const</span> <a name="l00081"></a>00081 <span class="keyword"> </span>{ <a name="l00082"></a>00082 <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> outer = <a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">IsRowMajor</a> ? row : <a class="code" href="class_sparse_matrix_base.html#a8afce4f24094824bd538a3bc1b83b84f">col</a>; <a name="l00083"></a>00083 <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> inner = <a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">IsRowMajor</a> ? col : <a class="code" href="class_sparse_matrix_base.html#a69b30d59e93b1dffa5234bdfbc98d286">row</a>; <a name="l00084"></a>00084 <a name="l00085"></a>00085 <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> start = <a class="code" href="class_mapped_sparse_matrix.html#ac02c7bd19f28e85c9ec03f52ca0e3f7e">m_outerIndex</a>[outer]; <a name="l00086"></a>00086 <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="eigen__plugins_8h.html#ade5b39864c905cbb824d0ff6eb0d888c">end</a> = <a class="code" href="class_mapped_sparse_matrix.html#ac02c7bd19f28e85c9ec03f52ca0e3f7e">m_outerIndex</a>[outer+1]; <a name="l00087"></a>00087 <span class="keywordflow">if</span> (start==end) <a name="l00088"></a>00088 <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>(0); <a name="l00089"></a>00089 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (end>0 && inner==<a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>[end-1]) <a name="l00090"></a>00090 <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#a50c8389ca6822ea24f47c2c43c5a4272">m_values</a>[end-1]; <a name="l00091"></a>00091 <span class="comment">// ^^ optimization: let's first check if it is the last coefficient</span> <a name="l00092"></a>00092 <span class="comment">// (very common in high level algorithms)</span> <a name="l00093"></a>00093 <a name="l00094"></a>00094 <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* r = std::lower_bound(&<a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>[start],&<a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>[end-1],inner); <a name="l00095"></a>00095 <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <span class="keywordtype">id</span> = r-&<a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>[0]; <a name="l00096"></a>00096 <span class="keywordflow">return</span> ((*r==inner) && (<span class="keywordtype">id</span><end)) ? <a class="code" href="class_mapped_sparse_matrix.html#a50c8389ca6822ea24f47c2c43c5a4272">m_values</a>[id] : <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>(0); <a name="l00097"></a>00097 } <a name="l00098"></a>00098 <a name="l00099"></a><a class="code" href="class_mapped_sparse_matrix.html#a75dc4e4554bf1e5bca72c233cbc9ee11">00099</a> <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>& <a class="code" href="class_mapped_sparse_matrix.html#a75dc4e4554bf1e5bca72c233cbc9ee11">coeffRef</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_base.html#a69b30d59e93b1dffa5234bdfbc98d286">row</a>, <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_base.html#a8afce4f24094824bd538a3bc1b83b84f">col</a>) <a name="l00100"></a>00100 { <a name="l00101"></a>00101 <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> outer = <a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">IsRowMajor</a> ? row : <a class="code" href="class_sparse_matrix_base.html#a8afce4f24094824bd538a3bc1b83b84f">col</a>; <a name="l00102"></a>00102 <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> inner = <a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">IsRowMajor</a> ? col : <a class="code" href="class_sparse_matrix_base.html#a69b30d59e93b1dffa5234bdfbc98d286">row</a>; <a name="l00103"></a>00103 <a name="l00104"></a>00104 <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> start = <a class="code" href="class_mapped_sparse_matrix.html#ac02c7bd19f28e85c9ec03f52ca0e3f7e">m_outerIndex</a>[outer]; <a name="l00105"></a>00105 <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="eigen__plugins_8h.html#ade5b39864c905cbb824d0ff6eb0d888c">end</a> = <a class="code" href="class_mapped_sparse_matrix.html#ac02c7bd19f28e85c9ec03f52ca0e3f7e">m_outerIndex</a>[outer+1]; <a name="l00106"></a>00106 <a class="code" href="_macros_8h.html#acaa7ba89800cfe18d5fd6eed620aea9c">eigen_assert</a>(end>=start && <span class="stringliteral">"you probably called coeffRef on a non finalized matrix"</span>); <a name="l00107"></a>00107 <a class="code" href="_macros_8h.html#acaa7ba89800cfe18d5fd6eed620aea9c">eigen_assert</a>(end>start && <span class="stringliteral">"coeffRef cannot be called on a zero coefficient"</span>); <a name="l00108"></a>00108 <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* r = std::lower_bound(&<a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>[start],&<a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>[end],inner); <a name="l00109"></a>00109 <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <span class="keywordtype">id</span> = r-&<a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>[0]; <a name="l00110"></a>00110 <a class="code" href="_macros_8h.html#acaa7ba89800cfe18d5fd6eed620aea9c">eigen_assert</a>((*r==inner) && (<span class="keywordtype">id</span><end) && <span class="stringliteral">"coeffRef cannot be called on a zero coefficient"</span>); <a name="l00111"></a>00111 <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#a50c8389ca6822ea24f47c2c43c5a4272">m_values</a>[id]; <a name="l00112"></a>00112 } <a name="l00113"></a>00113 <a name="l00114"></a>00114 <span class="keyword">class </span><a class="code" href="class_inner_iterator.html" title="An InnerIterator allows to loop over the element of a sparse (or dense) matrix or expression...">InnerIterator</a>; <a name="l00115"></a>00115 <span class="comment"></span> <a name="l00116"></a>00116 <span class="comment"> /** \returns the number of non zero coefficients */</span> <a name="l00117"></a><a class="code" href="class_mapped_sparse_matrix.html#a675478766928398df0263a25b6d911a6">00117</a> <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_mapped_sparse_matrix.html#a675478766928398df0263a25b6d911a6">nonZeros</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#ab5a1b8b289b2069a3909111317bfb31a">m_nnz</a>; } <a name="l00118"></a>00118 <a name="l00119"></a><a class="code" href="class_mapped_sparse_matrix.html#a2dbc00b2bdbf4e1ed968d6ad323e9d97">00119</a> <span class="keyword">inline</span> <a class="code" href="class_mapped_sparse_matrix.html#a2dbc00b2bdbf4e1ed968d6ad323e9d97">MappedSparseMatrix</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_mapped_sparse_matrix.html#a5013aaf0f5c9b11967b0d253753d6dc5">rows</a>, <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_mapped_sparse_matrix.html#a619c53e6e4a9a2b92ac0f1404d7eae6a">cols</a>, <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> nnz, <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* outerIndexPtr, <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* innerIndexPtr, <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>* valuePtr) <a name="l00120"></a>00120 : <a class="code" href="class_mapped_sparse_matrix.html#ab14fa1e69764b7a61871c709559397e4">m_outerSize</a>(<a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">IsRowMajor</a>?rows:cols), <a class="code" href="class_mapped_sparse_matrix.html#a701b945260d591c987bb6b14f5651392">m_innerSize</a>(<a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">IsRowMajor</a>?cols:rows), <a class="code" href="class_mapped_sparse_matrix.html#ab5a1b8b289b2069a3909111317bfb31a">m_nnz</a>(nnz), <a class="code" href="class_mapped_sparse_matrix.html#ac02c7bd19f28e85c9ec03f52ca0e3f7e">m_outerIndex</a>(outerIndexPtr), <a name="l00121"></a>00121 <a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>(innerIndexPtr), <a class="code" href="class_mapped_sparse_matrix.html#a50c8389ca6822ea24f47c2c43c5a4272">m_values</a>(valuePtr) <a name="l00122"></a>00122 {} <a name="l00123"></a>00123 <span class="comment"></span> <a name="l00124"></a>00124 <span class="comment"> /** Empty destructor */</span> <a name="l00125"></a><a class="code" href="class_mapped_sparse_matrix.html#affb82e41bffadffbbc317cd6d30b5d46">00125</a> <span class="keyword">inline</span> <a class="code" href="class_mapped_sparse_matrix.html#affb82e41bffadffbbc317cd6d30b5d46" title="Empty destructor.">~MappedSparseMatrix</a>() {} <a name="l00126"></a>00126 }; <a name="l00127"></a>00127 <a name="l00128"></a>00128 <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> _Flags, <span class="keyword">typename</span> _Index> <a name="l00129"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html">00129</a> <span class="keyword">class </span><a class="code" href="class_mapped_sparse_matrix.html" title="Sparse matrix.">MappedSparseMatrix</a><<a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>,_Flags,_Index>::<a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html">InnerIterator</a> <a name="l00130"></a>00130 { <a name="l00131"></a>00131 <span class="keyword">public</span>: <a name="l00132"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a7e0a252c98adf9b34b21c24034c8e775">00132</a> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html">InnerIterator</a>(<span class="keyword">const</span> <a class="code" href="class_mapped_sparse_matrix.html" title="Sparse matrix.">MappedSparseMatrix</a>& mat, <a class="code" href="class_sparse_matrix_base.html#ae1d069410cb392f19d4a8e3f0d3e2276">Index</a> outer) <a name="l00133"></a>00133 : m_matrix(mat), <a name="l00134"></a>00134 m_outer(outer), <a name="l00135"></a>00135 m_id(mat.<a class="code" href="class_mapped_sparse_matrix.html#a11de20d0435372772e7f4f6584ddc221">_outerIndexPtr</a>()[outer]), <a name="l00136"></a>00136 m_start(m_id), <a name="l00137"></a>00137 m_end(mat.<a class="code" href="class_mapped_sparse_matrix.html#a11de20d0435372772e7f4f6584ddc221">_outerIndexPtr</a>()[outer+1]) <a name="l00138"></a>00138 {} <a name="l00139"></a>00139 <a name="l00140"></a>00140 <span class="keyword">template</span><<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Added, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Removed> <a name="l00141"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#ad2704e640300b95669efd086694e54b8">00141</a> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html">InnerIterator</a>(<span class="keyword">const</span> <a class="code" href="class_flagged.html" title="Expression with modified flags.">Flagged<MappedSparseMatrix,Added,Removed></a>& mat, <a class="code" href="class_sparse_matrix_base.html#ae1d069410cb392f19d4a8e3f0d3e2276">Index</a> outer) <a name="l00142"></a>00142 : m_matrix(mat._expression()), m_id(m_matrix.<a class="code" href="class_mapped_sparse_matrix.html#a11de20d0435372772e7f4f6584ddc221">_outerIndexPtr</a>()[outer]), <a name="l00143"></a>00143 m_start(m_id), m_end(m_matrix.<a class="code" href="class_mapped_sparse_matrix.html#a11de20d0435372772e7f4f6584ddc221">_outerIndexPtr</a>()[outer+1]) <a name="l00144"></a>00144 {} <a name="l00145"></a>00145 <a name="l00146"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#ab8625313b8822e90eff43172263c77a6">00146</a> <span class="keyword">inline</span> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html">InnerIterator</a>& <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#ab8625313b8822e90eff43172263c77a6">operator++</a>() { m_id++; <span class="keywordflow">return</span> *<span class="keyword">this</span>; } <a name="l00147"></a>00147 <a name="l00148"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#aae72629ebab1e62e8c8a1cbed474477b">00148</a> <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#aae72629ebab1e62e8c8a1cbed474477b">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_matrix._valuePtr()[m_id]; } <a name="l00149"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a3af7412406fa13b39b822dadcbd901b4">00149</a> <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>& <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a3af7412406fa13b39b822dadcbd901b4">valueRef</a>() { <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&<span class="keyword">></span>(m_matrix._valuePtr()[m_id]); } <a name="l00150"></a>00150 <a name="l00151"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a78eff2c63dc8825fcd804143cf508657">00151</a> <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#ae1d069410cb392f19d4a8e3f0d3e2276">Index</a> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a78eff2c63dc8825fcd804143cf508657">index</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_matrix._innerIndexPtr()[m_id]; } <a name="l00152"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#ad515c343a936c738dd8033f763922eb3">00152</a> <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#ae1d069410cb392f19d4a8e3f0d3e2276">Index</a> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#ad515c343a936c738dd8033f763922eb3">row</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">IsRowMajor</a> ? m_outer : index(); } <a name="l00153"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#af6b17a8e2e214e0eafef144aab83d595">00153</a> <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#ae1d069410cb392f19d4a8e3f0d3e2276">Index</a> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#af6b17a8e2e214e0eafef144aab83d595">col</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_mapped_sparse_matrix.html#a5d518e445c83f8dc97531df69572fe3bacef7ee09e7f7dcbf74d50d6e107c6643">IsRowMajor</a> ? index() : m_outer; } <a name="l00154"></a>00154 <a name="l00155"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a7728aae41e3cf8339d9d6903da77ab6c">00155</a> <span class="keyword">inline</span> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a7728aae41e3cf8339d9d6903da77ab6c">operator bool</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (m_id < m_end) && (m_id>=m_start); } <a name="l00156"></a>00156 <a name="l00157"></a>00157 <span class="keyword">protected</span>: <a name="l00158"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#ae03d415e4c3a1b086c54afe9c66fbbee">00158</a> <span class="keyword">const</span> <a class="code" href="class_mapped_sparse_matrix.html" title="Sparse matrix.">MappedSparseMatrix</a>& <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#ae03d415e4c3a1b086c54afe9c66fbbee">m_matrix</a>; <a name="l00159"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a44917f0edb740217a3ce9b4226c013e5">00159</a> <span class="keyword">const</span> <a class="code" href="class_sparse_matrix_base.html#ae1d069410cb392f19d4a8e3f0d3e2276">Index</a> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a44917f0edb740217a3ce9b4226c013e5">m_outer</a>; <a name="l00160"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a540a5d5a7443a45af22c5e86e3ae9e41">00160</a> <a class="code" href="class_sparse_matrix_base.html#ae1d069410cb392f19d4a8e3f0d3e2276">Index</a> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a540a5d5a7443a45af22c5e86e3ae9e41">m_id</a>; <a name="l00161"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#ae27d78fbcdb85aecc356a307619ed0b3">00161</a> <span class="keyword">const</span> <a class="code" href="class_sparse_matrix_base.html#ae1d069410cb392f19d4a8e3f0d3e2276">Index</a> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#ae27d78fbcdb85aecc356a307619ed0b3">m_start</a>; <a name="l00162"></a><a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a7f513bd35c1d8cf539d8412215c2006d">00162</a> <span class="keyword">const</span> <a class="code" href="class_sparse_matrix_base.html#ae1d069410cb392f19d4a8e3f0d3e2276">Index</a> <a class="code" href="class_mapped_sparse_matrix_1_1_inner_iterator.html#a7f513bd35c1d8cf539d8412215c2006d">m_end</a>; <a name="l00163"></a>00163 }; <a name="l00164"></a>00164 <a name="l00165"></a>00165 <span class="preprocessor">#endif // EIGEN_MAPPED_SPARSEMATRIX_H</span> </pre></div></div> </div> <br><hr><br> <table border="0" width="100%"> <tr> <td> Page generated by <a href="http://www.doxygen.org" target="_blank">Doxygen 1.7.2</a> for MRPT 0.9.4 SVN: at Mon Jan 10 22:30:30 UTC 2011</td><td></td> <td width="100"> </td> <td width="150"> </td></tr> </table> </body></html>