Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 925d05e241dbe3b9ea38e50d2b88728b > files > 80

m4ri-devel-20100817-1.fc15.i686.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>M4RI: packedmatrix.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.4 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">M4RI&#160;<span id="projectnumber">1.0.1</span></div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" 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="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Defines</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">packedmatrix.h File Reference</div>  </div>
</div>
<div class="contents">

<p>Dense matrices over GF(2) represented as a bit field.  
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;math.h&gt;</code><br/>
<code>#include &lt;assert.h&gt;</code><br/>
<code>#include &lt;stdio.h&gt;</code><br/>
</div>
<p><a href="packedmatrix_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmzd__t.html">mzd_t</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Dense matrices over GF(2).  <a href="structmzd__t.html#details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#ac16bd56bca01886245a5f82f4b39f1ef">MZD_MUL_BLOCKSIZE</a>&#160;&#160;&#160;MIN(((int)sqrt((double)(4*CPU_L2_CACHE)))/2,2048)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Matrix multiplication block-ing dimension.  <a href="#ac16bd56bca01886245a5f82f4b39f1ef"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#adc489a58a3989dad9aecdef73ff12544">mzd_free_window</a>&#160;&#160;&#160;mzd_free</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Free a matrix window created with mzd_init_window.  <a href="#adc489a58a3989dad9aecdef73ff12544"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a8ef10f72725525b63bdc96f7c0bf9934">mzd_sub</a>&#160;&#160;&#160;mzd_add</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Same as mzd_add.  <a href="#a8ef10f72725525b63bdc96f7c0bf9934"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a4855f23f629469e453e97cbce794b55d">_mzd_sub</a>&#160;&#160;&#160;_mzd_add</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Same as mzd_sub but without any checks on the input.  <a href="#a4855f23f629469e453e97cbce794b55d"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a978b50371674a83612d2ffc6de6932f6">mzd_init</a> (const size_t r, const size_t c)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a new matrix of dimension r x c.  <a href="#a978b50371674a83612d2ffc6de6932f6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a3ecd0af20cd69fbb29ac3be15cf3b677">mzd_free</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *A)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Free a matrix created with mzd_init.  <a href="#a3ecd0af20cd69fbb29ac3be15cf3b677"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a70a938dc4e1ef97f8dec2ae489b9be44">mzd_init_window</a> (const <a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t lowr, const size_t lowc, const size_t highr, const size_t highc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a window/view into the matrix M.  <a href="#a70a938dc4e1ef97f8dec2ae489b9be44"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#af890631f07570822c0dab42eeb7fe2cf">mzd_row_swap</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t rowa, const size_t rowb)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap the two rows rowa and rowb.  <a href="#af890631f07570822c0dab42eeb7fe2cf"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a52b47202cc94e49e78db0cdd0baa9e2f">mzd_copy_row</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *B, size_t i, const <a class="el" href="structmzd__t.html">mzd_t</a> *A, size_t j)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">copy row j from A to row i from B.  <a href="#a52b47202cc94e49e78db0cdd0baa9e2f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a0e6c33eb7bf2e9262bee8bb89a32eb9f">mzd_col_swap</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t cola, const size_t colb)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap the two columns cola and colb.  <a href="#a0e6c33eb7bf2e9262bee8bb89a32eb9f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a72fb0336dbbc9b817f4a274c38f35e28">mzd_col_swap_in_rows</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t cola, const size_t colb, const size_t start_row, const size_t stop_row)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap the two columns cola and colb but only between start_row and stop_row.  <a href="#a72fb0336dbbc9b817f4a274c38f35e28"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="misc_8h.html#a0fd3ebb26b5e387df9c3677528d9e39c">BIT</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a8b092ba6fad1336b5baa5c018fd35d62">mzd_read_bit</a> (const <a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t row, const size_t col)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Read the bit at position M[row,col].  <a href="#a8b092ba6fad1336b5baa5c018fd35d62"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a279d49adacd0f08fbcf9d3936c1774a4">mzd_write_bit</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t row, const size_t col, const <a class="el" href="misc_8h.html#a0fd3ebb26b5e387df9c3677528d9e39c">BIT</a> value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Write the bit value to position M[row,col].  <a href="#a279d49adacd0f08fbcf9d3936c1774a4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#ae1f0ad126818472f09de2c51e2589953">mzd_print</a> (const <a class="el" href="structmzd__t.html">mzd_t</a> *M)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Print a matrix to stdout.  <a href="#ae1f0ad126818472f09de2c51e2589953"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a3dd3b5776c6fb2560854c0f971fa4086">mzd_print_tight</a> (const <a class="el" href="structmzd__t.html">mzd_t</a> *M)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Print the matrix to stdout.  <a href="#a3dd3b5776c6fb2560854c0f971fa4086"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a920cc86cc3795ee1dff8c56e5cc113dc">mzd_row_add_offset</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M, size_t dstrow, size_t srcrow, size_t coloffset)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add the rows sourcerow and destrow and stores the total in the row destrow, but only begins at the column coloffset.  <a href="#a920cc86cc3795ee1dff8c56e5cc113dc"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a1d2915c15bd8cb9cb2b000d5e05c10fa">mzd_row_add</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t sourcerow, const size_t destrow)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Add the rows sourcerow and destrow and stores the total in the row destrow.  <a href="#a1d2915c15bd8cb9cb2b000d5e05c10fa"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#ac56af8c1776e0c7727bc398ff00fdeff">mzd_transpose</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *DST, const <a class="el" href="structmzd__t.html">mzd_t</a> *A)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Transpose a matrix.  <a href="#ac56af8c1776e0c7727bc398ff00fdeff"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#afc3227eec304075acce35712f930c941">mzd_mul_naive</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *C, const <a class="el" href="structmzd__t.html">mzd_t</a> *A, const <a class="el" href="structmzd__t.html">mzd_t</a> *B)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Naive cubic matrix multiplication.  <a href="#afc3227eec304075acce35712f930c941"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a22e4ff0efce5742b8d07b2340abf27d6">mzd_addmul_naive</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *C, const <a class="el" href="structmzd__t.html">mzd_t</a> *A, const <a class="el" href="structmzd__t.html">mzd_t</a> *B)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Naive cubic matrix multiplication and addition.  <a href="#a22e4ff0efce5742b8d07b2340abf27d6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a24f259c30c76ff5719e1b03c0d9347ce">_mzd_mul_naive</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *C, const <a class="el" href="structmzd__t.html">mzd_t</a> *A, const <a class="el" href="structmzd__t.html">mzd_t</a> *B, const int clear)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Naive cubic matrix multiplication with the pre-transposed B.  <a href="#a24f259c30c76ff5719e1b03c0d9347ce"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a203267684a9adef1a3fac4ad2ba8211a">_mzd_mul_va</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *C, const <a class="el" href="structmzd__t.html">mzd_t</a> *v, const <a class="el" href="structmzd__t.html">mzd_t</a> *A, const int clear)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Matrix multiplication optimized for v*A where v is a vector.  <a href="#a203267684a9adef1a3fac4ad2ba8211a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a3167fa0d3b20f8a707e1aa98562be7fa">mzd_randomize</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Fill matrix M with uniformly distributed bits.  <a href="#a3167fa0d3b20f8a707e1aa98562be7fa"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#aaf5ab2357cc0df3fac6bb7ba10f734e9">mzd_set_ui</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M, const unsigned value)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the matrix M to the value equivalent to the integer value provided.  <a href="#aaf5ab2357cc0df3fac6bb7ba10f734e9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a2de33374559f45fee7aeac902223675b">mzd_gauss_delayed</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t startcol, const int full)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Gaussian elimination.  <a href="#a2de33374559f45fee7aeac902223675b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a357c32c0a6497205708708fc30e2fcc0">mzd_echelonize_naive</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M, const int full)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Gaussian elimination.  <a href="#a357c32c0a6497205708708fc30e2fcc0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="misc_8h.html#a0fd3ebb26b5e387df9c3677528d9e39c">BIT</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a6245099e5ad5e22682e4d524f48870c2">mzd_equal</a> (const <a class="el" href="structmzd__t.html">mzd_t</a> *A, const <a class="el" href="structmzd__t.html">mzd_t</a> *B)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return TRUE if A == B.  <a href="#a6245099e5ad5e22682e4d524f48870c2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a24e1413764d44b3afe205533011183ce">mzd_cmp</a> (const <a class="el" href="structmzd__t.html">mzd_t</a> *A, const <a class="el" href="structmzd__t.html">mzd_t</a> *B)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return -1,0,1 if if A &lt; B, A == B or A &gt; B respectively.  <a href="#a24e1413764d44b3afe205533011183ce"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#aa3136c016ab998251f3df3d540135fd2">mzd_copy</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *DST, const <a class="el" href="structmzd__t.html">mzd_t</a> *A)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy matrix A to DST.  <a href="#aa3136c016ab998251f3df3d540135fd2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a2e153934ff6e7a816316848fb83c563f">mzd_concat</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *C, const <a class="el" href="structmzd__t.html">mzd_t</a> *A, const <a class="el" href="structmzd__t.html">mzd_t</a> *B)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Concatenate B to A and write the result to C.  <a href="#a2e153934ff6e7a816316848fb83c563f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a90d0fce4aac548d07c0f16a1ea8ae855">mzd_stack</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *C, const <a class="el" href="structmzd__t.html">mzd_t</a> *A, const <a class="el" href="structmzd__t.html">mzd_t</a> *B)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Stack A on top of B and write the result to C.  <a href="#a90d0fce4aac548d07c0f16a1ea8ae855"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a686f3e2d1733b122e4ccd2e02f719106">mzd_submatrix</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *S, const <a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t lowr, const size_t lowc, const size_t highr, const size_t highc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy a submatrix.  <a href="#a686f3e2d1733b122e4ccd2e02f719106"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#aeef87def53752950ce9c11cfc07b2e72">mzd_invert_naive</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *INV, <a class="el" href="structmzd__t.html">mzd_t</a> *A, const <a class="el" href="structmzd__t.html">mzd_t</a> *I)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Invert the matrix target using Gaussian elimination.  <a href="#aeef87def53752950ce9c11cfc07b2e72"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#ad0dc0b472399f0de02ef86fd2f20065a">mzd_add</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *C, const <a class="el" href="structmzd__t.html">mzd_t</a> *A, const <a class="el" href="structmzd__t.html">mzd_t</a> *B)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Set C = A+B.  <a href="#ad0dc0b472399f0de02ef86fd2f20065a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#afd8fc3843fa8f94a6df42ea98350afdc">_mzd_add</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *C, const <a class="el" href="structmzd__t.html">mzd_t</a> *A, const <a class="el" href="structmzd__t.html">mzd_t</a> *B)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Same as mzd_add but without any checks on the input.  <a href="#afd8fc3843fa8f94a6df42ea98350afdc"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a0f62517e7f25a474432334f9f759ee21">mzd_combine</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *DST, const size_t row3, const size_t startblock3, const <a class="el" href="structmzd__t.html">mzd_t</a> *SC1, const size_t row1, const size_t startblock1, const <a class="el" href="structmzd__t.html">mzd_t</a> *SC2, const size_t row2, const size_t startblock2)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">row3[col3:] = row1[col1:] + row2[col2:]  <a href="#a0f62517e7f25a474432334f9f759ee21"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="misc_8h.html#aa975e5cf9a68e2ddca2085ee1fb57edb">word</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#ac5d7f3b1224bf1b336f85dc39ac88106">mzd_read_bits</a> (const <a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t x, const size_t y, const int n)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a07a4f4b11033e8343190c03b54e0269f">mzd_xor_bits</a> (const <a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t x, const size_t y, const int n, <a class="el" href="misc_8h.html#aa975e5cf9a68e2ddca2085ee1fb57edb">word</a> values)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">XOR n bits from values to M starting a position (x,y).  <a href="#a07a4f4b11033e8343190c03b54e0269f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#aacb4812eace6f0db3d1c6984020b7e8c">mzd_and_bits</a> (const <a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t x, const size_t y, const int n, <a class="el" href="misc_8h.html#aa975e5cf9a68e2ddca2085ee1fb57edb">word</a> values)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">AND n bits from values to M starting a position (x,y).  <a href="#aacb4812eace6f0db3d1c6984020b7e8c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a3c42404eadf254e714cd9af7f3dd25e9">mzd_clear_bits</a> (const <a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t x, const size_t y, const int n)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear n bits in M starting a position (x,y).  <a href="#a3c42404eadf254e714cd9af7f3dd25e9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a4bae380314f2c7db17b8cdb284c46981">mzd_is_zero</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *A)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Zero test for matrix.  <a href="#a4bae380314f2c7db17b8cdb284c46981"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a0403084836bf2fdc653b9ed196ffdbaf">mzd_row_clear_offset</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M, const size_t row, const size_t coloffset)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear the given row, but only begins at the column coloffset.  <a href="#a0403084836bf2fdc653b9ed196ffdbaf"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a60088b4ee545526b683c2fefd4a53dda">mzd_find_pivot</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *M, size_t start_row, size_t start_col, size_t *r, size_t *c)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Find the next nonzero entry in M starting at start_row and start_col.  <a href="#a60088b4ee545526b683c2fefd4a53dda"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a2a25b358645ff2948f79f4bf57820e27">mzd_density</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *A, int res)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the number of nonzero entries divided by nrows * ncols.  <a href="#a2a25b358645ff2948f79f4bf57820e27"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#a2e2d4fb9494d5ea51fabd8238bf393ec">_mzd_density</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *A, int res, size_t r, size_t c)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the number of nonzero entries divided by nrows * ncols considering only the submatrix starting at (r,c).  <a href="#a2e2d4fb9494d5ea51fabd8238bf393ec"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="packedmatrix_8h.html#ad10b46342ccdb3890c5b7c76688ec943">mzd_first_zero_row</a> (<a class="el" href="structmzd__t.html">mzd_t</a> *A)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the first row with all zero entries.  <a href="#ad10b46342ccdb3890c5b7c76688ec943"></a><br/></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>Dense matrices over GF(2) represented as a bit field. </p>
<dl class="author"><dt><b>Author:</b></dt><dd>Gregory Bard &lt;<a href="mailto:bard@fordham.edu">bard@fordham.edu</a>&gt; </dd>
<dd>
Martin Albrecht &lt;<a href="mailto:M.R.Albrecht@rhul.ac.uk">M.R.Albrecht@rhul.ac.uk</a>&gt; </dd></dl>
</div><hr/><h2>Define Documentation</h2>
<a class="anchor" id="a4855f23f629469e453e97cbce794b55d"></a><!-- doxytag: member="packedmatrix.h::_mzd_sub" ref="a4855f23f629469e453e97cbce794b55d" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define _mzd_sub&#160;&#160;&#160;_mzd_add</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Same as mzd_sub but without any checks on the input. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">C</td><td>Preallocated difference matrix, may be NULL for automatic creation. </td></tr>
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
    <tr><td class="paramname">B</td><td>Matrix</td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>

