Sophie

Sophie

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

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: SparseMatrix.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>SparseMatrix.h</h1>  </div>
</div>
<div class="contents">
<a href="_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-2010 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_SPARSEMATRIX_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define EIGEN_SPARSEMATRIX_H</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00028"></a>00028 <span class="comment">/** \ingroup Sparse_Module</span>
<a name="l00029"></a>00029 <span class="comment">  *</span>
<a name="l00030"></a>00030 <span class="comment">  * \class SparseMatrix</span>
<a name="l00031"></a>00031 <span class="comment">  *</span>
<a name="l00032"></a>00032 <span class="comment">  * \brief The main sparse matrix class</span>
<a name="l00033"></a>00033 <span class="comment">  *</span>
<a name="l00034"></a>00034 <span class="comment">  * This class implements a sparse matrix using the very common compressed row/column storage</span>
<a name="l00035"></a>00035 <span class="comment">  * scheme.</span>
<a name="l00036"></a>00036 <span class="comment">  *</span>
<a name="l00037"></a>00037 <span class="comment">  * \param _Scalar the scalar type, i.e. the type of the coefficients</span>
<a name="l00038"></a>00038 <span class="comment">  * \param _Options Union of bit flags controlling the storage scheme. Currently the only possibility</span>
<a name="l00039"></a>00039 <span class="comment">  *                 is RowMajor. The default is 0 which means column-major.</span>
<a name="l00040"></a>00040 <span class="comment">  * \param _Index the type of the indices. Default is \c int.</span>
<a name="l00041"></a>00041 <span class="comment">  *</span>
<a name="l00042"></a>00042 <span class="comment">  * See http://www.netlib.org/linalg/html_templates/node91.html for details on the storage scheme.</span>
<a name="l00043"></a>00043 <span class="comment">  *</span>
<a name="l00044"></a>00044 <span class="comment">  */</span>
<a name="l00045"></a>00045 
<a name="l00046"></a>00046 <span class="keyword">namespace </span>internal {
<a name="l00047"></a>00047 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> _Scalar, <span class="keywordtype">int</span> _Options, <span class="keyword">typename</span> _Index&gt;
<a name="l00048"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html">00048</a> <span class="keyword">struct </span>traits&lt;<a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>&lt;_Scalar, _Options, _Index&gt; &gt;
<a name="l00049"></a>00049 {
<a name="l00050"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a2cbdfff8c5ac52de631367a83e1a375e">00050</a>   <span class="keyword">typedef</span> _Scalar <a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a2cbdfff8c5ac52de631367a83e1a375e">Scalar</a>;
<a name="l00051"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a2755f7be38db175f4e4d24ac60d617d1">00051</a>   <span class="keyword">typedef</span> _Index <a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a2755f7be38db175f4e4d24ac60d617d1">Index</a>;
<a name="l00052"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a52c60205ec00de3fdd73a1617c45fbbc">00052</a>   <span class="keyword">typedef</span> Sparse <a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a52c60205ec00de3fdd73a1617c45fbbc">StorageKind</a>;
<a name="l00053"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a4b283a58697bcfe325652d6a766a2af4">00053</a>   <span class="keyword">typedef</span> <a class="code" href="struct_matrix_xpr.html" title="The type used to identify a matrix expression.">MatrixXpr</a> <a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a4b283a58697bcfe325652d6a766a2af4">XprKind</a>;
<a name="l00054"></a>00054   <span class="keyword">enum</span> {
<a name="l00055"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a1d633255e8a628631cf88fa6de8bc0c3a3479b6e867aea2e778abca64caa6cf49">00055</a>     RowsAtCompileTime = <a class="code" href="_constants_8h.html#adc9da5be31bdce40c25a92c27999c0e3" title="This value means that a quantity is not known at compile-time, and that instead the value is stored i...">Dynamic</a>,
<a name="l00056"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a1d633255e8a628631cf88fa6de8bc0c3a4b11b6b6bd4d54b3d547f562ab9288d1">00056</a>     ColsAtCompileTime = <a class="code" href="_constants_8h.html#adc9da5be31bdce40c25a92c27999c0e3" title="This value means that a quantity is not known at compile-time, and that instead the value is stored i...">Dynamic</a>,
<a name="l00057"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a1d633255e8a628631cf88fa6de8bc0c3af26bf2a1792a297aac9a72b8c60de017">00057</a>     MaxRowsAtCompileTime = <a class="code" href="_constants_8h.html#adc9da5be31bdce40c25a92c27999c0e3" title="This value means that a quantity is not known at compile-time, and that instead the value is stored i...">Dynamic</a>,
<a name="l00058"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a1d633255e8a628631cf88fa6de8bc0c3ad1c6b54f5ad4cf32b04f3ea1725bfb46">00058</a>     MaxColsAtCompileTime = <a class="code" href="_constants_8h.html#adc9da5be31bdce40c25a92c27999c0e3" title="This value means that a quantity is not known at compile-time, and that instead the value is stored i...">Dynamic</a>,
<a name="l00059"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a1d633255e8a628631cf88fa6de8bc0c3a0f0ee5ccca4701e27ebf5ffd56d521f6">00059</a>     Flags = _Options | <a class="code" href="_constants_8h.html#ade73e088e9921d459e89667b7c96cadb">NestByRefBit</a> | <a class="code" href="group__flags.html#ga64e21b7543bdedce27f013512a4403a3" title="Means the expression has a coeffRef() method, i.e.">LvalueBit</a>,
<a name="l00060"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a1d633255e8a628631cf88fa6de8bc0c3acbdd4bcfe72b4ca99c12784a2c3bda34">00060</a>     CoeffReadCost = <a class="code" href="struct_num_traits.html" title="Holds information about the various numeric (i.e.">NumTraits&lt;Scalar&gt;::ReadCost</a>,
<a name="l00061"></a><a class="code" href="structinternal_1_1traits_3_01_sparse_matrix_3_01___scalar_00_01___options_00_01___index_01_4_01_4.html#a1d633255e8a628631cf88fa6de8bc0c3aedc3221bea124fc6c5d1dd17ba0a0847">00061</a>     SupportedAccessPatterns = <a class="code" href="_sparse_util_8h.html#a261fdd53c867f5f29679505ce6d1867c">InnerRandomAccessPattern</a>
<a name="l00062"></a>00062   };
<a name="l00063"></a>00063 };
<a name="l00064"></a>00064 } <span class="comment">// end namespace internal</span>
<a name="l00065"></a>00065 
<a name="l00066"></a>00066 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> _Scalar, <span class="keywordtype">int</span> _Options, <span class="keyword">typename</span> _Index&gt;
<a name="l00067"></a><a class="code" href="class_sparse_matrix.html">00067</a> <span class="keyword">class </span><a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>
<a name="l00068"></a>00068   : <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;SparseMatrix&lt;_Scalar, _Options, _Index&gt; &gt;
<a name="l00069"></a>00069 {
<a name="l00070"></a>00070   <span class="keyword">public</span>:
<a name="l00071"></a>00071     <a class="code" href="_sparse_util_8h.html#a936f4ca73ea9a70e080520f8c7c4fa03">EIGEN_SPARSE_PUBLIC_INTERFACE</a>(<a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>)
<a name="l00072"></a>00072     <span class="keyword">using</span> Base::operator=;
<a name="l00073"></a>00073     <a class="code" href="_sparse_util_8h.html#aa49d12e32c9621b2130abc38a317e7b8">EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR</a>(<a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>, +=)
<a name="l00074"></a>00074     <a class="code" href="_sparse_util_8h.html#aa49d12e32c9621b2130abc38a317e7b8">EIGEN_SPARSE_INHERIT_ASSIGNMENT_OPERATOR</a>(<a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>, -=)
<a name="l00075"></a>00075     <span class="comment">// FIXME: why are these operator already alvailable ???</span>
<a name="l00076"></a>00076     <span class="comment">// EIGEN_SPARSE_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(SparseMatrix, *=)</span>
<a name="l00077"></a>00077     <span class="comment">// EIGEN_SPARSE_INHERIT_SCALAR_ASSIGNMENT_OPERATOR(SparseMatrix, /=)</span>
<a name="l00078"></a>00078 
<a name="l00079"></a><a class="code" href="class_sparse_matrix.html#a55d9682b19bf142c7e4af3a76da03cc8">00079</a>     typedef <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>,<a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701adb11b5d4625dc81c28848af1ec6dac18" title="This stores expression Flags flags which may or may not be inherited by new expressions constructed f...">Flags</a>&gt; <a class="code" href="class_mapped_sparse_matrix.html" title="Sparse matrix.">Map</a>;
<a name="l00080"></a>00080     using <a class="code" href="class_sparse_matrix_base.html#a1115fc94453a8d25338195b7a630cbf9">Base</a>::<a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a>;
<a name="l00081"></a><a class="code" href="class_sparse_matrix.html#aee1c8820e2b1f316ceed7a8f54099c00">00081</a>     typedef <a class="code" href="class_compressed_storage.html" title="Stores a sparse set of values as a list of values and a list of indices.">CompressedStorage</a>&lt;Scalar,<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>&gt; <a class="code" href="class_compressed_storage.html">Storage</a>;
<a name="l00082"></a>00082     enum {
<a name="l00083"></a><a class="code" href="class_sparse_matrix.html#a21ded6b8e704b166577fdf12a2e34945ac911f0217a58b12e211ab3daa6184c63">00083</a>       <a class="code" href="class_sparse_matrix.html#a21ded6b8e704b166577fdf12a2e34945ac911f0217a58b12e211ab3daa6184c63">Options</a> = _Options
<a name="l00084"></a>00084     };
<a name="l00085"></a>00085 
<a name="l00086"></a>00086   <span class="keyword">protected</span>:
<a name="l00087"></a>00087 
<a name="l00088"></a><a class="code" href="class_sparse_matrix.html#ac0da011e8297c7267705900d45892aa5">00088</a>     <span class="keyword">typedef</span> <a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix&lt;Scalar,(Flags&amp;~RowMajorBit)|(IsRowMajor?RowMajorBit:0)&gt;</a> <a class="code" href="class_sparse_matrix.html#ac0da011e8297c7267705900d45892aa5">TransposedSparseMatrix</a>;
<a name="l00089"></a>00089 
<a name="l00090"></a><a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">00090</a>     <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>;
<a name="l00091"></a><a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">00091</a>     <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">m_innerSize</a>;
<a name="l00092"></a><a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">00092</a>     <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>;
<a name="l00093"></a><a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">00093</a>     <a class="code" href="class_compressed_storage.html">CompressedStorage&lt;Scalar,Index&gt;</a> <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>;
<a name="l00094"></a>00094 
<a name="l00095"></a>00095   <span class="keyword">public</span>:
<a name="l00096"></a>00096 
<a name="l00097"></a><a class="code" href="class_sparse_matrix.html#a08ea96e4a43cad89fe8803b17b3a200a">00097</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a08ea96e4a43cad89fe8803b17b3a200a">rows</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? <a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a> : <a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">m_innerSize</a>; }
<a name="l00098"></a><a class="code" href="class_sparse_matrix.html#a0db0dfa1ad560120debf4ac2b1de51de">00098</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a0db0dfa1ad560120debf4ac2b1de51de">cols</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? <a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">m_innerSize</a> : <a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>; }
<a name="l00099"></a>00099 
<a name="l00100"></a><a class="code" href="class_sparse_matrix.html#a9ff57888bd1954bfe67e2972a0dcaefa">00100</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a9ff57888bd1954bfe67e2972a0dcaefa">innerSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">m_innerSize</a>; }
<a name="l00101"></a><a class="code" href="class_sparse_matrix.html#a4469108db20a12c3791e76bb6931dbfd">00101</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a4469108db20a12c3791e76bb6931dbfd">outerSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>; }
<a name="l00102"></a><a class="code" href="class_sparse_matrix.html#a9f9cb117050cdd0122ccf52a1db17be5">00102</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a9f9cb117050cdd0122ccf52a1db17be5">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_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[j+1]-<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[j]; }
<a name="l00103"></a>00103 
<a name="l00104"></a><a class="code" href="class_sparse_matrix.html#a91cdd6245a07406d15a34b56b7bf95d2">00104</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_sparse_matrix.html#a91cdd6245a07406d15a34b56b7bf95d2">_valuePtr</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &amp;<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(0); }
<a name="l00105"></a><a class="code" href="class_sparse_matrix.html#add8b25ec1b52fd048f7d3d507337bd25">00105</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>* <a class="code" href="class_sparse_matrix.html#add8b25ec1b52fd048f7d3d507337bd25">_valuePtr</a>() { <span class="keywordflow">return</span> &amp;<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(0); }
<a name="l00106"></a>00106 
<a name="l00107"></a><a class="code" href="class_sparse_matrix.html#af1b1f6920f2002ea76ec7bb0ce662f74">00107</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_sparse_matrix.html#af1b1f6920f2002ea76ec7bb0ce662f74">_innerIndexPtr</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &amp;<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(0); }
<a name="l00108"></a><a class="code" href="class_sparse_matrix.html#a6d83d0e72ca97b63cd04859c7555f4cb">00108</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* <a class="code" href="class_sparse_matrix.html#a6d83d0e72ca97b63cd04859c7555f4cb">_innerIndexPtr</a>() { <span class="keywordflow">return</span> &amp;<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(0); }
<a name="l00109"></a>00109 
<a name="l00110"></a><a class="code" href="class_sparse_matrix.html#a6b49f2197f3c7ad618e030b8fc602845">00110</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_sparse_matrix.html#a6b49f2197f3c7ad618e030b8fc602845">_outerIndexPtr</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>; }
<a name="l00111"></a><a class="code" href="class_sparse_matrix.html#afc3f91ed6e8b71dc017b4c835f0b0500">00111</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* <a class="code" href="class_sparse_matrix.html#afc3f91ed6e8b71dc017b4c835f0b0500">_outerIndexPtr</a>() { <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>; }
<a name="l00112"></a>00112 
<a name="l00113"></a><a class="code" href="class_sparse_matrix.html#a29763545859ceac7193ecb453df1c024">00113</a>     <span class="keyword">inline</span> <a class="code" href="class_compressed_storage.html">Storage</a>&amp; <a class="code" href="class_sparse_matrix.html#a29763545859ceac7193ecb453df1c024">data</a>() { <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>; }
<a name="l00114"></a><a class="code" href="class_sparse_matrix.html#a989f15106080f7e0f34e35460246f06d">00114</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="class_compressed_storage.html">Storage</a>&amp; <a class="code" href="class_sparse_matrix.html#a989f15106080f7e0f34e35460246f06d">data</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>; }
<a name="l00115"></a>00115 
<a name="l00116"></a><a class="code" href="class_sparse_matrix.html#a6ab3eea75a241abc52a98e196e0125dc">00116</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a> <a class="code" href="class_sparse_matrix.html#a6ab3eea75a241abc52a98e196e0125dc">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="l00117"></a>00117 <span class="keyword">    </span>{
<a name="l00118"></a>00118       <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> outer = <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? row : <a class="code" href="class_sparse_matrix_base.html#a8afce4f24094824bd538a3bc1b83b84f">col</a>;
<a name="l00119"></a>00119       <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> inner = <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? col : <a class="code" href="class_sparse_matrix_base.html#a69b30d59e93b1dffa5234bdfbc98d286">row</a>;
<a name="l00120"></a>00120       <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a4da5ec68b431743f05d00eba6de70b62" title="Like at(), but the search is performed in the range [start,end)">atInRange</a>(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer], <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1], inner);
<a name="l00121"></a>00121     }
<a name="l00122"></a>00122 
<a name="l00123"></a><a class="code" href="class_sparse_matrix.html#ad9e3ea3bbb6b618642e1082c9d804549">00123</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&amp; <a class="code" href="class_sparse_matrix.html#ad9e3ea3bbb6b618642e1082c9d804549">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="l00124"></a>00124     {
<a name="l00125"></a>00125       <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> outer = <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? row : <a class="code" href="class_sparse_matrix_base.html#a8afce4f24094824bd538a3bc1b83b84f">col</a>;
<a name="l00126"></a>00126       <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> inner = <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? col : <a class="code" href="class_sparse_matrix_base.html#a69b30d59e93b1dffa5234bdfbc98d286">row</a>;
<a name="l00127"></a>00127 
<a name="l00128"></a>00128       <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> start = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer];
<a name="l00129"></a>00129       <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_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1];
<a name="l00130"></a>00130       <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="l00131"></a>00131       <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="l00132"></a>00132       <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> p = <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a6be9c866ca0010771566ef28aea11a8e">searchLowerIndex</a>(start,end-1,inner);
<a name="l00133"></a>00133       <a class="code" href="_macros_8h.html#acaa7ba89800cfe18d5fd6eed620aea9c">eigen_assert</a>((p&lt;end) &amp;&amp; (<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(p)==inner) &amp;&amp; <span class="stringliteral">&quot;coeffRef cannot be called on a zero coefficient&quot;</span>);
<a name="l00134"></a>00134       <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(p);
<a name="l00135"></a>00135     }
<a name="l00136"></a>00136 
<a name="l00137"></a>00137   <span class="keyword">public</span>:
<a name="l00138"></a>00138 
<a name="l00139"></a>00139     <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="l00140"></a>00140 <span class="comment"></span>
<a name="l00141"></a>00141 <span class="comment">    /** Removes all non zeros */</span>
<a name="l00142"></a><a class="code" href="class_sparse_matrix.html#a6bef67522cafc4ed9f2e3e13d9cb44b4">00142</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="class_sparse_matrix.html#a6bef67522cafc4ed9f2e3e13d9cb44b4" title="Removes all non zeros.">setZero</a>()
<a name="l00143"></a>00143     {
<a name="l00144"></a>00144       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#aecb4867a0f73fd3ff9c24ea4d8923ad8">clear</a>();
<a name="l00145"></a>00145       memset(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>, 0, (<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>+1)*<span class="keyword">sizeof</span>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>));
<a name="l00146"></a>00146     }
<a name="l00147"></a>00147 <span class="comment"></span>
<a name="l00148"></a>00148 <span class="comment">    /** \returns the number of non zero coefficients */</span>
<a name="l00149"></a><a class="code" href="class_sparse_matrix.html#ae299bfb1b1df485fce0d23784f601d91">00149</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#ae299bfb1b1df485fce0d23784f601d91">nonZeros</a>()<span class="keyword"> const  </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a><span class="keyword">&gt;</span>(<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>()); }
<a name="l00150"></a>00150 <span class="comment"></span>
<a name="l00151"></a>00151 <span class="comment">    /** Preallocates \a reserveSize non zeros */</span>
<a name="l00152"></a><a class="code" href="class_sparse_matrix.html#a98df4a9eaaecc472b7e7732ba3accf46">00152</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="class_sparse_matrix.html#a98df4a9eaaecc472b7e7732ba3accf46" title="Preallocates reserveSize non zeros.">reserve</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> reserveSize)
<a name="l00153"></a>00153     {
<a name="l00154"></a>00154       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a9a2e7bb3746af16a7ab5b923f61d24f6">reserve</a>(reserveSize);
<a name="l00155"></a>00155     }
<a name="l00156"></a>00156 
<a name="l00157"></a>00157     <span class="comment">//--- low level purely coherent filling ---</span>
<a name="l00158"></a>00158 <span class="comment"></span>
<a name="l00159"></a>00159 <span class="comment">    /** \returns a reference to the non zero coefficient at position \a row, \a col assuming that:</span>
<a name="l00160"></a>00160 <span class="comment">      * - the nonzero does not already exist</span>
<a name="l00161"></a>00161 <span class="comment">      * - the new coefficient is the last one according to the storage order</span>
<a name="l00162"></a>00162 <span class="comment">      *</span>
<a name="l00163"></a>00163 <span class="comment">      * Before filling a given inner vector you must call the statVec(Index) function.</span>
<a name="l00164"></a>00164 <span class="comment">      *</span>
<a name="l00165"></a>00165 <span class="comment">      * After an insertion session, you should call the finalize() function.</span>
<a name="l00166"></a>00166 <span class="comment">      *</span>
<a name="l00167"></a>00167 <span class="comment">      * \sa insert, insertBackByOuterInner, startVec */</span>
<a name="l00168"></a><a class="code" href="class_sparse_matrix.html#ae8425277266cce89c948f0cb7888c421">00168</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&amp; <a class="code" href="class_sparse_matrix.html#ae8425277266cce89c948f0cb7888c421">insertBack</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="l00169"></a>00169     {
<a name="l00170"></a>00170       <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#ac06680baf5b4f7c344f841e50b1d70a0">insertBackByOuterInner</a>(<a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a>?row:col, <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a>?col:row);
<a name="l00171"></a>00171     }
<a name="l00172"></a>00172 <span class="comment"></span>
<a name="l00173"></a>00173 <span class="comment">    /** \sa insertBack, startVec */</span>
<a name="l00174"></a><a class="code" href="class_sparse_matrix.html#ac06680baf5b4f7c344f841e50b1d70a0">00174</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&amp; <a class="code" href="class_sparse_matrix.html#ac06680baf5b4f7c344f841e50b1d70a0">insertBackByOuterInner</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> outer, <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> inner)
<a name="l00175"></a>00175     {
<a name="l00176"></a>00176       <a class="code" href="_macros_8h.html#acaa7ba89800cfe18d5fd6eed620aea9c">eigen_assert</a>(<span class="keywordtype">size_t</span>(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1]) == <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>() &amp;&amp; <span class="stringliteral">&quot;Invalid ordered insertion (invalid outer index)&quot;</span>);
<a name="l00177"></a>00177       <a class="code" href="_macros_8h.html#acaa7ba89800cfe18d5fd6eed620aea9c">eigen_assert</a>( (<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1]-<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer]==0 || <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>()-1)&lt;inner) &amp;&amp; <span class="stringliteral">&quot;Invalid ordered insertion (invalid inner index)&quot;</span>);
<a name="l00178"></a>00178       <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> p = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1];
<a name="l00179"></a>00179       ++<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1];
<a name="l00180"></a>00180       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a0fadaaf875137eeeb2d24c91c05bd0fd">append</a>(0, inner);
<a name="l00181"></a>00181       <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(p);
<a name="l00182"></a>00182     }
<a name="l00183"></a>00183 <span class="comment"></span>
<a name="l00184"></a>00184 <span class="comment">    /** \warning use it only if you know what you are doing */</span>
<a name="l00185"></a><a class="code" href="class_sparse_matrix.html#a37bba4989f9f319ba970ed70ca060f0f">00185</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&amp; <a class="code" href="class_sparse_matrix.html#a37bba4989f9f319ba970ed70ca060f0f">insertBackByOuterInnerUnordered</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> outer, <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> inner)
<a name="l00186"></a>00186     {
<a name="l00187"></a>00187       <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> p = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1];
<a name="l00188"></a>00188       ++<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1];
<a name="l00189"></a>00189       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a0fadaaf875137eeeb2d24c91c05bd0fd">append</a>(0, inner);
<a name="l00190"></a>00190       <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(p);
<a name="l00191"></a>00191     }
<a name="l00192"></a>00192 <span class="comment"></span>
<a name="l00193"></a>00193 <span class="comment">    /** \sa insertBack, insertBackByOuterInner */</span>
<a name="l00194"></a><a class="code" href="class_sparse_matrix.html#a6d7ae0f615e3a89b45a6fb4ddc112338">00194</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="class_sparse_matrix.html#a6d7ae0f615e3a89b45a6fb4ddc112338">startVec</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> outer)
<a name="l00195"></a>00195     {
<a name="l00196"></a>00196       <a class="code" href="_macros_8h.html#acaa7ba89800cfe18d5fd6eed620aea9c">eigen_assert</a>(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer]==<span class="keywordtype">int</span>(<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>()) &amp;&amp; <span class="stringliteral">&quot;You must call startVec for each inner vector sequentially&quot;</span>);
<a name="l00197"></a>00197       <a class="code" href="_macros_8h.html#acaa7ba89800cfe18d5fd6eed620aea9c">eigen_assert</a>(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1]==0 &amp;&amp; <span class="stringliteral">&quot;You must call startVec for each inner vector sequentially&quot;</span>);
<a name="l00198"></a>00198       <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1] = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer];
<a name="l00199"></a>00199     }
<a name="l00200"></a>00200 
<a name="l00201"></a>00201     <span class="comment">//---</span>
<a name="l00202"></a>00202 <span class="comment"></span>
<a name="l00203"></a>00203 <span class="comment">    /** \returns a reference to a novel non zero coefficient with coordinates \a row x \a col.</span>
<a name="l00204"></a>00204 <span class="comment">      * The non zero coefficient must \b not already exist.</span>
<a name="l00205"></a>00205 <span class="comment">      *</span>
<a name="l00206"></a>00206 <span class="comment">      * \warning This function can be extremely slow if the non zero coefficients</span>
<a name="l00207"></a>00207 <span class="comment">      * are not inserted in a coherent order.</span>
<a name="l00208"></a>00208 <span class="comment">      *</span>
<a name="l00209"></a>00209 <span class="comment">      * After an insertion session, you should call the finalize() function.</span>
<a name="l00210"></a>00210 <span class="comment">      */</span>
<a name="l00211"></a><a class="code" href="class_sparse_matrix.html#ad8b095f6726570d7372929c60b554d07">00211</a>     <a class="code" href="_macros_8h.html#aa715c1fe854205b27e962ee7d7e06faf">EIGEN_DONT_INLINE</a> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&amp; <a class="code" href="class_sparse_matrix.html#ad8b095f6726570d7372929c60b554d07">insert</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="l00212"></a>00212     {
<a name="l00213"></a>00213       <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> outer = <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? row : <a class="code" href="class_sparse_matrix_base.html#a8afce4f24094824bd538a3bc1b83b84f">col</a>;
<a name="l00214"></a>00214       <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> inner = <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? col : <a class="code" href="class_sparse_matrix_base.html#a69b30d59e93b1dffa5234bdfbc98d286">row</a>;
<a name="l00215"></a>00215 
<a name="l00216"></a>00216       <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> previousOuter = outer;
<a name="l00217"></a>00217       <span class="keywordflow">if</span> (<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1]==0)
<a name="l00218"></a>00218       {
<a name="l00219"></a>00219         <span class="comment">// we start a new inner vector</span>
<a name="l00220"></a>00220         <span class="keywordflow">while</span> (previousOuter&gt;=0 &amp;&amp; <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[previousOuter]==0)
<a name="l00221"></a>00221         {
<a name="l00222"></a>00222           <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[previousOuter] = <span class="keyword">static_cast&lt;</span><a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a><span class="keyword">&gt;</span>(<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>());
<a name="l00223"></a>00223           --previousOuter;
<a name="l00224"></a>00224         }
<a name="l00225"></a>00225         <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1] = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer];
<a name="l00226"></a>00226       }
<a name="l00227"></a>00227 
<a name="l00228"></a>00228       <span class="comment">// here we have to handle the tricky case where the outerIndex array</span>
<a name="l00229"></a>00229       <span class="comment">// starts with: [ 0 0 0 0 0 1 ...] and we are inserting in, e.g.,</span>
<a name="l00230"></a>00230       <span class="comment">// the 2nd inner vector...</span>
<a name="l00231"></a>00231       <span class="keywordtype">bool</span> isLastVec = (!(previousOuter==-1 &amp;&amp; <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>()!=0))
<a name="l00232"></a>00232                     &amp;&amp; (size_t(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1]) == <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>());
<a name="l00233"></a>00233 
<a name="l00234"></a>00234       <span class="keywordtype">size_t</span> startId = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer];
<a name="l00235"></a>00235       <span class="comment">// FIXME let&#39;s make sure sizeof(long int) == sizeof(size_t)</span>
<a name="l00236"></a>00236       <span class="keywordtype">size_t</span> p = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1];
<a name="l00237"></a>00237       ++<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1];
<a name="l00238"></a>00238 
<a name="l00239"></a>00239       <span class="keywordtype">float</span> reallocRatio = 1;
<a name="l00240"></a>00240       <span class="keywordflow">if</span> (<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a7947dc70ad0e4938d0d50519f9351cf4">allocatedSize</a>()&lt;=<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>())
<a name="l00241"></a>00241       {
<a name="l00242"></a>00242         <span class="comment">// if there is no preallocated memory, let&#39;s reserve a minimum of 32 elements</span>
<a name="l00243"></a>00243         <span class="keywordflow">if</span> (<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>()==0)
<a name="l00244"></a>00244         {
<a name="l00245"></a>00245           <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a9a2e7bb3746af16a7ab5b923f61d24f6">reserve</a>(32);
<a name="l00246"></a>00246         }
<a name="l00247"></a>00247         <span class="keywordflow">else</span>
<a name="l00248"></a>00248         {
<a name="l00249"></a>00249           <span class="comment">// we need to reallocate the data, to reduce multiple reallocations</span>
<a name="l00250"></a>00250           <span class="comment">// we use a smart resize algorithm based on the current filling ratio</span>
<a name="l00251"></a>00251           <span class="comment">// in addition, we use float to avoid integers overflows</span>
<a name="l00252"></a>00252           <span class="keywordtype">float</span> nnzEstimate = float(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer])*float(<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>)/float(outer+1);
<a name="l00253"></a>00253           reallocRatio = (nnzEstimate-float(<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>()))/float(<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>());
<a name="l00254"></a>00254           <span class="comment">// furthermore we bound the realloc ratio to:</span>
<a name="l00255"></a>00255           <span class="comment">//   1) reduce multiple minor realloc when the matrix is almost filled</span>
<a name="l00256"></a>00256           <span class="comment">//   2) avoid to allocate too much memory when the matrix is almost empty</span>
<a name="l00257"></a>00257           reallocRatio = std::min(std::max(reallocRatio,1.5f),8.f);
<a name="l00258"></a>00258         }
<a name="l00259"></a>00259       }
<a name="l00260"></a>00260       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a9af0087ac21df447128a46b80631c8c1">resize</a>(<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>()+1,reallocRatio);
<a name="l00261"></a>00261 
<a name="l00262"></a>00262       <span class="keywordflow">if</span> (!isLastVec)
<a name="l00263"></a>00263       {
<a name="l00264"></a>00264         <span class="keywordflow">if</span> (previousOuter==-1)
<a name="l00265"></a>00265         {
<a name="l00266"></a>00266           <span class="comment">// oops wrong guess.</span>
<a name="l00267"></a>00267           <span class="comment">// let&#39;s correct the outer offsets</span>
<a name="l00268"></a>00268           <span class="keywordflow">for</span> (<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> k=0; k&lt;=(outer+1); ++k)
<a name="l00269"></a>00269             <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[k] = 0;
<a name="l00270"></a>00270           <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> k=outer+1;
<a name="l00271"></a>00271           <span class="keywordflow">while</span>(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[k]==0)
<a name="l00272"></a>00272             <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[k++] = 1;
<a name="l00273"></a>00273           <span class="keywordflow">while</span> (k&lt;=<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a> &amp;&amp; <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[k]!=0)
<a name="l00274"></a>00274             <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[k++]++;
<a name="l00275"></a>00275           p = 0;
<a name="l00276"></a>00276           --k;
<a name="l00277"></a>00277           k = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[k]-1;
<a name="l00278"></a>00278           <span class="keywordflow">while</span> (k&gt;0)
<a name="l00279"></a>00279           {
<a name="l00280"></a>00280             <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(k) = <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(k-1);
<a name="l00281"></a>00281             <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(k) = <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(k-1);
<a name="l00282"></a>00282             k--;
<a name="l00283"></a>00283           }
<a name="l00284"></a>00284         }
<a name="l00285"></a>00285         <span class="keywordflow">else</span>
<a name="l00286"></a>00286         {
<a name="l00287"></a>00287           <span class="comment">// we are not inserting into the last inner vec</span>
<a name="l00288"></a>00288           <span class="comment">// update outer indices:</span>
<a name="l00289"></a>00289           <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> j = outer+2;
<a name="l00290"></a>00290           <span class="keywordflow">while</span> (j&lt;=<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a> &amp;&amp; <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[j]!=0)
<a name="l00291"></a>00291             <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[j++]++;
<a name="l00292"></a>00292           --j;
<a name="l00293"></a>00293           <span class="comment">// shift data of last vecs:</span>
<a name="l00294"></a>00294           <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> k = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[j]-1;
<a name="l00295"></a>00295           <span class="keywordflow">while</span> (k&gt;=<a class="code" href="class_sparse_matrix_base.html#ae1d069410cb392f19d4a8e3f0d3e2276">Index</a>(p))
<a name="l00296"></a>00296           {
<a name="l00297"></a>00297             <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(k) = <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(k-1);
<a name="l00298"></a>00298             <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(k) = <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(k-1);
<a name="l00299"></a>00299             k--;
<a name="l00300"></a>00300           }
<a name="l00301"></a>00301         }
<a name="l00302"></a>00302       }
<a name="l00303"></a>00303 
<a name="l00304"></a>00304       <span class="keywordflow">while</span> ( (p &gt; startId) &amp;&amp; (<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(p-1) &gt; inner) )
<a name="l00305"></a>00305       {
<a name="l00306"></a>00306         <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(p) = <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(p-1);
<a name="l00307"></a>00307         <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(p) = <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(p-1);
<a name="l00308"></a>00308         --p;
<a name="l00309"></a>00309       }
<a name="l00310"></a>00310 
<a name="l00311"></a>00311       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(p) = inner;
<a name="l00312"></a>00312       <span class="keywordflow">return</span> (<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(p) = 0);
<a name="l00313"></a>00313     }
<a name="l00314"></a>00314 
<a name="l00315"></a>00315 
<a name="l00316"></a>00316 
<a name="l00317"></a>00317 <span class="comment"></span>
<a name="l00318"></a>00318 <span class="comment">    /** Must be called after inserting a set of non zero entries.</span>
<a name="l00319"></a>00319 <span class="comment">      */</span>
<a name="l00320"></a><a class="code" href="class_sparse_matrix.html#a083a756f5485e97716e292b83a88f2dd">00320</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="class_sparse_matrix.html#a083a756f5485e97716e292b83a88f2dd" title="Must be called after inserting a set of non zero entries.">finalize</a>()
<a name="l00321"></a>00321     {
<a name="l00322"></a>00322       <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_base.html#a9fb852284f288cfb1e8476da3a49f519">size</a> = <span class="keyword">static_cast&lt;</span><a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a><span class="keyword">&gt;</span>(<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>());
<a name="l00323"></a>00323       <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> i = <a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>;
<a name="l00324"></a>00324       <span class="comment">// find the last filled column</span>
<a name="l00325"></a>00325       <span class="keywordflow">while</span> (i&gt;=0 &amp;&amp; <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[i]==0)
<a name="l00326"></a>00326         --i;
<a name="l00327"></a>00327       ++i;
<a name="l00328"></a>00328       <span class="keywordflow">while</span> (i&lt;=<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>)
<a name="l00329"></a>00329       {
<a name="l00330"></a>00330         <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[i] = <a class="code" href="class_sparse_matrix_base.html#a9fb852284f288cfb1e8476da3a49f519">size</a>;
<a name="l00331"></a>00331         ++i;
<a name="l00332"></a>00332       }
<a name="l00333"></a>00333     }
<a name="l00334"></a>00334 <span class="comment"></span>
<a name="l00335"></a>00335 <span class="comment">    /** Suppress all nonzeros which are smaller than \a reference under the tolerence \a epsilon */</span>
<a name="l00336"></a><a class="code" href="class_sparse_matrix.html#ab1a845800981098a42abc5f42fdf4ae9">00336</a>     <span class="keywordtype">void</span> <a class="code" href="class_sparse_matrix.html#ab1a845800981098a42abc5f42fdf4ae9" title="Suppress all nonzeros which are smaller than reference under the tolerence epsilon.">prune</a>(<a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a> reference, RealScalar epsilon = <a class="code" href="struct_num_traits.html" title="Holds information about the various numeric (i.e.">NumTraits&lt;RealScalar&gt;::dummy_precision</a>())
<a name="l00337"></a>00337     {
<a name="l00338"></a>00338       <a class="code" href="class_sparse_matrix.html#ab1a845800981098a42abc5f42fdf4ae9" title="Suppress all nonzeros which are smaller than reference under the tolerence epsilon.">prune</a>(<a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html">default_prunning_func</a>(reference,epsilon));
<a name="l00339"></a>00339     }
<a name="l00340"></a>00340     <span class="comment"></span>
<a name="l00341"></a>00341 <span class="comment">    /** Suppress all nonzeros which do not satisfy the predicate \a keep.</span>
<a name="l00342"></a>00342 <span class="comment">      * The functor type \a KeepFunc must implement the following function:</span>
<a name="l00343"></a>00343 <span class="comment">      * \code</span>
<a name="l00344"></a>00344 <span class="comment">      * bool operator() (const Index&amp; row, const Index&amp; col, const Scalar&amp; value) const;</span>
<a name="l00345"></a>00345 <span class="comment">      * \endcode</span>
<a name="l00346"></a>00346 <span class="comment">      * \sa prune(Scalar,RealScalar)</span>
<a name="l00347"></a>00347 <span class="comment">      */</span>
<a name="l00348"></a>00348     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> KeepFunc&gt;
<a name="l00349"></a><a class="code" href="class_sparse_matrix.html#ab2c4a2d8b3ae772204f488aecb015729">00349</a>     <span class="keywordtype">void</span> <a class="code" href="class_sparse_matrix.html#ab1a845800981098a42abc5f42fdf4ae9" title="Suppress all nonzeros which are smaller than reference under the tolerence epsilon.">prune</a>(<span class="keyword">const</span> KeepFunc&amp; keep = KeepFunc())
<a name="l00350"></a>00350     {
<a name="l00351"></a>00351       <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> k = 0;
<a name="l00352"></a>00352       <span class="keywordflow">for</span>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> j=0; j&lt;<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>; ++j)
<a name="l00353"></a>00353       {
<a name="l00354"></a>00354         <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> previousStart = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[j];
<a name="l00355"></a>00355         <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[j] = k;
<a name="l00356"></a>00356         <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_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[j+1];
<a name="l00357"></a>00357         <span class="keywordflow">for</span>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> i=previousStart; i&lt;<a class="code" href="eigen__plugins_8h.html#ade5b39864c905cbb824d0ff6eb0d888c">end</a>; ++i)
<a name="l00358"></a>00358         {
<a name="l00359"></a>00359           <span class="keywordflow">if</span>(keep(<a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a>?j:<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(i), <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a>?<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(i):j, <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(i)))
<a name="l00360"></a>00360           {
<a name="l00361"></a>00361             <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(k) = <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(i);
<a name="l00362"></a>00362             <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(k) = <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(i);
<a name="l00363"></a>00363             ++k;
<a name="l00364"></a>00364           }
<a name="l00365"></a>00365         }
<a name="l00366"></a>00366       }
<a name="l00367"></a>00367       <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>] = k;
<a name="l00368"></a>00368       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a9af0087ac21df447128a46b80631c8c1">resize</a>(k,0);
<a name="l00369"></a>00369     }
<a name="l00370"></a>00370 <span class="comment"></span>
<a name="l00371"></a>00371 <span class="comment">    /** Resizes the matrix to a \a rows x \a cols matrix and initializes it to zero</span>
<a name="l00372"></a>00372 <span class="comment">      * \sa resizeNonZeros(Index), reserve(), setZero()</span>
<a name="l00373"></a>00373 <span class="comment">      */</span>
<a name="l00374"></a><a class="code" href="class_sparse_matrix.html#ada2c442cf33b4e0bf75cc75817b42203">00374</a>     <span class="keywordtype">void</span> <a class="code" href="class_sparse_matrix.html#ada2c442cf33b4e0bf75cc75817b42203" title="Resizes the matrix to a rows x cols matrix and initializes it to zero.">resize</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a08ea96e4a43cad89fe8803b17b3a200a">rows</a>, <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a0db0dfa1ad560120debf4ac2b1de51de">cols</a>)
<a name="l00375"></a>00375     {
<a name="l00376"></a>00376       <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a4469108db20a12c3791e76bb6931dbfd">outerSize</a> = <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? rows : <a class="code" href="class_sparse_matrix.html#a0db0dfa1ad560120debf4ac2b1de51de">cols</a>;
<a name="l00377"></a>00377       <a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">m_innerSize</a> = <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? cols : <a class="code" href="class_sparse_matrix.html#a08ea96e4a43cad89fe8803b17b3a200a">rows</a>;
<a name="l00378"></a>00378       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#aecb4867a0f73fd3ff9c24ea4d8923ad8">clear</a>();
<a name="l00379"></a>00379       <span class="keywordflow">if</span> (<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a> != outerSize || <a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>==0)
<a name="l00380"></a>00380       {
<a name="l00381"></a>00381         <span class="keyword">delete</span>[] <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>;
<a name="l00382"></a>00382         <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a> = <span class="keyword">new</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> [outerSize+1];
<a name="l00383"></a>00383         <a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a> = <a class="code" href="class_sparse_matrix.html#a4469108db20a12c3791e76bb6931dbfd">outerSize</a>;
<a name="l00384"></a>00384       }
<a name="l00385"></a>00385       memset(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>, 0, (<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>+1)*<span class="keyword">sizeof</span>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>));
<a name="l00386"></a>00386     }
<a name="l00387"></a>00387 <span class="comment"></span>
<a name="l00388"></a>00388 <span class="comment">    /** Low level API</span>
<a name="l00389"></a>00389 <span class="comment">      * Resize the nonzero vector to \a size */</span>
<a name="l00390"></a><a class="code" href="class_sparse_matrix.html#aef0b4e3b001274214effef0a81f699f5">00390</a>     <span class="keywordtype">void</span> <a class="code" href="class_sparse_matrix.html#aef0b4e3b001274214effef0a81f699f5" title="Low level API Resize the nonzero vector to size.">resizeNonZeros</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_base.html#a9fb852284f288cfb1e8476da3a49f519">size</a>)
<a name="l00391"></a>00391     {
<a name="l00392"></a>00392       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a9af0087ac21df447128a46b80631c8c1">resize</a>(size);
<a name="l00393"></a>00393     }
<a name="l00394"></a>00394 <span class="comment"></span>
<a name="l00395"></a>00395 <span class="comment">    /** Default constructor yielding an empty \c 0 \c x \c 0 matrix */</span>
<a name="l00396"></a><a class="code" href="class_sparse_matrix.html#a65c82f7ebd2c88a77fed6f7403036d1d">00396</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix.html#a65c82f7ebd2c88a77fed6f7403036d1d" title="Default constructor yielding an empty 0 x 0 matrix.">SparseMatrix</a>()
<a name="l00397"></a>00397       : <a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>(-1), <a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">m_innerSize</a>(0), <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>(0)
<a name="l00398"></a>00398     {
<a name="l00399"></a>00399       <a class="code" href="class_sparse_matrix.html#ada2c442cf33b4e0bf75cc75817b42203" title="Resizes the matrix to a rows x cols matrix and initializes it to zero.">resize</a>(0, 0);
<a name="l00400"></a>00400     }
<a name="l00401"></a>00401 <span class="comment"></span>
<a name="l00402"></a>00402 <span class="comment">    /** Constructs a \a rows \c x \a cols empty matrix */</span>
<a name="l00403"></a><a class="code" href="class_sparse_matrix.html#a34422a0997e6f682a186ca73b37aca59">00403</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix.html#a65c82f7ebd2c88a77fed6f7403036d1d" title="Default constructor yielding an empty 0 x 0 matrix.">SparseMatrix</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a08ea96e4a43cad89fe8803b17b3a200a">rows</a>, <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix.html#a0db0dfa1ad560120debf4ac2b1de51de">cols</a>)
<a name="l00404"></a>00404       : <a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>(0), <a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">m_innerSize</a>(0), <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>(0)
<a name="l00405"></a>00405     {
<a name="l00406"></a>00406       <a class="code" href="class_sparse_matrix.html#ada2c442cf33b4e0bf75cc75817b42203" title="Resizes the matrix to a rows x cols matrix and initializes it to zero.">resize</a>(rows, cols);
<a name="l00407"></a>00407     }
<a name="l00408"></a>00408 <span class="comment"></span>
<a name="l00409"></a>00409 <span class="comment">    /** Constructs a sparse matrix from the sparse expression \a other */</span>
<a name="l00410"></a>00410     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> OtherDerived&gt;
<a name="l00411"></a><a class="code" href="class_sparse_matrix.html#a3df37d61fc6035e8a41dc3143111784f">00411</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix.html#a65c82f7ebd2c88a77fed6f7403036d1d" title="Default constructor yielding an empty 0 x 0 matrix.">SparseMatrix</a>(<span class="keyword">const</span> <a class="code" href="class_sparse_matrix_base.html" title="Base class of any sparse matrices or sparse expressions.">SparseMatrixBase&lt;OtherDerived&gt;</a>&amp; other)
<a name="l00412"></a>00412       : <a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>(0), <a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">m_innerSize</a>(0), <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>(0)
<a name="l00413"></a>00413     {
<a name="l00414"></a>00414       *<span class="keyword">this</span> = other.<a class="code" href="struct_eigen_base.html#a6356c64f85b1f1e61a62e62c8e73f91a">derived</a>();
<a name="l00415"></a>00415     }
<a name="l00416"></a>00416 <span class="comment"></span>
<a name="l00417"></a>00417 <span class="comment">    /** Copy constructor */</span>
<a name="l00418"></a><a class="code" href="class_sparse_matrix.html#a2cd2f4c2a72f9e16ac7bf9d6febc9adc">00418</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix.html#a65c82f7ebd2c88a77fed6f7403036d1d" title="Default constructor yielding an empty 0 x 0 matrix.">SparseMatrix</a>(<span class="keyword">const</span> <a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>&amp; other)
<a name="l00419"></a>00419       : <a class="code" href="class_sparse_matrix_base.html#a1115fc94453a8d25338195b7a630cbf9">Base</a>(), <a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>(0), <a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">m_innerSize</a>(0), <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>(0)
<a name="l00420"></a>00420     {
<a name="l00421"></a>00421       *<span class="keyword">this</span> = other.<a class="code" href="struct_eigen_base.html#a6356c64f85b1f1e61a62e62c8e73f91a">derived</a>();
<a name="l00422"></a>00422     }
<a name="l00423"></a>00423 <span class="comment"></span>
<a name="l00424"></a>00424 <span class="comment">    /** Swap the content of two sparse matrices of same type (optimization) */</span>
<a name="l00425"></a><a class="code" href="class_sparse_matrix.html#aeea3326c2fff70f537eac61d9d011603">00425</a>     <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="class_sparse_matrix.html#aeea3326c2fff70f537eac61d9d011603" title="Swap the content of two sparse matrices of same type (optimization)">swap</a>(<a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>&amp; other)
<a name="l00426"></a>00426     {
<a name="l00427"></a>00427       <span class="comment">//EIGEN_DBG_SPARSE(std::cout &lt;&lt; &quot;SparseMatrix:: swap\n&quot;);</span>
<a name="l00428"></a>00428       <a class="code" href="class_sparse_matrix.html#aeea3326c2fff70f537eac61d9d011603" title="Swap the content of two sparse matrices of same type (optimization)">std::swap</a>(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>, other.<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>);
<a name="l00429"></a>00429       <a class="code" href="class_sparse_matrix.html#aeea3326c2fff70f537eac61d9d011603" title="Swap the content of two sparse matrices of same type (optimization)">std::swap</a>(<a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">m_innerSize</a>, other.<a class="code" href="class_sparse_matrix.html#a4e48d9cd903fd687b6c288d9c8b4d4e1">m_innerSize</a>);
<a name="l00430"></a>00430       <a class="code" href="class_sparse_matrix.html#aeea3326c2fff70f537eac61d9d011603" title="Swap the content of two sparse matrices of same type (optimization)">std::swap</a>(<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>, other.<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>);
<a name="l00431"></a>00431       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a6a04ef3cb2cebc50d62a66b59619451e">swap</a>(other.<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>);
<a name="l00432"></a>00432     }
<a name="l00433"></a>00433 
<a name="l00434"></a><a class="code" href="class_sparse_matrix.html#a1c79c6b5b7ea23252d4108185eaa37aa">00434</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>&amp; <a class="code" href="class_sparse_matrix.html#a1c79c6b5b7ea23252d4108185eaa37aa">operator=</a>(<span class="keyword">const</span> <a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>&amp; other)
<a name="l00435"></a>00435     {
<a name="l00436"></a>00436 <span class="comment">//       std::cout &lt;&lt; &quot;SparseMatrix&amp; operator=(const SparseMatrix&amp; other)\n&quot;;</span>
<a name="l00437"></a>00437       <span class="keywordflow">if</span> (other.<a class="code" href="class_sparse_matrix_base.html#a959b8f7a2f7bb5848670acf0f8c52f92">isRValue</a>())
<a name="l00438"></a>00438       {
<a name="l00439"></a>00439         <a class="code" href="class_sparse_matrix.html#aeea3326c2fff70f537eac61d9d011603" title="Swap the content of two sparse matrices of same type (optimization)">swap</a>(other.<a class="code" href="struct_eigen_base.html#ad7fac7d6bafdedba4b349717a53e20e4">const_cast_derived</a>());
<a name="l00440"></a>00440       }
<a name="l00441"></a>00441       <span class="keywordflow">else</span>
<a name="l00442"></a>00442       {
<a name="l00443"></a>00443         <a class="code" href="class_sparse_matrix.html#ada2c442cf33b4e0bf75cc75817b42203" title="Resizes the matrix to a rows x cols matrix and initializes it to zero.">resize</a>(other.<a class="code" href="class_sparse_matrix.html#a08ea96e4a43cad89fe8803b17b3a200a">rows</a>(), other.<a class="code" href="class_sparse_matrix.html#a0db0dfa1ad560120debf4ac2b1de51de">cols</a>());
<a name="l00444"></a>00444         <a class="code" href="namespacemrpt_1_1system_1_1os.html#ae1184cfb1f617787dc4c9da98becbe3a" title="An OS and compiler independent version of &amp;quot;memcpy&amp;quot;.">memcpy</a>(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>, other.<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>, (<a class="code" href="class_sparse_matrix.html#a9e0a71826e2fe7dd76c9a5faae2b1cba">m_outerSize</a>+1)*<span class="keyword">sizeof</span>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>));
<a name="l00445"></a>00445         <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a> = other.<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>;
<a name="l00446"></a>00446       }
<a name="l00447"></a>00447       <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00448"></a>00448     }
<a name="l00449"></a>00449 
<a name="l00450"></a>00450 <span class="preprocessor">    #ifndef EIGEN_PARSED_BY_DOXYGEN</span>
<a name="l00451"></a>00451 <span class="preprocessor"></span>    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Lhs, <span class="keyword">typename</span> Rhs&gt;
<a name="l00452"></a>00452     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>&amp; <a class="code" href="class_sparse_matrix.html#a1c79c6b5b7ea23252d4108185eaa37aa">operator=</a>(<span class="keyword">const</span> <a class="code" href="class_sparse_sparse_product.html">SparseSparseProduct&lt;Lhs,Rhs&gt;</a>&amp; product)
<a name="l00453"></a>00453     {
<a name="l00454"></a>00454       <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a1c79c6b5b7ea23252d4108185eaa37aa">Base::operator=</a>(product);
<a name="l00455"></a>00455     }
<a name="l00456"></a>00456     
<a name="l00457"></a>00457     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> OtherDerived&gt;
<a name="l00458"></a>00458     <a class="code" href="_macros_8h.html#af2b60117c00a6e75812de43bfe7db3b1">EIGEN_STRONG_INLINE</a> <a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>&amp; <a class="code" href="class_sparse_matrix.html#a1c79c6b5b7ea23252d4108185eaa37aa">operator=</a>(<span class="keyword">const</span> <a class="code" href="class_return_by_value.html">ReturnByValue&lt;OtherDerived&gt;</a>&amp; func)
<a name="l00459"></a>00459     {
<a name="l00460"></a>00460       <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a1c79c6b5b7ea23252d4108185eaa37aa">Base::operator=</a>(func);
<a name="l00461"></a>00461     }
<a name="l00462"></a>00462 <span class="preprocessor">    #endif</span>
<a name="l00463"></a>00463 <span class="preprocessor"></span>
<a name="l00464"></a>00464     <span class="keyword">template</span>&lt;<span class="keyword">typename</span> OtherDerived&gt;
<a name="l00465"></a><a class="code" href="class_sparse_matrix.html#a472cf18813ff215603906b9b7faf11f7">00465</a>     <a class="code" href="_macros_8h.html#aa715c1fe854205b27e962ee7d7e06faf">EIGEN_DONT_INLINE</a> <a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>&amp; <a class="code" href="class_sparse_matrix.html#a1c79c6b5b7ea23252d4108185eaa37aa">operator=</a>(<span class="keyword">const</span> <a class="code" href="class_sparse_matrix_base.html" title="Base class of any sparse matrices or sparse expressions.">SparseMatrixBase&lt;OtherDerived&gt;</a>&amp; other)
<a name="l00466"></a>00466     {
<a name="l00467"></a>00467       <span class="keyword">const</span> <span class="keywordtype">bool</span> needToTranspose = (<a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701adb11b5d4625dc81c28848af1ec6dac18" title="This stores expression Flags flags which may or may not be inherited by new expressions constructed f...">Flags</a> &amp; <a class="code" href="group__flags.html#ga7bd49e7b260e869e10fb9dc4fd081a85" title="for a matrix, this means that the storage order is row-major.">RowMajorBit</a>) != (OtherDerived::Flags &amp; <a class="code" href="group__flags.html#ga7bd49e7b260e869e10fb9dc4fd081a85" title="for a matrix, this means that the storage order is row-major.">RowMajorBit</a>);
<a name="l00468"></a>00468       <span class="keywordflow">if</span> (needToTranspose)
<a name="l00469"></a>00469       {
<a name="l00470"></a>00470         <span class="comment">// two passes algorithm:</span>
<a name="l00471"></a>00471         <span class="comment">//  1 - compute the number of coeffs per dest inner vector</span>
<a name="l00472"></a>00472         <span class="comment">//  2 - do the actual copy/eval</span>
<a name="l00473"></a>00473         <span class="comment">// Since each coeff of the rhs has to be evaluated twice, let&#39;s evaluate it if needed</span>
<a name="l00474"></a>00474         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structinternal_1_1nested.html">internal::nested&lt;OtherDerived,2&gt;::type</a> OtherCopy;
<a name="l00475"></a>00475         <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structinternal_1_1remove__all.html#a563ebdff4a8ca3825b500e7efb95c4bc">internal::remove_all&lt;OtherCopy&gt;::type</a> _OtherCopy;
<a name="l00476"></a>00476         OtherCopy otherCopy(other.<a class="code" href="struct_eigen_base.html#a6356c64f85b1f1e61a62e62c8e73f91a">derived</a>());
<a name="l00477"></a>00477 
<a name="l00478"></a>00478         <a class="code" href="class_sparse_matrix.html#ada2c442cf33b4e0bf75cc75817b42203" title="Resizes the matrix to a rows x cols matrix and initializes it to zero.">resize</a>(other.<a class="code" href="class_sparse_matrix_base.html#a797118bb50431f5fb0a39dfe948d9d37">rows</a>(), other.<a class="code" href="class_sparse_matrix_base.html#aedb05ef1f5aee2efd56c0801acef7fe7">cols</a>());
<a name="l00479"></a>00479         Eigen::Map&lt;Matrix&lt;Index, Dynamic, 1&gt; &gt; (<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>,<a class="code" href="class_sparse_matrix.html#a4469108db20a12c3791e76bb6931dbfd">outerSize</a>()).<a class="code" href="class_sparse_matrix.html#a6bef67522cafc4ed9f2e3e13d9cb44b4" title="Removes all non zeros.">setZero</a>();
<a name="l00480"></a>00480         <span class="comment">// pass 1</span>
<a name="l00481"></a>00481         <span class="comment">// FIXME the above copy could be merged with that pass</span>
<a name="l00482"></a>00482         <span class="keywordflow">for</span> (<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> j=0; j&lt;otherCopy.outerSize(); ++j)
<a name="l00483"></a>00483           <span class="keywordflow">for</span> (<span class="keyword">typename</span> _OtherCopy::InnerIterator it(otherCopy, j); it; ++it)
<a name="l00484"></a>00484             ++m_outerIndex[it.index()];
<a name="l00485"></a>00485 
<a name="l00486"></a>00486         <span class="comment">// prefix sum</span>
<a name="l00487"></a>00487         <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> count = 0;
<a name="l00488"></a>00488         VectorXi positions(<a class="code" href="class_sparse_matrix.html#a4469108db20a12c3791e76bb6931dbfd">outerSize</a>());
<a name="l00489"></a>00489         <span class="keywordflow">for</span> (<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> j=0; j&lt;<a class="code" href="class_sparse_matrix.html#a4469108db20a12c3791e76bb6931dbfd">outerSize</a>(); ++j)
<a name="l00490"></a>00490         {
<a name="l00491"></a>00491           <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> tmp = m_outerIndex[j];
<a name="l00492"></a>00492           m_outerIndex[j] = count;
<a name="l00493"></a>00493           positions[j] = count;
<a name="l00494"></a>00494           count += tmp;
<a name="l00495"></a>00495         }
<a name="l00496"></a>00496         m_outerIndex[<a class="code" href="class_sparse_matrix.html#a4469108db20a12c3791e76bb6931dbfd">outerSize</a>()] = count;
<a name="l00497"></a>00497         <span class="comment">// alloc</span>
<a name="l00498"></a>00498         <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a9af0087ac21df447128a46b80631c8c1">resize</a>(count);
<a name="l00499"></a>00499         <span class="comment">// pass 2</span>
<a name="l00500"></a>00500         <span class="keywordflow">for</span> (<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> j=0; j&lt;otherCopy.outerSize(); ++j)
<a name="l00501"></a>00501         {
<a name="l00502"></a>00502           <span class="keywordflow">for</span> (<span class="keyword">typename</span> _OtherCopy::InnerIterator it(otherCopy, j); it; ++it)
<a name="l00503"></a>00503           {
<a name="l00504"></a>00504             <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> pos = positions[it.index()]++;
<a name="l00505"></a>00505             <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(pos) = j;
<a name="l00506"></a>00506             <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(pos) = it.value();
<a name="l00507"></a>00507           }
<a name="l00508"></a>00508         }
<a name="l00509"></a>00509         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00510"></a>00510       }
<a name="l00511"></a>00511       <span class="keywordflow">else</span>
<a name="l00512"></a>00512       {
<a name="l00513"></a>00513         <span class="comment">// there is no special optimization</span>
<a name="l00514"></a>00514         <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a1c79c6b5b7ea23252d4108185eaa37aa">SparseMatrixBase&lt;SparseMatrix&gt;::operator=</a>(other.<a class="code" href="struct_eigen_base.html#a6356c64f85b1f1e61a62e62c8e73f91a">derived</a>());
<a name="l00515"></a>00515       }
<a name="l00516"></a>00516     }
<a name="l00517"></a>00517 
<a name="l00518"></a><a class="code" href="class_sparse_matrix.html#ae7cb03fccbdb1456601051ffa6522c46">00518</a>     <span class="keyword">friend</span> std::ostream &amp; <a class="code" href="class_sparse_matrix.html#ae7cb03fccbdb1456601051ffa6522c46">operator &lt;&lt; </a>(std::ostream &amp; s, <span class="keyword">const</span> <a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>&amp; m)
<a name="l00519"></a>00519     {
<a name="l00520"></a>00520       <a class="code" href="_sparse_util_8h.html#a1a0ccbbfda8877d89c7e6be74ad8f078">EIGEN_DBG_SPARSE</a>(
<a name="l00521"></a>00521         s &lt;&lt; <span class="stringliteral">&quot;Nonzero entries:\n&quot;</span>;
<a name="l00522"></a>00522         <span class="keywordflow">for</span> (<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> i=0; i&lt;m.<a class="code" href="class_sparse_matrix.html#ae299bfb1b1df485fce0d23784f601d91">nonZeros</a>(); ++i)
<a name="l00523"></a>00523         {
<a name="l00524"></a>00524           s &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; m.<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(i) &lt;&lt; <span class="stringliteral">&quot;,&quot;</span> &lt;&lt; m.<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(i) &lt;&lt; <span class="stringliteral">&quot;) &quot;</span>;
<a name="l00525"></a>00525         }
<a name="l00526"></a>00526         s &lt;&lt; std::endl;
<a name="l00527"></a>00527         s &lt;&lt; std::endl;
<a name="l00528"></a>00528         s &lt;&lt; <span class="stringliteral">&quot;Column pointers:\n&quot;</span>;
<a name="l00529"></a>00529         <span class="keywordflow">for</span> (<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> i=0; i&lt;m.<a class="code" href="class_sparse_matrix.html#a4469108db20a12c3791e76bb6931dbfd">outerSize</a>(); ++i)
<a name="l00530"></a>00530         {
<a name="l00531"></a>00531           s &lt;&lt; m.<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[i] &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;
<a name="l00532"></a>00532         }
<a name="l00533"></a>00533         s &lt;&lt; <span class="stringliteral">&quot; $&quot;</span> &lt;&lt; std::endl;
<a name="l00534"></a>00534         s &lt;&lt; std::endl;
<a name="l00535"></a>00535       );
<a name="l00536"></a>00536       s &lt;&lt; static_cast&lt;const SparseMatrixBase&lt;SparseMatrix&gt;&amp;&gt;(m);
<a name="l00537"></a>00537       <span class="keywordflow">return</span> s;
<a name="l00538"></a>00538     }
<a name="l00539"></a>00539 <span class="comment"></span>
<a name="l00540"></a>00540 <span class="comment">    /** Destructor */</span>
<a name="l00541"></a><a class="code" href="class_sparse_matrix.html#a3a8d70e32b168144bc86a61c448ef755">00541</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix.html#a3a8d70e32b168144bc86a61c448ef755" title="Destructor.">~SparseMatrix</a>()
<a name="l00542"></a>00542     {
<a name="l00543"></a>00543       <span class="keyword">delete</span>[] <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>;
<a name="l00544"></a>00544     }
<a name="l00545"></a>00545 <span class="comment"></span>
<a name="l00546"></a>00546 <span class="comment">    /** Overloaded for performance */</span>
<a name="l00547"></a>00547     <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a> <a class="code" href="class_sparse_matrix.html#a5e99837b11ef375b465502c2da1ac402" title="Overloaded for performance.">sum</a>() <span class="keyword">const</span>;
<a name="l00548"></a>00548 
<a name="l00549"></a>00549   <span class="keyword">public</span>:
<a name="l00550"></a>00550 <span class="comment"></span>
<a name="l00551"></a>00551 <span class="comment">    /** \deprecated use setZero() and reserve()</span>
<a name="l00552"></a>00552 <span class="comment">      * Initializes the filling process of \c *this.</span>
<a name="l00553"></a>00553 <span class="comment">      * \param reserveSize approximate number of nonzeros</span>
<a name="l00554"></a>00554 <span class="comment">      * Note that the matrix \c *this is zero-ed.</span>
<a name="l00555"></a>00555 <span class="comment">      */</span>
<a name="l00556"></a><a class="code" href="class_sparse_matrix.html#a57dc3cdd5879cc036c1575252812257b">00556</a>     <a class="code" href="_macros_8h.html#a215b4c2831ed3631e9149b53a8ecb878">EIGEN_DEPRECATED</a> <span class="keywordtype">void</span> <a class="code" href="class_sparse_matrix.html#a57dc3cdd5879cc036c1575252812257b">startFill</a>(<a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> reserveSize = 1000)
<a name="l00557"></a>00557     {
<a name="l00558"></a>00558       <a class="code" href="class_sparse_matrix.html#a6bef67522cafc4ed9f2e3e13d9cb44b4" title="Removes all non zeros.">setZero</a>();
<a name="l00559"></a>00559       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a9a2e7bb3746af16a7ab5b923f61d24f6">reserve</a>(reserveSize);
<a name="l00560"></a>00560     }
<a name="l00561"></a>00561 <span class="comment"></span>
<a name="l00562"></a>00562 <span class="comment">    /** \deprecated use insert()</span>
<a name="l00563"></a>00563 <span class="comment">      * Like fill() but with random inner coordinates.</span>
<a name="l00564"></a>00564 <span class="comment">      */</span>
<a name="l00565"></a><a class="code" href="class_sparse_matrix.html#a5836891e4a9719fdd8227bdb5b634207">00565</a>     <a class="code" href="_macros_8h.html#a215b4c2831ed3631e9149b53a8ecb878">EIGEN_DEPRECATED</a> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&amp; <a class="code" href="class_sparse_matrix.html#a5836891e4a9719fdd8227bdb5b634207">fillrand</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="l00566"></a>00566     {
<a name="l00567"></a>00567       <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#ad8b095f6726570d7372929c60b554d07">insert</a>(row,col);
<a name="l00568"></a>00568     }
<a name="l00569"></a>00569 <span class="comment"></span>
<a name="l00570"></a>00570 <span class="comment">    /** \deprecated use insert()</span>
<a name="l00571"></a>00571 <span class="comment">      */</span>
<a name="l00572"></a><a class="code" href="class_sparse_matrix.html#a38a814c0590199f56add134545e4eeb4">00572</a>     <a class="code" href="_macros_8h.html#a215b4c2831ed3631e9149b53a8ecb878">EIGEN_DEPRECATED</a> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&amp; <a class="code" href="class_sparse_matrix.html#a38a814c0590199f56add134545e4eeb4">fill</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="l00573"></a>00573     {
<a name="l00574"></a>00574       <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> outer = <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? row : <a class="code" href="class_sparse_matrix_base.html#a8afce4f24094824bd538a3bc1b83b84f">col</a>;
<a name="l00575"></a>00575       <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> inner = <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? col : <a class="code" href="class_sparse_matrix_base.html#a69b30d59e93b1dffa5234bdfbc98d286">row</a>;
<a name="l00576"></a>00576 
<a name="l00577"></a>00577       <span class="keywordflow">if</span> (<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1]==0)
<a name="l00578"></a>00578       {
<a name="l00579"></a>00579         <span class="comment">// we start a new inner vector</span>
<a name="l00580"></a>00580         <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> i = outer;
<a name="l00581"></a>00581         <span class="keywordflow">while</span> (i&gt;=0 &amp;&amp; <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[i]==0)
<a name="l00582"></a>00582         {
<a name="l00583"></a>00583           <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[i] = <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>();
<a name="l00584"></a>00584           --i;
<a name="l00585"></a>00585         }
<a name="l00586"></a>00586         <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1] = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer];
<a name="l00587"></a>00587       }
<a name="l00588"></a>00588       <span class="keywordflow">else</span>
<a name="l00589"></a>00589       {
<a name="l00590"></a>00590         <a class="code" href="_macros_8h.html#acaa7ba89800cfe18d5fd6eed620aea9c">eigen_assert</a>(<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#af2d4ccb3624505ffbd7efcd34605d478">index</a>(<a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>()-1)&lt;inner &amp;&amp; <span class="stringliteral">&quot;wrong sorted insertion&quot;</span>);
<a name="l00591"></a>00591       }
<a name="l00592"></a>00592 <span class="comment">//       std::cerr &lt;&lt; size_t(m_outerIndex[outer+1]) &lt;&lt; &quot; == &quot; &lt;&lt; m_data.size() &lt;&lt; &quot;\n&quot;;</span>
<a name="l00593"></a>00593       assert(<span class="keywordtype">size_t</span>(<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1]) == <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a329259914e3ab20f9303401ab06bdae8">size</a>());
<a name="l00594"></a>00594       <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> p = <a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1];
<a name="l00595"></a>00595       ++<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1];
<a name="l00596"></a>00596 
<a name="l00597"></a>00597       <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a0fadaaf875137eeeb2d24c91c05bd0fd">append</a>(0, inner);
<a name="l00598"></a>00598       <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix.html#a3eceb10d19db02ee3c9c5dfdf7390ec6">m_data</a>.<a class="code" href="class_compressed_storage.html#a5969d6b59a14821d2a5bf07b60a3fd5a">value</a>(p);
<a name="l00599"></a>00599     }
<a name="l00600"></a>00600 <span class="comment"></span>
<a name="l00601"></a>00601 <span class="comment">    /** \deprecated use finalize */</span>
<a name="l00602"></a><a class="code" href="class_sparse_matrix.html#a38647c3a2fab149264fa696aa208b198">00602</a>     <a class="code" href="_macros_8h.html#a215b4c2831ed3631e9149b53a8ecb878">EIGEN_DEPRECATED</a> <span class="keywordtype">void</span> <a class="code" href="class_sparse_matrix.html#a38647c3a2fab149264fa696aa208b198">endFill</a>() { <a class="code" href="class_sparse_matrix.html#a083a756f5485e97716e292b83a88f2dd" title="Must be called after inserting a set of non zero entries.">finalize</a>(); }
<a name="l00603"></a>00603 
<a name="l00604"></a>00604 <span class="keyword">private</span>:
<a name="l00605"></a><a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html">00605</a>   <span class="keyword">struct </span><a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html">default_prunning_func</a> {
<a name="l00606"></a><a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html#ac3bb17ca511a9a655ecf8e1e823d3cb5">00606</a>     <a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html#ac3bb17ca511a9a655ecf8e1e823d3cb5">default_prunning_func</a>(<a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a> ref, RealScalar eps) : reference(ref), <a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html#a6969682fb57e4ebb62c8b0572136e22d">epsilon</a>(eps) {}
<a name="l00607"></a><a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html#a5115b6dde7d1b86914da8a64180d6081">00607</a>     <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html#a5115b6dde7d1b86914da8a64180d6081">operator() </a>(<span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>&amp;, <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>&amp;, <span class="keyword">const</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&amp; value)<span class="keyword"> const</span>
<a name="l00608"></a>00608 <span class="keyword">    </span>{
<a name="l00609"></a>00609       <span class="keywordflow">return</span> !<a class="code" href="namespaceinternal.html#a734df4b9b4cc7c4e7aa66738d113b36e">internal::isMuchSmallerThan</a>(value, reference, <a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html#a6969682fb57e4ebb62c8b0572136e22d">epsilon</a>);
<a name="l00610"></a>00610     }
<a name="l00611"></a><a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html#a7c4e8ce4c38ba120ea569e0896c2ea35">00611</a>     <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a> <a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html#a7c4e8ce4c38ba120ea569e0896c2ea35">reference</a>;
<a name="l00612"></a><a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html#a6969682fb57e4ebb62c8b0572136e22d">00612</a>     RealScalar <a class="code" href="struct_sparse_matrix_1_1default__prunning__func.html#a6969682fb57e4ebb62c8b0572136e22d">epsilon</a>;
<a name="l00613"></a>00613   };
<a name="l00614"></a>00614 };
<a name="l00615"></a>00615 
<a name="l00616"></a>00616 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> _Options, <span class="keyword">typename</span> _Index&gt;
<a name="l00617"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html">00617</a> <span class="keyword">class </span><a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>&lt;<a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>,_Options,_Index&gt;::<a class="code" href="class_sparse_matrix_1_1_inner_iterator.html">InnerIterator</a>
<a name="l00618"></a>00618 {
<a name="l00619"></a>00619   <span class="keyword">public</span>:
<a name="l00620"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a4eed41c1452d6ebedda139c2d43f4796">00620</a>     <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html">InnerIterator</a>(<span class="keyword">const</span> <a class="code" href="class_sparse_matrix.html" title="The main sparse matrix class.">SparseMatrix</a>&amp; mat, <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> outer)
<a name="l00621"></a>00621       : m_values(mat.<a class="code" href="class_sparse_matrix.html#a91cdd6245a07406d15a34b56b7bf95d2">_valuePtr</a>()), m_indices(mat.<a class="code" href="class_sparse_matrix.html#af1b1f6920f2002ea76ec7bb0ce662f74">_innerIndexPtr</a>()), m_outer(outer), m_id(mat.<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer]), m_end(mat.<a class="code" href="class_sparse_matrix.html#a4a38ff7a9ad9750d51d2903437972633">m_outerIndex</a>[outer+1])
<a name="l00622"></a>00622     {}
<a name="l00623"></a>00623 
<a name="l00624"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#aa328e42fb7809885f76e30e1eca39010">00624</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html">InnerIterator</a>&amp; <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#aa328e42fb7809885f76e30e1eca39010">operator++</a>() { m_id++; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
<a name="l00625"></a>00625 
<a name="l00626"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#ad5de3b975efca7c1c76c9cd63b0baa15">00626</a>     <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&amp; <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#ad5de3b975efca7c1c76c9cd63b0baa15">value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_values[m_id]; }
<a name="l00627"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#aeeb0fc2d3192ce1ebf56724b240886bf">00627</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>&amp; <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#aeeb0fc2d3192ce1ebf56724b240886bf">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_values[m_id]); }
<a name="l00628"></a>00628 
<a name="l00629"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a7521082d5eae04fa09ec04bb48c9e863">00629</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a7521082d5eae04fa09ec04bb48c9e863">index</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_indices[m_id]; }
<a name="l00630"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a2eca42558c20aaf89816af058ce71729">00630</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a2eca42558c20aaf89816af058ce71729">outer</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_outer; }
<a name="l00631"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a20bf9c134b50c3258b8e27fd5c38ce88">00631</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a20bf9c134b50c3258b8e27fd5c38ce88">row</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? m_outer : index(); }
<a name="l00632"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#af96493495d0fd1bc2eb3736c4d3e1a2e">00632</a>     <span class="keyword">inline</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#af96493495d0fd1bc2eb3736c4d3e1a2e">col</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_sparse_matrix_base.html#adbd0d75b607fc0e6e8324f141a1f2701ab1c0e4cad7f5e1ae0211abbed1591a9c">IsRowMajor</a> ? index() : m_outer; }
<a name="l00633"></a>00633 
<a name="l00634"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#aa93f19b43737125544e5c6fca3b9d21a">00634</a>     <span class="keyword">inline</span> <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#aa93f19b43737125544e5c6fca3b9d21a">operator bool</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (m_id &lt; m_end); }
<a name="l00635"></a>00635 
<a name="l00636"></a>00636   <span class="keyword">protected</span>:
<a name="l00637"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a8b7747c1ef4133a6dc34eee3f342cc24">00637</a>     <span class="keyword">const</span> <a class="code" href="class_sparse_matrix_base.html#a5e58e9b0abaf0f6f5d018d32926b6a17">Scalar</a>* <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a8b7747c1ef4133a6dc34eee3f342cc24">m_values</a>;
<a name="l00638"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#af24cc48f0310d9a3bea9f41e53dd3515">00638</a>     <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a>* <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#af24cc48f0310d9a3bea9f41e53dd3515">m_indices</a>;
<a name="l00639"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a63b3948309fd81ff6c7dc461b228c58f">00639</a>     <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a63b3948309fd81ff6c7dc461b228c58f">m_outer</a>;
<a name="l00640"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a2a74aa6eacf73b545959a1adb9243558">00640</a>     <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a2a74aa6eacf73b545959a1adb9243558">m_id</a>;
<a name="l00641"></a><a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a83306d85a7d59b5e6367b374aaa04f24">00641</a>     <span class="keyword">const</span> <a class="code" href="struct_eigen_base.html#ae16d01a6ef4203489bca06ca933fe410">Index</a> <a class="code" href="class_sparse_matrix_1_1_inner_iterator.html#a83306d85a7d59b5e6367b374aaa04f24">m_end</a>;
<a name="l00642"></a>00642 };
<a name="l00643"></a>00643 
<a name="l00644"></a>00644 <span class="preprocessor">#endif // EIGEN_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>