32#include "erasurecode.h"
33#include "erasurecode_backend.h"
34#include "erasurecode_helpers.h"
35#include "erasurecode_helpers_ext.h"
37#define JERASURE_RS_CAUCHY_LIB_MAJOR 2
38#define JERASURE_RS_CAUCHY_LIB_MINOR 0
39#define JERASURE_RS_CAUCHY_LIB_REV 0
40#define JERASURE_RS_CAUCHY_LIB_VER_STR "2.0"
41#define JERASURE_RS_CAUCHY_LIB_NAME "jerasure_rs_cauchy"
42#if defined(__MACOS__) || defined(__MACOSX__) || defined(__OSX__) || defined(__APPLE__)
43#define JERASURE_RS_CAUCHY_SO_NAME "libJerasure" LIBERASURECODE_SO_SUFFIX ".dylib"
45#define JERASURE_RS_CAUCHY_SO_NAME "libJerasure" LIBERASURECODE_SO_SUFFIX ".so.2"
51typedef int* (*cauchy_original_coding_matrix_func)(int, int, int);
52typedef int* (*jerasure_matrix_to_bitmatrix_func)(int, int, int,
int *);
53typedef int** (*jerasure_smart_bitmatrix_to_schedule_func)
54 (int, int, int,
int *);
56 (int, int, int,
int *,
char **,
char **, int, int);
58 (int, int, int,
int *, int,
int *,
char **,
char **, int, int);
59typedef int * (*jerasure_erasures_to_erased_func)(int, int,
int *);
61 (int, int, int,
int *,
int *,
int *,
int *);
63 (int, int,
int *,
int *, int,
char **,
char **, int, int);
70#define PYECC_CAUCHY_PACKETSIZE sizeof(long) * 128
115 data, parity, blocksize,
122 int *missing_idxs,
int blocksize)
140 int *missing_idxs,
int destination_idx,
int blocksize)
144 int *decoding_row = NULL;
147 int *decoding_matrix = NULL;
151 k = jerasure_desc->
k;
152 m = jerasure_desc->
m;
153 w = jerasure_desc->
w;
155 if (destination_idx <
k) {
156 dm_ids = (
int *) alloc_zeroed_buffer(
sizeof(
int) *
k);
157 decoding_matrix = (
int *) alloc_zeroed_buffer(
sizeof(
int *) *
k *
k *
w *
w);
159 if (NULL == decoding_matrix || NULL == dm_ids || NULL == erased) {
165 erased, decoding_matrix, dm_ids);
167 decoding_row = decoding_matrix + (destination_idx *
k *
w *
w);
170 decoding_row, dm_ids, destination_idx,
199 free(decoding_matrix);
210 int *fragments_to_exclude,
int *fragments_needed)
214 struct ec_bm exclude_bm = NEW_BM, missing_bm = NEW_BM;
215 convert_list_to_bitmap(fragments_to_exclude, &exclude_bm);
216 convert_list_to_bitmap(missing_idxs, &missing_bm);
217 bm_combine_or(&exclude_bm, &missing_bm);
222 for (i = 0; i < (jerasure_desc->
k + jerasure_desc->
m); i++) {
223 if (!bm_get_value(&missing_bm, i)) {
224 fragments_needed[j] = i;
227 if (j == jerasure_desc->
k) {
229 fragments_needed[j] = -1;
239 void *backend_sohandle)
253 if (args->uargs.w <= 0)
264 long long max_symbols;
265 max_symbols = 1LL <<
w;
266 if ((
k +
m) > max_symbols) {
287 } func_handle = {.vptr = NULL};
290 func_handle.vptr = NULL;
291 func_handle.vptr = dlsym(backend_sohandle,
"jerasure_bitmatrix_encode");
297 func_handle.vptr = NULL;
298 func_handle.vptr = dlsym(backend_sohandle,
"jerasure_bitmatrix_decode");
304 func_handle.vptr = NULL;
305 func_handle.vptr = dlsym(backend_sohandle,
"cauchy_original_coding_matrix");
311 func_handle.vptr = NULL;
312 func_handle.vptr = dlsym(backend_sohandle,
"jerasure_matrix_to_bitmatrix");
318 func_handle.vptr = NULL;
319 func_handle.vptr = dlsym(backend_sohandle,
"jerasure_smart_bitmatrix_to_schedule");
325 func_handle.vptr = NULL;
326 func_handle.vptr = dlsym(backend_sohandle,
"jerasure_make_decoding_bitmatrix");
332 func_handle.vptr = NULL;
333 func_handle.vptr = dlsym(backend_sohandle,
"jerasure_bitmatrix_dotprod");
339 func_handle.vptr = NULL;
340 func_handle.vptr = dlsym(backend_sohandle,
"jerasure_erasures_to_erased");
346 func_handle.vptr = NULL;
347 func_handle.vptr = dlsym(backend_sohandle,
"galois_uninit_field");
355 if (NULL == desc->
matrix) {
360 goto bitmatrix_error;
398 bool end_of_array =
false;
400 if (jerasure_desc == NULL) {
413 free(jerasure_desc->
matrix);
425 while (!end_of_array) {
464 .GETMETADATASIZE = get_backend_metadata_size_zero,
465 .GETENCODEOFFSET = get_encode_offset_zero,
470 .id = EC_BACKEND_JERASURE_RS_CAUCHY,
int *(* cauchy_original_coding_matrix_func)(int, int, int)
static int jerasure_rs_cauchy_element_size(void *desc)
Return the element-size, which is the number of bits stored on a given device, per codeword.
#define JERASURE_RS_CAUCHY_LIB_MAJOR
static void * jerasure_rs_cauchy_init(struct ec_backend_args *args, void *backend_sohandle)
#define JERASURE_RS_CAUCHY_LIB_NAME
static bool jerasure_rs_cauchy_is_compatible_with(uint32_t version)
int **(* jerasure_smart_bitmatrix_to_schedule_func)(int, int, int, int *)
static int jerasure_rs_cauchy_exit(void *desc)
void(* jerasure_bitmatrix_dotprod_func)(int, int, int *, int *, int, char **, char **, int, int)
int(* jerasure_make_decoding_bitmatrix_func)(int, int, int, int *, int *, int *, int *)
void(* galois_uninit_field_func)(int)
#define PYECC_CAUCHY_PACKETSIZE
#define JERASURE_RS_CAUCHY_LIB_VER_STR
static void free_rs_cauchy_desc(struct jerasure_rs_cauchy_descriptor *jerasure_desc)
#define JERASURE_RS_CAUCHY_SO_NAME
int *(* jerasure_matrix_to_bitmatrix_func)(int, int, int, int *)
void(* jerasure_bitmatrix_encode_func)(int, int, int, int *, char **, char **, int, int)
static int jerasure_rs_cauchy_encode(void *desc, char **data, char **parity, int blocksize)
int *(* jerasure_erasures_to_erased_func)(int, int, int *)
static int jerasure_rs_cauchy_decode(void *desc, char **data, char **parity, int *missing_idxs, int blocksize)
__attribute__((visibility("internal")))
static int jerasure_rs_cauchy_min_fragments(void *desc, int *missing_idxs, int *fragments_to_exclude, int *fragments_needed)
static int jerasure_rs_cauchy_reconstruct(void *desc, char **data, char **parity, int *missing_idxs, int destination_idx, int blocksize)
#define JERASURE_RS_CAUCHY_LIB_REV
struct ec_backend_common backend_jerasure_rs_cauchy
int(* jerasure_bitmatrix_decode_func)(int, int, int, int *, int, int *, char **, char **, int, int)
static struct ec_backend_op_stubs jerasure_rs_cauchy_op_stubs
#define JERASURE_RS_CAUCHY_LIB_MINOR
jerasure_bitmatrix_decode_func jerasure_bitmatrix_decode
galois_uninit_field_func galois_uninit_field
jerasure_erasures_to_erased_func jerasure_erasures_to_erased
jerasure_bitmatrix_encode_func jerasure_bitmatrix_encode
jerasure_bitmatrix_dotprod_func jerasure_bitmatrix_dotprod
jerasure_smart_bitmatrix_to_schedule_func jerasure_smart_bitmatrix_to_schedule
jerasure_matrix_to_bitmatrix_func jerasure_matrix_to_bitmatrix
jerasure_make_decoding_bitmatrix_func jerasure_make_decoding_bitmatrix
cauchy_original_coding_matrix_func cauchy_original_coding_matrix