</div>
</div>
<a class="anchor" id="adc489a58a3989dad9aecdef73ff12544"></a><!-- doxytag: member="packedmatrix.h::mzd_free_window" ref="adc489a58a3989dad9aecdef73ff12544" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define mzd_free_window&#160;&#160;&#160;mzd_free</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Free a matrix window created with mzd_init_window. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ac16bd56bca01886245a5f82f4b39f1ef"></a><!-- doxytag: member="packedmatrix.h::MZD_MUL_BLOCKSIZE" ref="ac16bd56bca01886245a5f82f4b39f1ef" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define MZD_MUL_BLOCKSIZE&#160;&#160;&#160;MIN(((int)sqrt((double)(4*CPU_L2_CACHE)))/2,2048)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Matrix multiplication block-ing dimension. </p>
<p>Defines the number of rows of the matrix A that are processed as one block during the execution of a multiplication algorithm. </p>

</div>
</div>
<a class="anchor" id="a8ef10f72725525b63bdc96f7c0bf9934"></a><!-- doxytag: member="packedmatrix.h::mzd_sub" ref="a8ef10f72725525b63bdc96f7c0bf9934" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define mzd_sub&#160;&#160;&#160;mzd_add</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Same as mzd_add. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">C</td><td>Preallocated difference matrix, may be NULL for automatic creation. </td></tr>
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
    <tr><td class="paramname">B</td><td>Matrix</td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="afd8fc3843fa8f94a6df42ea98350afdc"></a><!-- doxytag: member="packedmatrix.h::_mzd_add" ref="afd8fc3843fa8f94a6df42ea98350afdc" args="(mzd_t *C, const mzd_t *A, const mzd_t *B)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* _mzd_add </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>C</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Same as mzd_add but without any checks on the input. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">C</td><td>Preallocated sum matrix, may be NULL for automatic creation. </td></tr>
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
    <tr><td class="paramname">B</td><td>Matrix</td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>

