diff options
author | Tushar Gohad <tushar.gohad@intel.com> | 2014-05-03 23:47:50 -0700 |
---|---|---|
committer | Tushar Gohad <tushar.gohad@intel.com> | 2014-05-05 22:25:21 -0700 |
commit | 1d6b2bcf1cc2cc66725c14fe6df12d0e93e87d6e (patch) | |
tree | f253cc19e8f1f42d4085cc996998a0166d962846 | |
parent | 8a98a16dd44ab98dc0f6184895ce7874c9b69a38 (diff) | |
download | pyeclib-1d6b2bcf1cc2cc66725c14fe6df12d0e93e87d6e.tar.gz |
c_eclib: Add init routine for rs_vand_isa_l
-rw-r--r-- | src/c/pyeclib_c/pyeclib_c.c | 32 | ||||
-rw-r--r-- | src/c/pyeclib_c/pyeclib_c.h | 1 |
2 files changed, 29 insertions, 4 deletions
diff --git a/src/c/pyeclib_c/pyeclib_c.c b/src/c/pyeclib_c/pyeclib_c.c index 2fb1f42..49f4e70 100644 --- a/src/c/pyeclib_c/pyeclib_c.c +++ b/src/c/pyeclib_c/pyeclib_c.c @@ -38,6 +38,11 @@ #include <pyeclib_c.h> #include <bytesobject.h> +/* ISA-L includes */ +#include <erasure_code.h> +#include <types.h> + +#define talloc(type, num) (type *) malloc(sizeof(type)*(num)) /* Python 3 compatibility macros */ #if PY_MAJOR_VERSION >= 3 @@ -576,6 +581,24 @@ static int get_decoding_info(pyeclib_t *pyeclib_handle, return 0; } +static int +pyeclib_c_init_rs_vand_isa_l(pyeclib_t *pyeclib_handle) +{ + int k = pyeclib_handle->k; + int m = pyeclib_handle->m; + + // Force w = 8 for ISA-L + pyeclib_handle->w = 8; + + // Generate encode matrix encode_matrix + // The matrix generated by gf_gen_rs_matrix + // is not always invertable. + pyeclib_handle->matrix = talloc(int, k * m); + gf_gen_rs_matrix((unsigned char *) pyeclib_handle->matrix, k + m, k); + + return 0; +} + static PyObject * pyeclib_c_init(PyObject *self, PyObject *args) { @@ -619,15 +642,13 @@ pyeclib_c_init(PyObject *self, PyObject *args) pyeclib_handle->algsig_chksum = use_algsig_chksum; switch (type) { - case PYECC_RS_VAND_ISA_L: - break; - case PYECC_RS_CAUCHY_ISA_L: - break; case PYECC_RS_CAUCHY_ORIG: pyeclib_handle->matrix = cauchy_original_coding_matrix(k, m, w); pyeclib_handle->bitmatrix = jerasure_matrix_to_bitmatrix(k, m, w, pyeclib_handle->matrix); pyeclib_handle->schedule = jerasure_smart_bitmatrix_to_schedule(k, m, w, pyeclib_handle->bitmatrix); break; + case PYECC_RS_CAUCHY_ISA_L: + break; case PYECC_XOR_HD_3: pyeclib_handle->xor_code_desc = init_xor_hd_code(k, m, 3); if (pyeclib_handle->algsig_chksum) { @@ -640,6 +661,9 @@ pyeclib_c_init(PyObject *self, PyObject *args) pyeclib_handle->alg_sig_desc = init_alg_sig(32, 16); } break; + case PYECC_RS_VAND_ISA_L: + pyeclib_c_init_rs_vand_isa_l(pyeclib_handle); + break; case PYECC_RS_VAND: default: pyeclib_handle->matrix = reed_sol_vandermonde_coding_matrix(k, m, w); diff --git a/src/c/pyeclib_c/pyeclib_c.h b/src/c/pyeclib_c/pyeclib_c.h index 9f92442..04cd6f8 100644 --- a/src/c/pyeclib_c/pyeclib_c.h +++ b/src/c/pyeclib_c/pyeclib_c.h @@ -78,6 +78,7 @@ typedef struct pyeclib_s int m; int w; int *matrix; + // TODO move ec_type-specific members into unions int *bitmatrix; int **schedule; xor_code_t *xor_code_desc; |