| | |
| | |
| | |
| | |
| |
|
| | |
| |
|
| | |
| | |
| |
|
| | |
| | #define MINIZ_NO_STDIO |
| | #define MINIZ_NO_ARCHIVE_APIS |
| | #define MINIZ_NO_TIME |
| | #define MINIZ_NO_ZLIB_APIS |
| | #include "miniz.c" |
| |
|
| | #include "mex.h" |
| |
|
| | |
| | void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) |
| | { |
| |
|
| | char *action; |
| | unsigned char *IN = NULL, *OUT = NULL; |
| | size_t INlen, OUTlen; |
| |
|
| | |
| | if (nrhs < 2) |
| | mexErrMsgTxt("Not enough input arguments."); |
| | else if (nrhs > 2) |
| | mexErrMsgTxt("Too many input arguments."); |
| | else if (nlhs > 1) |
| | mexErrMsgTxt("Too many output arguments."); |
| |
|
| | |
| | if (!mxIsChar(prhs[0])) |
| | mexErrMsgTxt("Input ACTION must be a string."); |
| | action = mxArrayToString(prhs[0]); |
| |
|
| | |
| | if (!mxIsUint8(prhs[1]) || mxIsComplex(prhs[1])) |
| | mexErrMsgTxt("Input IN must be a real uint8 array."); |
| |
|
| | INlen = mxGetNumberOfElements(prhs[1]); |
| | IN = mxGetData(prhs[1]); |
| |
|
| | if (!strcmp(action,"D")) { |
| |
|
| | |
| | OUT = tinfl_decompress_mem_to_heap(IN, INlen, &OUTlen, TINFL_FLAG_PARSE_ZLIB_HEADER); |
| |
|
| | if (OUT == NULL) |
| | mexErrMsgTxt("Error when decompressing data."); |
| | } |
| | else if (!strcmp(action,"C")) { |
| | |
| | OUT = tdefl_compress_mem_to_heap(IN, INlen, &OUTlen, TDEFL_WRITE_ZLIB_HEADER); |
| | |
| | if (OUT == NULL) |
| | mexErrMsgTxt("Error when compressing data."); |
| | } |
| | else { |
| | mexErrMsgTxt("Unknown ACTION type."); |
| | } |
| |
|
| | |
| | plhs[0] = mxCreateNumericMatrix(OUTlen,1,mxUINT8_CLASS,mxREAL); |
| | if (plhs[0] == NULL) |
| | mexErrMsgTxt("Error when creating output variable."); |
| |
|
| | memcpy(mxGetData(plhs[0]), OUT, OUTlen); |
| |
|
| | mxFree(action); |
| | mz_free(OUT); |
| |
|
| | } |
| |
|