</div>
</div>
<a class="anchor" id="a2e2d4fb9494d5ea51fabd8238bf393ec"></a><!-- doxytag: member="packedmatrix.h::_mzd_density" ref="a2e2d4fb9494d5ea51fabd8238bf393ec" args="(mzd_t *A, int res, size_t r, size_t c)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double _mzd_density </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>res</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>c</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Return the number of nonzero entries divided by nrows * ncols considering only the submatrix starting at (r,c). </p>
<p>If res = 0 then 100 samples per row are made, if res &gt; 0 the function takes res sized steps within each row (res = 1 uses every word).</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
    <tr><td class="paramname">res</td><td>Resolution of sampling </td></tr>
    <tr><td class="paramname">r</td><td>Row to start counting </td></tr>
    <tr><td class="paramname">c</td><td>Column to start counting </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a24f259c30c76ff5719e1b03c0d9347ce"></a><!-- doxytag: member="packedmatrix.h::_mzd_mul_naive" ref="a24f259c30c76ff5719e1b03c0d9347ce" args="(mzd_t *C, const mzd_t *A, const mzd_t *B, const int clear)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* _mzd_mul_naive </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>C</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>clear</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Naive cubic matrix multiplication with the pre-transposed B. </p>
<p>That is, compute C such that C == AB^t.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">C</td><td>Preallocated product matrix. </td></tr>
    <tr><td class="paramname">A</td><td>Input matrix A. </td></tr>
    <tr><td class="paramname">B</td><td>Pre-transposed input matrix B. </td></tr>
    <tr><td class="paramname">clear</td><td>Whether to clear C before accumulating AB </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a203267684a9adef1a3fac4ad2ba8211a"></a><!-- doxytag: member="packedmatrix.h::_mzd_mul_va" ref="a203267684a9adef1a3fac4ad2ba8211a" args="(mzd_t *C, const mzd_t *v, const mzd_t *A, const int clear)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* _mzd_mul_va </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>C</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>v</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>clear</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Matrix multiplication optimized for v*A where v is a vector. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">C</td><td>Preallocated product matrix. </td></tr>
    <tr><td class="paramname">v</td><td>Input matrix v. </td></tr>
    <tr><td class="paramname">A</td><td>Input matrix A. </td></tr>
    <tr><td class="paramname">clear</td><td>If set clear C first, otherwise add result to C. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ad0dc0b472399f0de02ef86fd2f20065a"></a><!-- doxytag: member="packedmatrix.h::mzd_add" ref="ad0dc0b472399f0de02ef86fd2f20065a" args="(mzd_t *C, const mzd_t *A, const mzd_t *B)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* mzd_add </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>C</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Set C = A+B. </p>
