Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 2f6559b7006594cad03af173263c219e > files > 2006

mrpt-doc-0.9.4-0.1.20110110svn2383.fc15.i686.rpm

<!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> &gt; <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&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;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&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;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 &lt;gael.guennebaud@inria.fr&gt;</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 &lt;http://www.gnu.org/licenses/&gt;.</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>&lt;<span class="keyword">typename</span> _Scalar, <span class="keywordtype">int</span> _Flags, <span class="keyword">typename</span> _Index&gt;
<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&lt;<a class="code" href="class_mapped_sparse_matrix.html" title="Sparse matrix.">MappedSparseMatrix</a>&lt;_Scalar, _Flags, _Index&gt; &gt; : traits&lt;SparseMatrix&lt;_Scalar, _Flags, _Index&gt; &gt;
<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>&lt;<span class="keyword">typename</span> _Scalar, <span class="keywordtype">int</span> _Flags, <span class="keyword">typename</span> _Index&gt;
<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>&lt;MappedSparseMatrix&lt;_Scalar, _Flags, _Index&gt; &gt;
<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&gt;0 &amp;&amp; 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&#39;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(&amp;<a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>[start],&amp;<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-&amp;<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) &amp;&amp; (<span class="keywordtype">id</span>&lt;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>&amp; <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&gt;=start &amp;&amp; <span class="stringliteral">&quot;you probably called coeffRef on a non finalized matrix&quot;</span>);
<a name="l00107"></a>00107       <a class="code" href="_macros_8h.html#acaa7ba89800cfe18d5fd6eed620aea9c">eigen_assert</a>(end&gt;start &amp;&amp; <span class="stringliteral">&quot;coeffRef cannot be called on a zero coefficient&quot;</span>);
<a name="l00108"></a>00108       <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* r = std::lower_bound(&amp;<a class="code" href="class_mapped_sparse_matrix.html#a31b6df27e3a99624666ea4cd8562674e">m_innerIndices</a>[start],&amp;<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-&amp;<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) &amp;&amp; (<span class="keywordtype">id</span>&lt;end) &amp;&amp; <span class="stringliteral">&quot;coeffRef cannot be called on a zero coefficient&quot;</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>&lt;<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> _Flags, <span class="keyword">typename</span> _Index&gt;
<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>&lt;<a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>,_Flags,_Index&gt;::<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>&amp; 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>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Added, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Removed&gt;
<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&lt;MappedSparseMatrix,Added,Removed&gt;</a>&amp; 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>&amp; <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>&amp; <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&lt;</span><a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&amp;<span class="keyword">&gt;</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 &lt; m_end) &amp;&amp; (m_id&gt;=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>&amp; <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>