Releases: NeuroJSON/zmat
ZMat 1.0 RC1 (Foxy the Fantastic Mr. Fox - RC1)
- Copyright (C) 2019-2023 Qianqian Fang <q.fang at neu.edu>
- License: GNU General Public License version 3 (GPL v3), see License*.txt
- Version: 0.9.9 (Foxy the Fantastic Mr. Fox - RC1)
- URL: https://github.com/NeuroJSON/zmat
- Acknowledgement: This project is part of the NeuroJSON project
supported by US National Institute of Health (NIH)
grant U24-NS124027
Download
- Please download zmat by filling out a brief registration form
- The pre-compiled Octave mex file can only be used with Octave 8.x on Windows and MacOS (on Linux, the Octave mex file supports all Octave versions). The MATLAB mex files can run across a wide range of MATLAB versions.
Whats New
Starting in v0.9.9, we added support to a high-performance meta-compressor,
called blosc2
(https://blosc.org). The blosc2
compressor is not single
compression method, but a container format that supports a diverse set of
strategies to losslessly compress data, especially optimized for storing and
retrieving N-D numerical data of uniform binary types. Users can choose
between blosc2blosclz
, blosc2lz4
, blosc2lz4hc
, blosc2zlib
and
blosc2zstd
, to access these blosc2 codecs.
The key updates of thi release include
- support blosc2 (https://blosc.org) meta-compressor (
blosc2blosclz
,blosc2lz4
,blosc2lz4hc
,blosc2zlib
and
blosc2zstd
) - support ZStandard (
zstd
) compression - use
miniz
instead ofzlib
to make the package self-contained to ease deployment - Octave mex files are organized in folders and support multiple OSes in one package
- Octave/MATLAB mex files are both forward and backward compatible (universal)
- add unit-testing scripts
- extensive development on github action based CI/CD, with automated testing and packaging
- migrate upstream git repository to https://github.com/NeuroJSON/zmat
- many bug fixes
ChangeLog
ZMAT 0.9.9 (Foxy the Fantastic Mr. Fox - RC1), FangQ <q.fang (a) neu.edu>
2023-10-22 [c79f969] use valgrind to test memory error on Linux,run example scripts
2023-10-22 [48ba900] fix memory error using valgrind, run full tests on all OS
2023-10-13 [d5b2c40] revert blosc2 to v2.8.0 to remove new dependency libdl
2023-10-13 [f2eadb5] fix broken test
2023-10-13 [e6bbda1] update cmake file, update README
2023-10-13 [bc760d5] Merge branch 'master' of github.com:NeuroJSON/zmat
2023-10-13 [7472d29] update blosc2 to v2.10.5, update zstd to 1.5.5
2023-10-13 [437f300] rename zstd folder without version number
2023-10-13*[f4408f6] use miniz by default, rename zstd folder name
2023-10-13 [fcaa396] update lz4 to 1.9.4
2023-10-13 [57115dd] Update README.rst
2023-09-14 [e50dc6b] build octave mex with octave 8.3 on windows
2023-09-14 [edbeae9] update compilezmat.m without blosc2 and zstd support
2023-06-27 [906d422] run a simpler version of octave test on windows
2023-06-25 [d628473] run demo
2023-06-25 [8c97c17] run full test on windows
2023-06-25 [a28f9c7] use simple test on windows
2023-06-25 [f443ef7] skip error testing on windows and mac
2023-06-25 [2d6732c] add matlab mex build on ubuntu 16.04
2023-06-24 [68eede3] add new octave mex for windows and mac
2023-06-24 [7416b2c] double quote windows libloc
2023-06-24 [d9f239c] static link zlib again
2023-06-24 [cf8b9d4] fix windows matlab path
2023-06-24 [05be0d6] add additional path for libmx
2023-06-23 [30beb86] test ubuntu 20.04 build error
2023-06-23 [3383f74] fix windows mx/mex not found issue
2023-06-23 [910be8b] fix quotation mark issue
2023-06-23 [fb1a63d] upload all zip files
2023-06-22 [6f6b493] upload only the allinone package
2023-06-21 [2751923] strip mex file to reduce size
2023-06-21 [1461b9b] remove -lz from static linking on linux
2023-06-21 [df92d96] add LDFLAGS to mkoctfile
2023-06-10 [e3303c5] base64 no longer add new line by default, use level=3 to restore
2023-06-06*[ff150ae] support miniz-based gzip compression and decompression, update test
2023-06-06 [e098fd2] use miniz for gzip decompression
2023-06-03 [0acc9e3] allow using HAVE_ZLIB/HAVE_LZ4/HAVE_ZSTD=yes/no with make
2023-04-11*[2caae69] add github action based CI
2022-10-24*[c655c56] add miniz
2022-09-20*[e557c65] let zmatlib C function handle base64 encoding newline instead of zmat.m
2022-09-20 [afe5654] make flag compatible with zmat v0.9.8 convention
2022-09-20*[6f1e437] add speed benchmark
2022-09-18 [84892ca] update fortran90 example
2022-09-18 [edb768b] update octave mex using octave 5
2022-09-18 [e5107bb] fix zstd default clevel, force make rebuild, update octave mex
2022-09-18 [2be1661] add zstd tests, fix blosc condition, fix zstd error code
2022-09-18 [2526367] fix mac ci error
2022-09-17*[877f2d7] add zstd compression support, fix #5
2022-09-15 [ad4605d] statically link libblosc2 and libzstd to libzmat.a
2022-09-15 [b1b0ad7] add c example in CI, add blosc2 tests
2022-09-15 [a5c072d] adjust makefile for building so file
2022-09-14 [98ab1df] force CC as dll linker
2022-09-13 [b8bdc8d] change xcode version
2022-09-13 [d863adf] remove warning
2022-09-13 [ef9ace9] debug travis on windows and osx
2022-09-13 [269a972] use system MAKE variable
2022-09-13 [7431bfc] debug travis error
2022-09-13 [78b1fa9] fix typesize, fix composit flags, make pretty
2022-09-12 [552a007] add the missing blosc2 makefile
2022-09-12 [944fb12] support blosc2 compressors
2022-09-11 [3f9542e] update zstd makefile
2022-09-11 [f07c09a] revert c-blosc2 to stable release v2.3.1
2022-09-10 [65ae09f] add blosc2 code tree
2022-08-22 [a471522] revert ci setting
2022-08-22 [9d4293e] switch CI to NeuroJSON
2022-08-22 [290a46c] switch upstream git repo owner to NeuroJSON org
2022-08-22 [59d092d] run test on matlab R2010
2022-08-22 [63b3f3d] manually patch easylzma PR lloyd/easylzma#7 to prevent memory leak
2022-08-22 [16cb296] matlab/octave are different in exp(1) and mexErrMsgTxt format
2022-08-21*[3bc5d6f] allow zmat to return error status without throwing an error
2022-08-20 [138be0b] test return status, clear memory in c example
2022-08-20 [b914a67] zlib memory tweaks
2022-08-20 [ccf0546] reformat c example
2022-08-20*[eab19fb] add unit tests, zlib memory optimization
2022-08-18 [5fe4360] test older octave (3.8)
2022-08-18 [e542838] test built in portable octave mex file
2022-08-18 [2cdc1b4] revert demo script to print outputs
2022-08-18 [675c922] add ubuntu 22.04 in CI
2022-08-18*[11b858b] allow oct file built with 5.x or newer to run in 4.x and 3.x
2022-08-16 [8291ebe] fix a warning picked by fedora package building flags
2022-08-15 [af61014] remove CXX=mkoctfile to prevent infinite loop in octave 7, fix #9
2022-06-07 [617618d] complete reformat using miss_hit
2022-05-21 [ef858a5] reformat C source code using astyle
2022-05-19 [b7cf723] add ubuntu 20.04 in ci
2022-05-19 [4b6a87e] update PKG_ADD to use locally compiled mex file first
2022-04-28*[08bd437] autoload octave mex file when addpath, thanks to cdf and mmuetzel
2021-11-20 [5f31756] port debian package patch to respect CFLAGS and LDFLAGS, fix #7
ZMat 1.0 beta (Codename: Archie-the-goat - beta)
ZMAT: A portable C-library and MATLAB toolbox for zlib/gzip/lzma/lz4/lz4hc data compression
- Copyright (C) 2019,2020 Qianqian Fang <q.fang at neu.edu>
- License: GNU General Public License version 3 (GPL v3), see License*.txt
- Version: 0.9.8 (Archie-the-goat - beta)
- URL: http://github.com/fangq/zmat
ChangeLog
ZMAT 0.9.8 (Archie-the-goat - beta), FangQ <q.fang (a) neu.edu>
2020-05-25 [b83efba] trim base64 newline, update compilezmat, update win64 mex, release 1.0 beta
2020-05-25 [ea83b12] move zmatlib.h header to the dedicated include folder
2020-05-25 [b333987] add fortran 90 function interface and demo code
2020-05-24 [f0cbcf5] add c example
2020-05-24 [18215a2] fix compilation instruction format
2020-05-24 [392d446] add doxygen documentation
2020-05-24 [6a3e038] fix crashing if input is empty
2020-05-24 [bc8349e] accept empty input, update help info, add cmake compilation
2020-05-24 [211cddb] change windows mex file permission
2020-05-23 [5261474] add cmake script
2020-05-23 [5fac274] add makefile in the top folder
2020-05-23 [cd45748] support compression level via iscompress, add code header
2020-05-23 [864e9d2] add cmake support
2020-05-11 [62ecc75] Add description for libzmat and interface
2020-05-11 [7252216] make compilezmat compatible with matlab 2010
2020-05-11 [6cedd38] fix all warnings for easylzma
2020-05-11 [1ac6464] include easylzma source tree directly for easy deployment and building
2019-10-07 [a477939] compile static and dynamic libraries
Introduction
ZMat provides both an easy-to-use C-based data compression library -
libzmat
as well a portable mex function to enable zlib/gzip/lzma/lzip/lz4/lz4hc
based data compression/decompression and base64
encoding/decoding support
in MATLAB and GNU Octave. It is fast and compact, can process a
large array within a fraction of a second.
Among the 6 supported compression methods, lz4
is the fastest for
compression/decompression; lzma
is the slowest but has the highest
compression ratio; zlib/gzip
have the best balance between speed
and compression time.
The libzmat
library, including the static library (libzmat.a
) and the
dynamic library libzmat.so
or libzmat.dll
, provides a simple interface to
conveniently compress or decompress a memory buffer:
int zmat_run(
const size_t inputsize, /* input buffer data length */
unsigned char *inputstr, /* input buffer */
size_t *outputsize, /* output buffer data length */
unsigned char **outputbuf, /* output buffer */
const int zipid, /* 0-zlib,1-gzip,2-base64,3-lzma,4-lzip,5-lz4,6-lz4hc */
int *status, /* return status for error handling*/
const int level /* 1 compress (default level); -1 to -9 compression level, 0 decompress */
);
The library is highly portable and can be directly embedded in the source code
to provide maximal portability. In the test
folder, we provided sample codes
to call zmat_run/zmat_encode/zmat_decode
for stream-level compression and
decompression in C and Fortran90. The Fortran90 C-binding module can be found
in the fortran90
folder.
The ZMat MATLAB function accepts 3 types of inputs: char-based strings, numerical arrays
or vectors, or logical arrays/vectors. Any other input format will
result in an error unless you typecast the input into int8/uint8
format. A multi-dimensional numerical array is accepeted, and the
original input's type/dimension info is stored in the 2nd output
"info"
. If one calls zmat
with both the encoded data (in byte vector)
and the "info"
structure, zmat will first decode the binary data
and then restore the original input's type and size.
ZMat uses zlib
- an open-source and widely used library for data
compression. On Linux/Mac OSX, you need to have libz.so or libz.dylib
installed in your system library path (defined by the environment
variables LD_LIBRARY_PATH
or DYLD_LIBRARY_PATH
, respectively).
The pre-compiled mex binaries for MATLAB are stored inside the
subfolder named private
. Those precompiled for GNU Octave are
stored in the subfolder named octave
, with one operating system
per subfolder.
If you do not want to compile zmat yourself, you can download the
precompiled package by either clicking on the "Download ZIP" button
on the above URL, or use the below git command:
git clone https://github.com/fangq/zmat.git
Installation
The installation of ZMat is no different from any other simple
MATLAB toolboxes. You only need to download/unzip the package
to a folder, and add the folder's path (that contains zmat.m and
the "private" folder) to MATLAB's path list by using the
following command:
addpath('/path/to/zmat');
For Octave, one needs to copy the zipmat.mat file inside the "octave
",
from the subfolder matching the OS into the "private
" subfolder.
If you want to add this path permanently, you need to type "pathtool
",
browse to the zmat root folder and add to the list, then click "Save".
Then, run "rehash
" in MATLAB, and type "which zmat
", if you see an
output, that means ZMat is installed for MATLAB/Octave.
If you use MATLAB in a shared environment such as a Linux server, the
best way to add path is to type
mkdir ~/matlab/
nano ~/matlab/startup.m
and type addpath('/path/to/zmat')
in this file, save and quit the editor.
MATLAB will execute this file every time it starts. For Octave, the file
you need to edit is ~/.octaverc
, where "~
" is your home directory.
Using ZMat
ZMat provides a single mex function, zipmat.mex*
-- for both compressing/encoding
or decompresing/decoding data streams. The help info of the function is shown
below
output=zmat(input)
or
[output, info]=zmat(input, iscompress, method)
output=zmat(input, info)
A portable data compression/decompression toolbox for MATLAB/GNU Octave
author: Qianqian Fang <q.fang at neu.edu>
initial version created on 04/30/2019
input:
input: a char, non-complex numeric or logical vector or array
iscompress: (optional) if iscompress is 1, zmat compresses/encodes the input,
if 0, it decompresses/decodes the input. Default value is 1.
if iscompress is set to a negative integer, (-iscompress) specifies
the compression level. For zlib/gzip, default level is 6 (1-9); for
lzma/lzip, default level is 5 (1-9); for lz4hc, default level is 8 (1-16).
the default compression level is used if iscompress is set to 1.
zmat removes the trailing newline when iscompress=2 and methpod='base64'
all newlines are removed when iscompress=3 and methpod='base64'
if one defines iscompress as the info struct (2nd output of zmat), zmat
will perform a decoding/decompression operation and recover the original
input using the info stored in the info structure.
method: (optional) compression method, currently, zmat supports the below methods
'zlib': zlib/zip based data compression (default)
'gzip': gzip formatted data compression
'lzip': lzip formatted data compression
'lzma': lzma formatted data compression
'lz4': lz4 formatted data compression
'lz4hc':lz4hc (LZ4 with high-compression ratio) formatted data compression
'base64': encode or decode use base64 format
output:
output: a uint8 row vector, storing the compressed or decompressed data;
empty when an error is encountered
info: (optional) a struct storing additional info regarding the input data, may have
'type': the class of the input array
'size': the dimensions of the input array
'byte': the number of bytes per element in the input array
'method': a copy of the 3rd input indicating the encoding method
'status': the zlib/lzma/lz4 compression/decompression function return value,
including potential error codes; see documentation of the respective
libraries for details
'level': a copy of the iscompress flag; if non-zero, specifying compression
level, see above
example:
[ss, info]=zmat(eye(5))
orig=zmat(ss,0)
orig=zmat(ss,info)
ss=char(zmat('zmat test',1,'base64'))
orig=char(zmat(ss,0,'base64'))
-- this function is part of the zmat toolbox (http://github.com/fangq/zmat)
examples
Under the "example"
folder, you can find a demo script showing the
basic utilities of ZMat. Running the "demo_zmat_basic.m"
script,
you can see how to compress/decompress a simple array, as well as apply
base64 encoding/decoding to strings.
Please run these examples and understand how ZMat works before you use
it to process your data.
Compile ZMat
To recompile ZMat, you first need to check out ZMat source code, along
with the needed submodules from the Github repository using the below
command
git clone https://github.com/fangq/zmat.git zmat
Next, you need to make sure your system has gcc
, g++
,
mex
and mkoctfile
(if compiling for Octave is needed). If not,
please install gcc, MATLAB and GNU Octave and add the paths to
these utilities to the system PATH environment variable.
To compile zmat, you may choose one of the three methods:
- Method 1: please open MATLAB or Octave, and run t...
ZMat v0.9.2 for creating Fedora package zmat and zmat-devel
create static and dynamic libraries
ZMat v0.9.1 for creating Fedora packaging
compile static and dynamic libraries
ZMat v0.9 (Codename: Gus-the-duck)
ZMAT: A portable data compression/decompression toolbox for MATLAB/Octave
- Copyright (C) 2019 Qianqian Fang <q.fang at neu.edu>
- License: GNU General Public License version 3 (GPL v3), see License*.txt
- Version: 0.9 (Gus-the-duck)
- URL: http://github.com/fangq/zmat
ChangeLog
ZMAT 0.9.0 (Gus-the-duck), FangQ <q.fang (a) neu.edu>
2019-09-17 [73c6257] update windows mex files
2019-09-16 [a6768b9] update mex files for mac os
2019-09-16*[a940d36] initial support for the fast lz4 compression method
2019-07-12 [2cd2ac6] Update formats
2019-07-12 [53485d9] Additional format updates
2019-07-12 [b3df542] Add compilation instructions
Introduction
ZMat is a portable mex function to enable zlib/gzip/lzma/lzip/lz4/lz4hc
based data compression/decompression and base64 encoding/decoding support
in MATLAB and GNU Octave. It is fast and compact, can process a
large array within a fraction of a second.
Among the 6 supported compression methods, lz4 is the fastest for
compression/decompression; lzma is the slowest but has the highest
compression ratio; zlib/gzip have the best balance between speed
and compression time.
ZMat accepts 3 types of inputs: char-based strings, numerical arrays
or vectors, or logical arrays/vectors. Any other input format will
result in an error unless you typecast the input into int8/uint8
format. A multi-dimensional numerical array is accepeted, and the
original input's type/dimension info is stored in the 2nd output
"info"
. If one calls zmat
with both the encoded data (in byte vector)
and the "info"
structure, zmat will first decode the binary data
and then restore the original input's type and size.
ZMat uses zlib - an open-source and widely used library for data
compression. On Linux/Mac OSX, you need to have libz.so or libz.dylib
installed in your system library path (defined by the environment
variables LD_LIBRARY_PATH
or DYLD_LIBRARY_PATH
, respectively).
The pre-compiled mex binaries for MATLAB are stored inside the
subfolder named "private". Those precompiled for GNU Octave are
stored in the subfolder named "octave", with one operating system
per subfolder.
If you do not want to compile zmat yourself, you can download the
precompiled package by either clicking on the "Download ZIP" button
on the above URL, or use the below git command:
git clone https://github.com/fangq/zmat.git
Installation
The installation of ZMat is no different from any other simple
MATLAB toolboxes. You only need to download/unzip the package
to a folder, and add the folder's path (that contains zmat.m and
the "private" folder) to MATLAB's path list by using the
following command:
addpath('/path/to/zmat');
For Octave, one needs to copy the zipmat.mat file inside the "octave
",
from the subfolder matching the OS into the "private
" subfolder.
If you want to add this path permanently, you need to type "pathtool
",
browse to the zmat root folder and add to the list, then click "Save".
Then, run "rehash
" in MATLAB, and type "which zmat
", if you see an
output, that means ZMax is installed for MATLAB/Octave.
If you use MATLAB in a shared environment such as a Linux server, the
best way to add path is to type
mkdir ~/matlab/
nano ~/matlab/startup.m
and type addpath('/path/to/zmax')
in this file, save and quit the editor.
MATLAB will execute this file every time it starts. For Octave, the file
you need to edit is ~/.octaverc
, where "~
" is your home directory.
Using ZMat
ZMat provides a single mex function, zipmat.mex*
-- for both compressing/encoding
or decompresing/decoding data streams. The help info of the function is shown
below
output=zmat(input)
or
[output, info]=zmat(input, iscompress, method)
output=zmat(input, info)
A portable data compression/decompression toolbox for MATLAB/GNU Octave
author: Qianqian Fang <q.fang at neu.edu>
initial version created on 04/30/2019
input:
input: a char, non-complex numeric or logical vector or array
iscompress: (optional) if iscompress is 1, zmat compresses/encodes the input,
if 0, it decompresses/decodes the input. Default value is 1.
if one defines iscompress as the info struct (2nd output of
zmat) during encoding, zmat will perform a
decoding/decompression operation and recover the original
input using the info stored in the info structure.
method: (optional) compression method, currently, zmat supports the below methods
'zlib': zlib/zip based data compression (default)
'gzip': gzip formatted data compression
'lzip': lzip formatted data compression
'lzma': lzma formatted data compression
'lz4': lz4 formatted data compression
'lz4hc':lz4hc (LZ4 with high-compression ratio) formatted data compression
'base64': encode or decode use base64 format
output:
output: a uint8 row vector, storing the compressed or decompressed data;
empty when an error is encountered
info: (optional) a struct storing additional info regarding the input data, may have
'type': the class of the input array
'size': the dimensions of the input array
'byte': the number of bytes per element in the input array
'method': a copy of the 3rd input indicating the encoding method
'status': the zlib/lzma/lz4 compression/decompression function return value,
including potential error codes; see documentation of the respective
libraries for details
example:
[ss, info]=zmat(eye(5))
orig=zmat(ss,0)
orig=zmat(ss,info)
ss=char(zmat('zmat test',1,'base64'))
orig=char(zmat(ss,0,'base64'))
-- this function is part of the zmat toolbox (http://github.com/fangq/zmat)
examples
Under the "example"
folder, you can find a demo script showing the
basic utilities of ZMat. Running the "demo_zmat_basic.m"
script,
you can see how to compress/decompress a simple array, as well as apply
base64 encoding/decoding to strings.
Please run these examples and understand how ZMat works before you use
it to process your data.
Compile ZMat
To recompile ZMat, you first need to check out ZMat source code, along
with the needed submodules from the Github repository using the below
command
git clone --recursive https://github.com/fangq/zmat.git zmat
Next, you need to make sure your system has cmake
, gcc
, g++
,
mex
and mkoctfile
(if compiling for Octave is needed). If not,
please install CMake, gcc, MATLAB and GNU Octave and add the paths to
these utilities to the system PATH environment variable.
The first step of compilation is to compile Eazylzma (https://github.com/lloyd/easylzma),
a submodule that zmat needs to apply lzma compression.
Please use the below commands in a terminal window
cd zmat/src/eazylzma
cmake .
make clean all
if there is any dependency is missing, please install and rerun the compilation.
If successful, a static library named zmat/src/easylzma/easylzma-0.0.8/lib/libeasylzma_s.a
is generated.
The next step is to compile zmat. You may choose one of the two methods:
Method 1: please open MATLAB or Octave, and run the below commands
cd zmat/src
compilezmat
Method 2: please open a terminal, and run the below shall commands
cd zmat/src
make clean mex
to create the mex file for MATLAB, and run make clean oct
to compile
the mex file for Octave.
The compilex mex files are named as zipmat.mex*
under the zmat root folder.
One may move those into the private
folder to overwrite the existing files,
or leave them in the root folder. MATLAB/Octave will use these files when
zmat
is called.
Contribution and feedback
ZMat is an open-source project. This means you can not only use it and modify
it as you wish, but also you can contribute your changes back to JSONLab so
that everyone else can enjoy the improvement. For anyone who want to contribute,
please download JSONLab source code from its source code repositories by using the
following command:
git clone --recursive https://github.com/fangq/zmat.git zmat
or browsing the github site at
https://github.com/fangq/zmat
You can make changes to the files as needed. Once you are satisfied with your
changes, and ready to share it with others, please submit your changes as a
"pull request" on github. The project maintainer, Dr. Qianqian Fang will
review the changes and choose to accept the patch.
We appreciate any suggestions and feedbacks from you. Please use the iso2mesh
mailing list to report any questions you may have regarding ZMat:
iso2mesh-users <https://groups.google.com/forum/#!forum/iso2mesh-users>
_
(Subscription to the mailing list is needed in order to post messages).
Acknowledgement
ZMat is linked against 4 open-source data compression libraries
- ZLib library: https://www.zlib.net/
- Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
- License: Zlib license
- Eazylzma: https://github.com/lloyd/easylzma
- Author: Lloyd Hilaiel (lloyd)
- License: public domain
- Original LZMA library:
- Author: Igor Pavlov
- License: public domain
- LZ4 library: https://lz4.github.io/lz4/
- Copyright (C) 2011-2019, Yann Collet.
- License: BSD 2-Clause Licen...
ZMat v0.8 (Codename: Mox-the-fox)
= Change Log =
== ZMAT 0.8.0 (Mox-the-fox), FangQ <q.fang (a) neu.edu> ==
2019-07-11 [177ed52] move mex to private/, zmat.m can pre/post process, accept nd-array and logical, can restore array size/type
2019-07-11 [0412419] change makefile to compile both mex and library
2019-06-24 [274ce37] compile zmat on octave 5
2019-06-24 [a662701] update in-matlab compile script
2019-06-23 [68f35d0] place functions into a separate unit for libzmat.a
2019-06-03 [14a84a5] update changelog to add lzma support
2019-05-07 [27a8583] make lzma optional in compilation, use static library
2019-05-06 [3d8de61] support lzma compression via easylzma, close #1
ZMat v0.5 (Codename: Zac-the-rat)
= Change Log =
== ZMAT 0.5.0 (Zac-the-rat), FangQ <q.fang (a) neu.edu> ==
2019-05-04 [ ] tag and release v0.5.0
2019-05-04 [d8cd440] apply patch to compile on newer matlab and octave
2019-05-04 [bd099b9] handle large inflate output with dynamic buffer, compile with 1 command
2019-05-03 [86a0dea] return the zlib return value for debugging
2019-05-03 [f204eb4] add README
2019-05-02 [e3c2ae1] function is fully compatible with octave
2019-05-02 [d48a771] avoid windows mex error
2019-05-02 [ed388d7] zmat now supports base64 encoding and decoding
2019-05-01 [545876c] add help file
2019-05-01 [5ab9a67] compile zmat on mac
2019-05-01 [396cb6f] zmat now supports gnu octave on Linux
2019-05-01 [d6a48c6] now integrated with jsonlab
2019-05-01 [3c42350] first working version, both zipping and unzipping
2019-05-01 [9300e18] rename project to zmat
2019-04-30 [93b0a77] Initial commit