<p>C is also returned. If C is NULL then a new matrix is created which must be freed by mzd_free.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">C</td><td>Preallocated sum matrix, may be NULL for automatic creation. </td></tr>
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
    <tr><td class="paramname">B</td><td>Matrix </td></tr>
  </table>
  </dd>
</dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="testsuite_2test_multiplication_8c-example.html#a11">testsuite/test_multiplication.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="a22e4ff0efce5742b8d07b2340abf27d6"></a><!-- doxytag: member="packedmatrix.h::mzd_addmul_naive" ref="a22e4ff0efce5742b8d07b2340abf27d6" args="(mzd_t *C, const mzd_t *A, const mzd_t *B)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* mzd_addmul_naive </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>C</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Naive cubic matrix multiplication and addition. </p>
<p>That is, compute C such that C == C + AB.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">C</td><td>Preallocated product matrix. </td></tr>
    <tr><td class="paramname">A</td><td>Input matrix A. </td></tr>
    <tr><td class="paramname">B</td><td>Input matrix B.</td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>Normally, if you will multiply several times by b, it is smarter to calculate bT yourself, and keep it, and then use the function called _mzd_mul_naive </dd></dl>

</div>
</div>
<a class="anchor" id="aacb4812eace6f0db3d1c6984020b7e8c"></a><!-- doxytag: member="packedmatrix.h::mzd_and_bits" ref="aacb4812eace6f0db3d1c6984020b7e8c" args="(const mzd_t *M, const size_t x, const size_t y, const int n, word values)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void mzd_and_bits </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="misc_8h.html#aa975e5cf9a68e2ddca2085ee1fb57edb">word</a>&#160;</td>
          <td class="paramname"><em>values</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>AND n bits from values to M starting a position (x,y). </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Source matrix. </td></tr>
    <tr><td class="paramname">x</td><td>Starting row. </td></tr>
    <tr><td class="paramname">y</td><td>Starting column. </td></tr>
    <tr><td class="paramname">n</td><td>Number of bits (&lt;= RADIX); </td></tr>
    <tr><td class="paramname">values</td><td>Word with values; </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a3c42404eadf254e714cd9af7f3dd25e9"></a><!-- doxytag: member="packedmatrix.h::mzd_clear_bits" ref="a3c42404eadf254e714cd9af7f3dd25e9" args="(const mzd_t *M, const size_t x, const size_t y, const int n)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void mzd_clear_bits </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>n</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Clear n bits in M starting a position (x,y). </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Source matrix. </td></tr>
    <tr><td class="paramname">x</td><td>Starting row. </td></tr>
    <tr><td class="paramname">y</td><td>Starting column. </td></tr>
    <tr><td class="paramname">n</td><td>Number of bits (&lt;= RADIX); </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a24e1413764d44b3afe205533011183ce"></a><!-- doxytag: member="packedmatrix.h::mzd_cmp" ref="a24e1413764d44b3afe205533011183ce" args="(const mzd_t *A, const mzd_t *B)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mzd_cmp </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Return -1,0,1 if if A &lt; B, A == B or A &gt; B respectively. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>Matrix. </td></tr>
    <tr><td class="paramname">B</td><td>Matrix.</td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>This comparison is not well defined mathematically and relatively arbitrary since elements of GF(2) don't have an ordering.</dd></dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>

</div>
</div>
<a class="anchor" id="a0e6c33eb7bf2e9262bee8bb89a32eb9f"></a><!-- doxytag: member="packedmatrix.h::mzd_col_swap" ref="a0e6c33eb7bf2e9262bee8bb89a32eb9f" args="(mzd_t *M, const size_t cola, const size_t colb)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mzd_col_swap </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>cola</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>colb</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Swap the two columns cola and colb. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix. </td></tr>
    <tr><td class="paramname">cola</td><td>Column index. </td></tr>
    <tr><td class="paramname">colb</td><td>Column index. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a72fb0336dbbc9b817f4a274c38f35e28"></a><!-- doxytag: member="packedmatrix.h::mzd_col_swap_in_rows" ref="a72fb0336dbbc9b817f4a274c38f35e28" args="(mzd_t *M, const size_t cola, const size_t colb, const size_t start_row, const size_t stop_row)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void mzd_col_swap_in_rows </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>cola</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>colb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>start_row</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>stop_row</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Swap the two columns cola and colb but only between start_row and stop_row. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix. </td></tr>
    <tr><td class="paramname">cola</td><td>Column index. </td></tr>
    <tr><td class="paramname">colb</td><td>Column index. </td></tr>
    <tr><td class="paramname">start_row</td><td>Row index. </td></tr>
    <tr><td class="paramname">stop_row</td><td>Row index (exclusive). </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a0f62517e7f25a474432334f9f759ee21"></a><!-- doxytag: member="packedmatrix.h::mzd_combine" ref="a0f62517e7f25a474432334f9f759ee21" args="(mzd_t *DST, const size_t row3, const size_t startblock3, const mzd_t *SC1, const size_t row1, const size_t startblock1, const mzd_t *SC2, const size_t row2, const size_t startblock2)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mzd_combine </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>DST</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>row3</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>startblock3</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>SC1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>row1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>startblock1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>SC2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>row2</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>startblock2</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>row3[col3:] = row1[col1:] + row2[col2:] </p>
