static PyObject * PyBlosc_code_to_name(PyObject *self, PyObject *args) { int code; char *name; if (!PyArg_ParseTuple(args, "i:code_to_name", &code)) return NULL; if (blosc_compcode_to_compname(code, &name) < 0) return NULL; return Py_BuildValue("s", name); }
/* Append a data buffer to a *packed* super-chunk. */ void* blosc2_packed_append_buffer(void* packed, size_t typesize, size_t nbytes, void* src) { int cname = *(int16_t*)((uint8_t*)packed + 4); int clevel = *(int16_t*)((uint8_t*)packed + 6); void* filters_chunk = (uint8_t*)packed + *(uint64_t*)((uint8_t*)packed + 40); uint8_t* filters = decode_filters(*(uint16_t*)((uint8_t*)packed + 8)); int cbytes; void* chunk = malloc(nbytes + BLOSC_MAX_OVERHEAD); void* dest = malloc(nbytes); char* compname; int doshuffle; void* new_packed; /* Apply filters prior to compress */ if (filters[0] == BLOSC_DELTA) { doshuffle = filters[1]; if (filters_chunk == NULL) { /* For packed super-buffers, the filters schunk should exist */ return NULL; } delta_encoder8(filters_chunk, 0, (int)nbytes, src, dest); /* memcpy(dest, src, nbytes); */ src = dest; } else { doshuffle = filters[0]; } /* Compress the src buffer using super-chunk defaults */ blosc_compcode_to_compname(cname, &compname); blosc_set_compressor(compname); cbytes = blosc_compress(clevel, doshuffle, typesize, nbytes, src, chunk, nbytes + BLOSC_MAX_OVERHEAD); if (cbytes < 0) { free(chunk); free(dest); free(filters); return NULL; } /* We don't need dest and filters anymore */ free(dest); free(filters); /* Append the chunk and free it */ new_packed = packed_append_chunk(packed, chunk); free(chunk); return new_packed; }
/* Append a data buffer to a super-chunk. */ size_t blosc2_append_buffer(blosc2_sheader* sheader, size_t typesize, size_t nbytes, void* src) { int cbytes; void* chunk = malloc(nbytes + BLOSC_MAX_OVERHEAD); uint8_t* dec_filters = decode_filters(sheader->filters); int clevel = sheader->clevel; char* compname; int doshuffle, ret; /* Apply filters prior to compress */ if (dec_filters[0] == BLOSC_DELTA) { doshuffle = dec_filters[1]; if (sheader->filters_chunk == NULL) { ret = blosc2_set_delta_ref(sheader, nbytes, src); if (ret < 0) { return((size_t)ret); } } } else { doshuffle = dec_filters[0]; } free(dec_filters); /* Compress the src buffer using super-chunk defaults */ blosc_compcode_to_compname(sheader->compressor, &compname); blosc_set_compressor(compname); blosc_set_schunk(sheader); cbytes = blosc_compress(clevel, doshuffle, typesize, nbytes, src, chunk, nbytes + BLOSC_MAX_OVERHEAD); if (cbytes < 0) { free(chunk); return cbytes; } /* Append the chunk */ return append_chunk(sheader, chunk); }