liberasurecode
1.6.2
Erasure Code API library
|
Go to the documentation of this file.
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.dylib"
45 #define JERASURE_RS_CAUCHY_SO_NAME "libJerasure.so.2"
53 typedef int* (*cauchy_original_coding_matrix_func)(int, int, int);
54 typedef int* (*jerasure_matrix_to_bitmatrix_func)(int, int, int,
int *);
55 typedef int** (*jerasure_smart_bitmatrix_to_schedule_func)
56 (int, int, int,
int *);
58 (int, int, int,
int *,
char **,
char **, int, int);
60 (int, int, int,
int *, int,
int *,
char **,
char **, int, int);
61 typedef int * (*jerasure_erasures_to_erased_func)(int, int,
int *);
63 (int, int, int,
int *,
int *,
int *,
int *);
65 (int, int,
int *,
int *, int,
char **,
char **, int, int);
72 #define PYECC_CAUCHY_PACKETSIZE sizeof(long) * 128
117 data, parity, blocksize,
124 int *missing_idxs,
int blocksize)
142 int *missing_idxs,
int destination_idx,
int blocksize)
146 int *decoding_row = NULL;
149 int *decoding_matrix = NULL;
153 k = jerasure_desc->
k;
154 m = jerasure_desc->
m;
155 w = jerasure_desc->
w;
157 if (destination_idx <
k) {
161 if (NULL == decoding_matrix || NULL == dm_ids || NULL == erased) {
167 erased, decoding_matrix, dm_ids);
169 decoding_row = decoding_matrix + (destination_idx *
k *
w *
w);
172 decoding_row, dm_ids, destination_idx,
201 free(decoding_matrix);
212 int *fragments_to_exclude,
int *fragments_needed)
216 uint64_t exclude_bm = convert_list_to_bitmap(fragments_to_exclude);
217 uint64_t missing_bm = convert_list_to_bitmap(missing_idxs) | exclude_bm;
222 for (i = 0; i < (jerasure_desc->
k + jerasure_desc->
m); i++) {
223 if (!(missing_bm & (1 << 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) {
463 .GETMETADATASIZE = get_backend_metadata_size_zero,
464 .GETENCODEOFFSET = get_encode_offset_zero,
468 .id = EC_BACKEND_JERASURE_RS_CAUCHY,
int **(* jerasure_smart_bitmatrix_to_schedule_func)(int, int, int, int *)
jerasure_erasures_to_erased_func jerasure_erasures_to_erased
int(* jerasure_make_decoding_bitmatrix_func)(int, int, int, int *, int *, int *, int *)
int *(* jerasure_matrix_to_bitmatrix_func)(int, int, int, int *)
#define JERASURE_RS_CAUCHY_LIB_VER_STR
static int jerasure_rs_cauchy_reconstruct(void *desc, char **data, char **parity, int *missing_idxs, int destination_idx, int blocksize)
galois_uninit_field_func galois_uninit_field
cauchy_original_coding_matrix_func cauchy_original_coding_matrix
static bool jerasure_rs_cauchy_is_compatible_with(uint32_t version)
jerasure_matrix_to_bitmatrix_func jerasure_matrix_to_bitmatrix
struct ec_backend_op_stubs jerasure_rs_cauchy_ops
#define PYECC_CAUCHY_PACKETSIZE
#define JERASURE_RS_CAUCHY_LIB_REV
jerasure_bitmatrix_dotprod_func jerasure_bitmatrix_dotprod
static int jerasure_rs_cauchy_encode(void *desc, char **data, char **parity, int blocksize)
struct ec_backend_common backend_jerasure_rs_cauchy
int *(* cauchy_original_coding_matrix_func)(int, int, int)
static int jerasure_rs_cauchy_decode(void *desc, char **data, char **parity, int *missing_idxs, int blocksize)
int(* jerasure_bitmatrix_decode_func)(int, int, int, int *, int, int *, char **, char **, int, int)
struct ec_backend_op_stubs jerasure_rs_cauchy_op_stubs
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_NAME
void * alloc_zeroed_buffer(int size)
Allocate a zero-ed buffer of a specific size.
static int jerasure_rs_cauchy_exit(void *desc)
int *(* jerasure_erasures_to_erased_func)(int, int, int *)
#define JERASURE_RS_CAUCHY_SO_NAME
jerasure_make_decoding_bitmatrix_func jerasure_make_decoding_bitmatrix
void(* jerasure_bitmatrix_encode_func)(int, int, int, int *, char **, char **, int, int)
static int jerasure_rs_cauchy_min_fragments(void *desc, int *missing_idxs, int *fragments_to_exclude, int *fragments_needed)
static void free_rs_cauchy_desc(struct jerasure_rs_cauchy_descriptor *jerasure_desc)
void(* galois_uninit_field_func)(int)
static void * jerasure_rs_cauchy_init(struct ec_backend_args *args, void *backend_sohandle)
jerasure_bitmatrix_encode_func jerasure_bitmatrix_encode
jerasure_smart_bitmatrix_to_schedule_func jerasure_smart_bitmatrix_to_schedule
jerasure_bitmatrix_decode_func jerasure_bitmatrix_decode
struct ec_backend jerasure_rs_cauchy
#define JERASURE_RS_CAUCHY_LIB_MAJOR
void(* jerasure_bitmatrix_dotprod_func)(int, int, int *, int *, int, char **, char **, int, int)
#define JERASURE_RS_CAUCHY_LIB_MINOR