<p>Adds row1 of SC1, starting with startblock1 to the end, to row2 of SC2, starting with startblock2 to the end. This gets stored in DST, in row3, starting with startblock3.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">DST</td><td>destination matrix </td></tr>
    <tr><td class="paramname">row3</td><td>destination row for matrix dst </td></tr>
    <tr><td class="paramname">startblock3</td><td>starting block to work on in matrix dst </td></tr>
    <tr><td class="paramname">SC1</td><td>source matrix </td></tr>
    <tr><td class="paramname">row1</td><td>source row for matrix sc1 </td></tr>
    <tr><td class="paramname">startblock1</td><td>starting block to work on in matrix sc1 </td></tr>
    <tr><td class="paramname">SC2</td><td>source matrix </td></tr>
    <tr><td class="paramname">startblock2</td><td>starting block to work on in matrix sc2 </td></tr>
    <tr><td class="paramname">row2</td><td>source row for matrix sc2</td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>

<p><dl class="todo"><dt><b><a class="el" href="todo.html#_todo000007">Todo:</a></b></dt><dd>this code is slow if offset!=0 </dd></dl>
</p>

</div>
</div>
<a class="anchor" id="a2e153934ff6e7a816316848fb83c563f"></a><!-- doxytag: member="packedmatrix.h::mzd_concat" ref="a2e153934ff6e7a816316848fb83c563f" args="(mzd_t *C, const mzd_t *A, const mzd_t *B)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* mzd_concat </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>C</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Concatenate B to A and write the result to C. </p>
<p>That is,</p>
<div class="fragment"><pre class="fragment">
 [ A ], [ B ] -&gt; [ A  B ] = C
 </pre></div><p>The inputs are not modified but a new matrix is created.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">C</td><td>Matrix, may be NULL for automatic creation </td></tr>
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
    <tr><td class="paramname">B</td><td>Matrix</td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>This is sometimes called augment.</dd></dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>

</div>
</div>
<a class="anchor" id="aa3136c016ab998251f3df3d540135fd2"></a><!-- doxytag: member="packedmatrix.h::mzd_copy" ref="aa3136c016ab998251f3df3d540135fd2" args="(mzd_t *DST, const mzd_t *A)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* mzd_copy </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>DST</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Copy matrix A to DST. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">DST</td><td>May be NULL for automatic creation. </td></tr>
    <tr><td class="paramname">A</td><td>Source matrix.</td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="testsuite_2test_elimination_8c-example.html#a3">testsuite/test_elimination.c</a>, <a class="el" href="testsuite_2test_multiplication_8c-example.html#a9">testsuite/test_multiplication.c</a>, and <a class="el" href="testsuite_2test_pluq_8c-example.html#a5">testsuite/test_pluq.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="a52b47202cc94e49e78db0cdd0baa9e2f"></a><!-- doxytag: member="packedmatrix.h::mzd_copy_row" ref="a52b47202cc94e49e78db0cdd0baa9e2f" args="(mzd_t *B, size_t i, const mzd_t *A, size_t j)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mzd_copy_row </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>B</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>i</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>j</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>copy row j from A to row i from B. </p>
<p>The offsets of A and B must match and the number of columns of A must be less than or equal to the number of columns of B.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">B</td><td>Target matrix. </td></tr>
    <tr><td class="paramname">i</td><td>Target row index. </td></tr>
    <tr><td class="paramname">A</td><td>Source matrix. </td></tr>
    <tr><td class="paramname">j</td><td>Source row index. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a2a25b358645ff2948f79f4bf57820e27"></a><!-- doxytag: member="packedmatrix.h::mzd_density" ref="a2a25b358645ff2948f79f4bf57820e27" args="(mzd_t *A, int res)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double mzd_density </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>res</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Return the number of nonzero entries divided by nrows * ncols. </p>
<p>If res = 0 then 100 samples per row are made, if res &gt; 0 the function takes res sized steps within each row (res = 1 uses every word).</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
    <tr><td class="paramname">res</td><td>Resolution of sampling </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a357c32c0a6497205708708fc30e2fcc0"></a><!-- doxytag: member="packedmatrix.h::mzd_echelonize_naive" ref="a357c32c0a6497205708708fc30e2fcc0" args="(mzd_t *M, const int full)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mzd_echelonize_naive </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>full</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Gaussian elimination. </p>
