M4RI
20140914
|
Dense matrices over GF(2). More...
#include <mzd.h>
Data Fields | |
rci_t | nrows |
rci_t | ncols |
wi_t | width |
wi_t | rowstride |
wi_t | offset_vector |
wi_t | row_offset |
uint8_t | flags |
uint8_t | blockrows_log |
uint8_t | padding [62-2 *sizeof(rci_t)-4 *sizeof(wi_t)-sizeof(word)-2 *sizeof(void *)] |
word | high_bitmask |
mzd_block_t * | blocks |
word ** | rows |
Dense matrices over GF(2).
The most fundamental data type in this library.
uint8_t mzd_t::blockrows_log |
blockrows_log = log2(blockrows); where blockrows is the number of rows in one block, which is a power of 2.
mzd_block_t* mzd_t::blocks |
Pointers to the actual blocks of memory containing the values packed into words.
uint8_t mzd_t::flags |
Booleans to speed up things.
The bits have the following meaning:
1: Has non-zero excess. 2: Is windowed, but has zero offset. 3: Is windowed, but has zero excess. 4: Is windowed, but owns the blocks allocations. 5: Spans more than 1 block.
word mzd_t::high_bitmask |
Mask for valid bits in the word with the highest index (width - 1).
rci_t mzd_t::ncols |
Number of columns.
rci_t mzd_t::nrows |
Number of rows.
wi_t mzd_t::offset_vector |
Offset in words from start of block to first word.
rows[0] = blocks[0].begin + offset_vector; This, together with rowstride, makes the rows array obsolete.
wi_t mzd_t::row_offset |
Number of rows to the first row counting from the start of the first block.
word** mzd_t::rows |
Address of first word in each row, so the first word of row i is is m->rows[i]
wi_t mzd_t::rowstride |
Offset in words between rows.
rowstride = (width < mzd_paddingwidth || (width & 1) == 0) ? width : width + 1; where width is the width of the underlying non-windowed matrix.
wi_t mzd_t::width |
Number of words with valid bits: width = ceil(ncols / m4ri_radix)