M4RI  1.0.1
brilliantrussian.h
Go to the documentation of this file.
1 
13 #ifndef M4RI_BRILLIANTRUSSIAN_H
14 #define M4RI_BRILLIANTRUSSIAN_H
15 
16  /*******************************************************************
17  *
18  * M4RI: Linear Algebra over GF(2)
19  *
20  * Copyright (C) 2007, 2008 Gregory Bard <bard@fordham.edu>
21  * Copyright (C) 2008-2010 Martin Albrecht <martinralbrecht@googlemail.com>
22  *
23  * Distributed under the terms of the GNU General Public License (GPL)
24  * version 2 or higher.
25  *
26  * This code is distributed in the hope that it will be useful,
27  * but WITHOUT ANY WARRANTY; without even the implied warranty of
28  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
29  * General Public License for more details.
30  *
31  * The full text of the GPL is available at:
32  *
33  * http://www.gnu.org/licenses/
34  *
35  ********************************************************************/
36 
37 #include <math.h>
38 #include <string.h>
39 #include <stdlib.h>
40 
41 #include <m4ri/mzd.h>
42 #include <m4ri/mzp.h>
43 
58 void mzd_make_table(mzd_t const *M, rci_t r, rci_t c, int k, mzd_t *T, rci_t *L);
59 
78 void mzd_process_rows(mzd_t *M, rci_t startrow, rci_t endrow, rci_t startcol, int k, mzd_t const *T, rci_t const *L);
79 
97 void mzd_process_rows2(mzd_t *M, rci_t startrow, rci_t endrow, rci_t startcol, int k, mzd_t const *T0, rci_t const *L0, mzd_t const *T1, rci_t const *L1);
98 
118 void mzd_process_rows3(mzd_t *M, rci_t startrow, rci_t endrow, rci_t startcol, int k,
119  mzd_t const *T0, rci_t const *L0, mzd_t const *T1, rci_t const *L1,
120  mzd_t const *T2, rci_t const *L2);
121 
143 void mzd_process_rows4(mzd_t *M, rci_t startrow, rci_t endrow, rci_t startcol, int k,
144  mzd_t const *T0, rci_t const *L0, mzd_t const *T1, rci_t const *L1,
145  mzd_t const *T2, rci_t const *L2, mzd_t const *T3, rci_t const *L3);
146 
170 void mzd_process_rows5(mzd_t *M, rci_t startrow, rci_t endrow, rci_t startcol, int k,
171  mzd_t const *T0, rci_t const *L0, mzd_t const *T1, rci_t const *L1,
172  mzd_t const *T2, rci_t const *L2, mzd_t const *T3, rci_t const *L3,
173  mzd_t const *T4, rci_t const *L4);
174 
200 void mzd_process_rows6(mzd_t *M, rci_t startrow, rci_t endrow, rci_t startcol, int k,
201  mzd_t const *T0, rci_t const *L0, mzd_t const *T1, rci_t const *L1,
202  mzd_t const *T2, rci_t const *L2, mzd_t const *T3, rci_t const *L3,
203  mzd_t const *T4, rci_t const *L4, mzd_t const *T5, rci_t const *L5);
204 
229 rci_t _mzd_echelonize_m4ri(mzd_t *A, const int full, int k, int heuristic, const double threshold);
230 
242 void mzd_top_echelonize_m4ri(mzd_t *M, int k);
243 
259 rci_t _mzd_top_echelonize_m4ri(mzd_t *A, int k, rci_t r, rci_t c, rci_t max_r);
260 
273 mzd_t *mzd_inv_m4ri(mzd_t *dst, const mzd_t* src, int k);
274 
292 mzd_t *mzd_mul_m4rm(mzd_t *C, mzd_t const *A, mzd_t const *B, int k);
293 
294 
311 mzd_t *mzd_addmul_m4rm(mzd_t *C, mzd_t const *A, mzd_t const *B, int k);
312 
338 mzd_t *_mzd_mul_m4rm(mzd_t *C, mzd_t const *A, mzd_t const *B, int k, int clear);
339 
340 
341 #endif // M4RI_BRILLIANTRUSSIAN_H