M4RI  1.0.1
permutation.h
Go to the documentation of this file.
00001 
00009 /******************************************************************************
00010 *
00011 *                 M4RI: Linear Algebra over GF(2)
00012 *
00013 *    Copyright (C) 2008 Martin Albrecht <malb@informatik.uni-bremen.de> 
00014 *
00015 *  Distributed under the terms of the GNU General Public License (GPL)
00016 *  version 2 or higher.
00017 *
00018 *    This code is distributed in the hope that it will be useful,
00019 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
00020 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00021 *    General Public License for more details.
00022 *
00023 *  The full text of the GPL is available at:
00024 *
00025 *                  http://www.gnu.org/licenses/
00026 ******************************************************************************/
00027 
00028 #ifndef M4RI_PERMUTATION_H
00029 #define M4RI_PERMUTATION_H
00030 
00031 #include "packedmatrix.h"
00032 
00037 typedef struct mzp_t {
00041   rci_t *values;
00042 
00047   rci_t length;
00048 
00049 } mzp_t; // note that this is NOT mpz_t
00050 
00057 mzp_t *mzp_init(rci_t length);
00058 
00065 void mzp_free(mzp_t *P);
00066 
00078 mzp_t *mzp_init_window(mzp_t *P, rci_t begin, rci_t end);
00079 
00087 void mzp_free_window(mzp_t *condemned);
00088 
00100 void mzp_set_ui(mzp_t *P, unsigned int value);
00101 
00111 void mzd_apply_p_left(mzd_t *A, mzp_t const *P);
00112 
00122 void mzd_apply_p_left_trans(mzd_t *A, mzp_t const *P);
00123 
00133 void mzd_apply_p_right(mzd_t *A, mzp_t const *P);
00134 
00144 void mzd_apply_p_right_trans(mzd_t *A, mzp_t const *P);
00145 
00159 void mzd_apply_p_right_even_capped(mzd_t *A, mzp_t const *P, rci_t start_row, rci_t start_col);
00160 
00174 void mzd_apply_p_right_trans_even_capped(mzd_t *A, mzp_t const *P, rci_t start_row, rci_t start_col);
00175 
00185 void mzd_apply_p_right_trans(mzd_t *A, mzp_t const *P);
00186 
00196 void  mzd_apply_p_right_trans_tri(mzd_t *A, mzp_t const *Q);
00197 
00204 void mzp_print(mzp_t const *P);
00205 
00216 void _mzd_compress_l(mzd_t *A, rci_t r1, rci_t n1, rci_t r2);
00217 
00218 #endif // M4RI_PERMUTATION_H