<p>This will do Gaussian elimination on the matrix m. If full=FALSE, then it will do triangular style elimination, and if full=TRUE, it will do Gauss-Jordan style, or full elimination.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">full</td><td>Gauss-Jordan style or upper triangular form only.</td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="echelonform_8h.html#a3c56c11735257a08c0de934aab7b60e6" title="Matrix elimination using the &#39;Method of the Four Russians&#39; (M4RI).">mzd_echelonize_m4ri()</a>, <a class="el" href="echelonform_8h.html#ad74a55508998928aa34782263166db19" title="(Reduced) row echelon form using PLUQ factorisation.">mzd_echelonize_pluq()</a> </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="testsuite_2bench_elimination_8c-example.html#a13">testsuite/bench_elimination.c</a>, and <a class="el" href="testsuite_2test_elimination_8c-example.html#a6">testsuite/test_elimination.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="a6245099e5ad5e22682e4d524f48870c2"></a><!-- doxytag: member="packedmatrix.h::mzd_equal" ref="a6245099e5ad5e22682e4d524f48870c2" args="(const mzd_t *A, const mzd_t *B)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="misc_8h.html#a0fd3ebb26b5e387df9c3677528d9e39c">BIT</a> mzd_equal </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Return TRUE if A == B. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
    <tr><td class="paramname">B</td><td>Matrix</td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="testsuite_2test_elimination_8c-example.html#a8">testsuite/test_elimination.c</a>, and <a class="el" href="testsuite_2test_multiplication_8c-example.html#a7">testsuite/test_multiplication.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="a60088b4ee545526b683c2fefd4a53dda"></a><!-- doxytag: member="packedmatrix.h::mzd_find_pivot" ref="a60088b4ee545526b683c2fefd4a53dda" args="(mzd_t *M, size_t start_row, size_t start_col, size_t *r, size_t *c)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mzd_find_pivot </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>start_row</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>start_col</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>c</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Find the next nonzero entry in M starting at start_row and start_col. </p>
<p>This function walks down rows in the inner loop and columns in the outer loop. If a nonzero entry is found this function returns 1 and zero otherwise.</p>
<p>If and only if a nonzero entry is found r and c are updated.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">start_row</td><td>Index of row where to start search </td></tr>
    <tr><td class="paramname">start_col</td><td>Index of column where to start search </td></tr>
    <tr><td class="paramname">r</td><td>Row index updated if pivot is found </td></tr>
    <tr><td class="paramname">c</td><td>Column index updated if pivot is found </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ad10b46342ccdb3890c5b7c76688ec943"></a><!-- doxytag: member="packedmatrix.h::mzd_first_zero_row" ref="ad10b46342ccdb3890c5b7c76688ec943" args="(mzd_t *A)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t mzd_first_zero_row </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Return the first row with all zero entries. </p>
<p>If no such row can be found returns nrows.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a3ecd0af20cd69fbb29ac3be15cf3b677"></a><!-- doxytag: member="packedmatrix.h::mzd_free" ref="a3ecd0af20cd69fbb29ac3be15cf3b677" args="(mzd_t *A)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mzd_free </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Free a matrix created with mzd_init. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
  </table>
  </dd>
</dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="testsuite_2bench_elimination_8c-example.html#a6">testsuite/bench_elimination.c</a>, <a class="el" href="testsuite_2test_elimination_8c-example.html#a10">testsuite/test_elimination.c</a>, <a class="el" href="testsuite_2test_multiplication_8c-example.html#a6">testsuite/test_multiplication.c</a>, and <a class="el" href="testsuite_2test_pluq_8c-example.html#a11">testsuite/test_pluq.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="a2de33374559f45fee7aeac902223675b"></a><!-- doxytag: member="packedmatrix.h::mzd_gauss_delayed" ref="a2de33374559f45fee7aeac902223675b" args="(mzd_t *M, const size_t startcol, const int full)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mzd_gauss_delayed </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>startcol</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>full</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Gaussian elimination. </p>
<p>This will do Gaussian elimination on the matrix m but will start not at column 0 necc but at column startcol. If full=FALSE, then it will do triangular style elimination, and if full=TRUE, it will do Gauss-Jordan style, or full elimination.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">startcol</td><td>First column to consider for reduction. </td></tr>
    <tr><td class="paramname">full</td><td>Gauss-Jordan style or upper triangular form only.</td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>

</div>
</div>
<a class="anchor" id="a978b50371674a83612d2ffc6de6932f6"></a><!-- doxytag: member="packedmatrix.h::mzd_init" ref="a978b50371674a83612d2ffc6de6932f6" args="(const size_t r, const size_t c)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* mzd_init </td>
          <td>(</td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>c</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Create a new matrix of dimension r x c. </p>
<p>Use mzd_free to kill it.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">r</td><td>Number of rows </td></tr>
    <tr><td class="paramname">c</td><td>Number of columns </td></tr>
  </table>
  </dd>
</dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="testsuite_2bench_elimination_8c-example.html#a2">testsuite/bench_elimination.c</a>, <a class="el" href="testsuite_2test_elimination_8c-example.html#a1">testsuite/test_elimination.c</a>, <a class="el" href="testsuite_2test_multiplication_8c-example.html#a1">testsuite/test_multiplication.c</a>, and <a class="el" href="testsuite_2test_pluq_8c-example.html#a1">testsuite/test_pluq.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="a70a938dc4e1ef97f8dec2ae489b9be44"></a><!-- doxytag: member="packedmatrix.h::mzd_init_window" ref="a70a938dc4e1ef97f8dec2ae489b9be44" args="(const mzd_t *M, const size_t lowr, const size_t lowc, const size_t highr, const size_t highc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* mzd_init_window </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>lowr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>lowc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>highr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>highc</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Create a window/view into the matrix M. </p>
<p>A matrix window for M is a meta structure on the matrix M. It is setup to point into the matrix so M <em>must</em> <em>not</em> be freed while the matrix window is used.</p>
<p>This function puts the restriction on the provided parameters that all parameters must be within range for M which is not enforced currently .</p>
<p>Use mzd_free_window to free the window.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">lowr</td><td>Starting row (inclusive) </td></tr>
    <tr><td class="paramname">lowc</td><td>Starting column (inclusive) </td></tr>
    <tr><td class="paramname">highr</td><td>End row (exclusive) </td></tr>
    <tr><td class="paramname">highc</td><td>End column (exclusive) </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="aeef87def53752950ce9c11cfc07b2e72"></a><!-- doxytag: member="packedmatrix.h::mzd_invert_naive" ref="aeef87def53752950ce9c11cfc07b2e72" args="(mzd_t *INV, mzd_t *A, const mzd_t *I)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* mzd_invert_naive </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>INV</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>I</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Invert the matrix target using Gaussian elimination. </p>
<p>To avoid recomputing the identity matrix over and over again, I may be passed in as identity parameter.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">INV</td><td>Preallocated space for inversion matrix, may be NULL for automatic creation. </td></tr>
    <tr><td class="paramname">A</td><td>Matrix to be reduced. </td></tr>
    <tr><td class="paramname">I</td><td>Identity matrix.</td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>

</div>
</div>
<a class="anchor" id="a4bae380314f2c7db17b8cdb284c46981"></a><!-- doxytag: member="packedmatrix.h::mzd_is_zero" ref="a4bae380314f2c7db17b8cdb284c46981" args="(mzd_t *A)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mzd_is_zero </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Zero test for matrix. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">A</td><td>Input matrix. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="afc3227eec304075acce35712f930c941"></a><!-- doxytag: member="packedmatrix.h::mzd_mul_naive" ref="afc3227eec304075acce35712f930c941" args="(mzd_t *C, const mzd_t *A, const mzd_t *B)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* mzd_mul_naive </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>C</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Naive cubic matrix multiplication. </p>
<p>That is, compute C such that C == AB.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">C</td><td>Preallocated product matrix, may be NULL for automatic creation. </td></tr>
    <tr><td class="paramname">A</td><td>Input matrix A. </td></tr>
    <tr><td class="paramname">B</td><td>Input matrix B.</td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>Normally, if you will multiply several times by b, it is smarter to calculate bT yourself, and keep it, and then use the function called _mzd_mul_naive </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="testsuite_2test_multiplication_8c-example.html#a5">testsuite/test_multiplication.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="ae1f0ad126818472f09de2c51e2589953"></a><!-- doxytag: member="packedmatrix.h::mzd_print" ref="ae1f0ad126818472f09de2c51e2589953" args="(const mzd_t *M)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mzd_print </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Print a matrix to stdout. </p>
<p>The output will contain colons between every 4-th column.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a3dd3b5776c6fb2560854c0f971fa4086"></a><!-- doxytag: member="packedmatrix.h::mzd_print_tight" ref="a3dd3b5776c6fb2560854c0f971fa4086" args="(const mzd_t *M)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mzd_print_tight </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Print the matrix to stdout. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a3167fa0d3b20f8a707e1aa98562be7fa"></a><!-- doxytag: member="packedmatrix.h::mzd_randomize" ref="a3167fa0d3b20f8a707e1aa98562be7fa" args="(mzd_t *M)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mzd_randomize </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Fill matrix M with uniformly distributed bits. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix</td></tr>
  </table>
  </dd>
</dl>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000008">Todo:</a></b></dt><dd>Allow the user to provide a RNG callback.</dd></dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="testsuite_2bench_elimination_8c-example.html#a3">testsuite/bench_elimination.c</a>, <a class="el" href="testsuite_2test_elimination_8c-example.html#a2">testsuite/test_elimination.c</a>, <a class="el" href="testsuite_2test_multiplication_8c-example.html#a2">testsuite/test_multiplication.c</a>, and <a class="el" href="testsuite_2test_pluq_8c-example.html#a2">testsuite/test_pluq.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="a8b092ba6fad1336b5baa5c018fd35d62"></a><!-- doxytag: member="packedmatrix.h::mzd_read_bit" ref="a8b092ba6fad1336b5baa5c018fd35d62" args="(const mzd_t *M, const size_t row, const size_t col)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static <a class="el" href="misc_8h.html#a0fd3ebb26b5e387df9c3677528d9e39c">BIT</a> mzd_read_bit </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>row</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>col</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read the bit at position M[row,col]. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">row</td><td>Row index </td></tr>
    <tr><td class="paramname">col</td><td>Column index</td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>No bounds checks whatsoever are performed. </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="testsuite_2test_pluq_8c-example.html#a9">testsuite/test_pluq.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="ac5d7f3b1224bf1b336f85dc39ac88106"></a><!-- doxytag: member="packedmatrix.h::mzd_read_bits" ref="ac5d7f3b1224bf1b336f85dc39ac88106" args="(const mzd_t *M, const size_t x, const size_t y, const int n)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static <a class="el" href="misc_8h.html#aa975e5cf9a68e2ddca2085ee1fb57edb">word</a> mzd_read_bits </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>n</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get n bits starting a position (x,y) from the matrix M.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Source matrix. </td></tr>
    <tr><td class="paramname">x</td><td>Starting row. </td></tr>
    <tr><td class="paramname">y</td><td>Starting column. </td></tr>
    <tr><td class="paramname">n</td><td>Number of bits (&lt;= RADIX); </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a1d2915c15bd8cb9cb2b000d5e05c10fa"></a><!-- doxytag: member="packedmatrix.h::mzd_row_add" ref="a1d2915c15bd8cb9cb2b000d5e05c10fa" args="(mzd_t *M, const size_t sourcerow, const size_t destrow)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mzd_row_add </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>sourcerow</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>destrow</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Add the rows sourcerow and destrow and stores the total in the row destrow. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">sourcerow</td><td>Index of source row </td></tr>
    <tr><td class="paramname">destrow</td><td>Index of target row</td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>this can be done much faster with mzd_combine. </dd></dl>

</div>
</div>
<a class="anchor" id="a920cc86cc3795ee1dff8c56e5cc113dc"></a><!-- doxytag: member="packedmatrix.h::mzd_row_add_offset" ref="a920cc86cc3795ee1dff8c56e5cc113dc" args="(mzd_t *M, size_t dstrow, size_t srcrow, size_t coloffset)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void mzd_row_add_offset </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>dstrow</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>srcrow</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>coloffset</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Add the rows sourcerow and destrow and stores the total in the row destrow, but only begins at the column coloffset. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">dstrow</td><td>Index of target row </td></tr>
    <tr><td class="paramname">srcrow</td><td>Index of source row </td></tr>
    <tr><td class="paramname">coloffset</td><td>Column offset </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a0403084836bf2fdc653b9ed196ffdbaf"></a><!-- doxytag: member="packedmatrix.h::mzd_row_clear_offset" ref="a0403084836bf2fdc653b9ed196ffdbaf" args="(mzd_t *M, const size_t row, const size_t coloffset)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mzd_row_clear_offset </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>row</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>coloffset</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Clear the given row, but only begins at the column coloffset. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">row</td><td>Index of row </td></tr>
    <tr><td class="paramname">coloffset</td><td>Column offset </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="af890631f07570822c0dab42eeb7fe2cf"></a><!-- doxytag: member="packedmatrix.h::mzd_row_swap" ref="af890631f07570822c0dab42eeb7fe2cf" args="(mzd_t *M, const size_t rowa, const size_t rowb)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void mzd_row_swap </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>rowa</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>rowb</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Swap the two rows rowa and rowb. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">rowa</td><td>Row index. </td></tr>
    <tr><td class="paramname">rowb</td><td>Row index. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="aaf5ab2357cc0df3fac6bb7ba10f734e9"></a><!-- doxytag: member="packedmatrix.h::mzd_set_ui" ref="aaf5ab2357cc0df3fac6bb7ba10f734e9" args="(mzd_t *M, const unsigned value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mzd_set_ui </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const unsigned&#160;</td>
          <td class="paramname"><em>value</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Set the matrix M to the value equivalent to the integer value provided. </p>
<p>Specifically, this function does nothing if value%2 == 0 and returns the identity matrix if value%2 == 1.</p>
<p>If the matrix is not square then the largest possible square submatrix is set to the identity matrix.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">value</td><td>Either 0 or 1 </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a90d0fce4aac548d07c0f16a1ea8ae855"></a><!-- doxytag: member="packedmatrix.h::mzd_stack" ref="a90d0fce4aac548d07c0f16a1ea8ae855" args="(mzd_t *C, const mzd_t *A, const mzd_t *B)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* mzd_stack </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>C</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>B</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Stack A on top of B and write the result to C. </p>
<p>That is,</p>
<div class="fragment"><pre class="fragment">
 [ A ], [ B ] -&gt; [ A ] = C
                 [ B ]
 </pre></div><p>The inputs are not modified but a new matrix is created.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">C</td><td>Matrix, may be NULL for automatic creation </td></tr>
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
    <tr><td class="paramname">B</td><td>Matrix</td></tr>
  </table>
  </dd>
</dl>
<dl class="user"><dt><b>Ignores offset atrtribute of packedmatrix.</b></dt><dd></dd></dl>

</div>
</div>
<a class="anchor" id="a686f3e2d1733b122e4ccd2e02f719106"></a><!-- doxytag: member="packedmatrix.h::mzd_submatrix" ref="a686f3e2d1733b122e4ccd2e02f719106" args="(mzd_t *S, const mzd_t *M, const size_t lowr, const size_t lowc, const size_t highr, const size_t highc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* mzd_submatrix </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>S</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>lowr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>lowc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>highr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>highc</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Copy a submatrix. </p>
<p>Note that the upper bounds are not included.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">S</td><td>Preallocated space for submatrix, may be NULL for automatic creation. </td></tr>
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">lowr</td><td>start rows </td></tr>
    <tr><td class="paramname">lowc</td><td>start column </td></tr>
    <tr><td class="paramname">highr</td><td>stop row (this row is <em>not</em> included) </td></tr>
    <tr><td class="paramname">highc</td><td>stop column (this column is <em>not</em> included) </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ac56af8c1776e0c7727bc398ff00fdeff"></a><!-- doxytag: member="packedmatrix.h::mzd_transpose" ref="ac56af8c1776e0c7727bc398ff00fdeff" args="(mzd_t *DST, const mzd_t *A)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structmzd__t.html">mzd_t</a>* mzd_transpose </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>DST</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>A</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Transpose a matrix. </p>
<p>This function uses the fact that: </p>
<div class="fragment"><pre class="fragment">
   [ A B ]T    [AT CT]
   [ C D ]  =  [BT DT] 
 </pre></div><p> and thus rearranges the blocks recursively.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">DST</td><td>Preallocated return matrix, may be NULL for automatic creation. </td></tr>
    <tr><td class="paramname">A</td><td>Matrix </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a279d49adacd0f08fbcf9d3936c1774a4"></a><!-- doxytag: member="packedmatrix.h::mzd_write_bit" ref="a279d49adacd0f08fbcf9d3936c1774a4" args="(mzd_t *M, const size_t row, const size_t col, const BIT value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void mzd_write_bit </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>row</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>col</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="misc_8h.html#a0fd3ebb26b5e387df9c3677528d9e39c">BIT</a>&#160;</td>
          <td class="paramname"><em>value</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Write the bit value to position M[row,col]. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Matrix </td></tr>
    <tr><td class="paramname">row</td><td>Row index </td></tr>
    <tr><td class="paramname">col</td><td>Column index </td></tr>
    <tr><td class="paramname">value</td><td>Either 0 or 1</td></tr>
  </table>
  </dd>
</dl>
<dl class="note"><dt><b>Note:</b></dt><dd>No bounds checks whatsoever are performed. </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="testsuite_2bench_elimination_8c-example.html#a4">testsuite/bench_elimination.c</a>, and <a class="el" href="testsuite_2test_pluq_8c-example.html#a3">testsuite/test_pluq.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="a07a4f4b11033e8343190c03b54e0269f"></a><!-- doxytag: member="packedmatrix.h::mzd_xor_bits" ref="a07a4f4b11033e8343190c03b54e0269f" args="(const mzd_t *M, const size_t x, const size_t y, const int n, word values)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void mzd_xor_bits </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structmzd__t.html">mzd_t</a> *&#160;</td>
          <td class="paramname"><em>M</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>y</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="misc_8h.html#aa975e5cf9a68e2ddca2085ee1fb57edb">word</a>&#160;</td>
          <td class="paramname"><em>values</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>XOR n bits from values to M starting a position (x,y). </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">M</td><td>Source matrix. </td></tr>
    <tr><td class="paramname">x</td><td>Starting row. </td></tr>
    <tr><td class="paramname">y</td><td>Starting column. </td></tr>
    <tr><td class="paramname">n</td><td>Number of bits (&lt;= RADIX); </td></tr>
    <tr><td class="paramname">values</td><td>Word with values; </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Sat Apr 23 2011 for M4RI by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
</body>
</html>