From 4bf823280b2dae588b2d5d97bacdbe356920e6be Mon Sep 17 00:00:00 2001 From: Qianqian Fang Date: Fri, 27 Oct 2023 12:22:21 -0400 Subject: [PATCH] add NO_ZMAT flag, fix fread issue --- Contents.m | 2 +- INDEX | 2 +- gzipdecode.m | 3 +-- gzipencode.m | 3 +-- octavezz.m => octavezmat.m | 47 +++++++++++++++++++++++++++++--------- zlibdecode.m | 4 ++-- zlibencode.m | 3 +-- 7 files changed, 43 insertions(+), 21 deletions(-) rename octavezz.m => octavezmat.m (76%) diff --git a/Contents.m b/Contents.m index ff4da02..831a4bd 100644 --- a/Contents.m +++ b/Contents.m @@ -34,7 +34,7 @@ % match_bracket - [endpos, maxlevel] = match_bracket(str,startpos,brackets) % mergestruct - s=mergestruct(s1,s2) % nestbracket2dim - [dims, isndarray, maxlevel, count] = nestbracket2dim(str,brackets) -% octavezz - output = octavezz(input, iscompress, zipmethod) +% octavezmat - output = octavezmat(input, iscompress, zipmethod) % savebj - bjd=savebj(obj) % savejd - savejd(rootname, obj, outputfile) % savejson - json=savejson(obj) diff --git a/INDEX b/INDEX index ab7581b..f18fd9a 100644 --- a/INDEX +++ b/INDEX @@ -37,7 +37,7 @@ Compression and Decompression lzmaencode zlibdecode zlibencode - octavezz + octavezmat Helper Functions decodevarname encodevarname diff --git a/gzipdecode.m b/gzipdecode.m index 696f24f..cbab145 100644 --- a/gzipdecode.m +++ b/gzipdecode.m @@ -44,8 +44,7 @@ end return; elseif(isoctavemesh) - warning('You are recommended to install the ZMat toolbox (http://github.com/NeuroJSON/zmat) to use this function in Octave'); - [varargout{1:nargout}]=octavezz(varargin{1}, 0, 'gzip'); + [varargout{1:nargout}]=octavezmat(varargin{1}, 0, 'gzip'); return; end error(javachk('jvm')); diff --git a/gzipencode.m b/gzipencode.m index 6f715d7..685b061 100644 --- a/gzipencode.m +++ b/gzipencode.m @@ -40,8 +40,7 @@ [varargout{1:nargout}]=zmat(varargin{1},1,'gzip'); return; elseif(isoctavemesh) - warning('You are recommended to install the ZMat toolbox (http://github.com/NeuroJSON/zmat) to use this function in Octave'); - [varargout{1:nargout}]=octavezz(varargin{1}, 1, 'gzip'); + [varargout{1:nargout}]=octavezmat(varargin{1}, 1, 'gzip'); return; end diff --git a/octavezz.m b/octavezmat.m similarity index 76% rename from octavezz.m rename to octavezmat.m index 283eb6a..5ce48ca 100644 --- a/octavezz.m +++ b/octavezmat.m @@ -1,14 +1,14 @@ -function varargout=octavezz(data, iscompress, zipmethod) +function varargout=octavezmat(data, iscompress, zipmethod) % -% output = octavezz(input, iscompress, zipmethod) +% output = octavezmat(input, iscompress, zipmethod) % or -% [output, info] = octavezz(input, iscompress, zipmethod) -% unzipdata = octavezz(zipdata, info) +% [output, info] = octavezmat(input, iscompress, zipmethod) +% unzipdata = octavezmat(zipdata, info) % % Compress or decompress zlib and gzip memory buffers using zip/unzip/gzip/gunzip on Octave -% in case ZMat toolbox (http://github.com/NeuroJSON/zmat) was not installed (ZMat will be much faster) +% in case ZMat toolbox (http://github.com/NeuroJSON/zmat) was not installed (ZMat is much faster) % -% Copyright (c) 2023, Qianqian Fang (q.fang neu.edu) +% Author: Qianqian Fang (q.fang neu.edu) % % input: % input: the input data (can be either compressed or before compression), @@ -46,8 +46,9 @@ % level, see above % % examples: -% [ss,info]=octavezz(ones(10)) -% orig=octavezz(ss,info) +% NO_ZMAT=1 % by setting this flag to 1 in the caller or global workspace, octavezmat won't warn zmat is missing +% [ss,info]=octavezmat(ones(10)) +% orig=octavezmat(ss,info) % % license: % BSD or GPL version 3, see LICENSE_{BSD,GPLv3}.txt files for details @@ -55,8 +56,14 @@ % -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) % +nowarning = getvarfrom({'caller', 'base'},'NO_ZMAT'); + +if(isempty(nowarning) || nowarning == 0) + warning('You are recommended to install ZMat (http://github.com/NeuroJSON/zmat) get much faster speed in Octave'); +end + if(nargin < 1) - fprintf(1,'Format: output = octavezz(data, iscompress, zipmethod)\n'); + fprintf(1,'Format: output = octavezmat(data, iscompress, zipmethod)\n'); return; end @@ -73,6 +80,14 @@ iscompress = 0; end +if (~(ischar(data) || islogical(data) || (isnumeric(data) && isreal(data)))) + error('input must be a char, non-complex numeric or logical vector or N-D array'); +end + +if (ischar(data)) + data = uint8(data); +end + fname=tempname; tmpfile=fname; outputfile=fname; @@ -91,7 +106,8 @@ if(~fd) error('unable to create temporary file'); end -fwrite(fd, data, 'uint8'); + +fwrite(fd, typecast(data(:), 'uint8'), 'uint8'); fclose(fd); if(iscompress) @@ -113,13 +129,22 @@ end end +if(exist(tmpfile, 'file')) + delete(tmpfile); +end + fd=fopen(outputfile, 'rb'); if(~fd) error('failed to unzip buffer'); end -varargout{1}=fread(fd, [1 inf], 'uint8'); +varargout{1}=fread(fd, [1 inf], 'uint8=>uint8'); fclose(fd); + +if(exist(outputfile, 'file')) + delete(outputfile); +end + if(nargout>1) varargout{2}=struct('type',class(data),'size',size(data),'method',zipmethod,'status',0, 'level', iscompress); end diff --git a/zlibdecode.m b/zlibdecode.m index 7100648..519f1c6 100644 --- a/zlibdecode.m +++ b/zlibdecode.m @@ -45,10 +45,10 @@ end return; elseif(isoctavemesh) - warning('You are recommended to install the ZMat toolbox (http://github.com/NeuroJSON/zmat) to use this function in Octave'); - [varargout{1:nargout}]=octavezz(varargin{1}, 0, 'zlib'); + [varargout{1:nargout}]=octavezmat(varargin{1}, 0, 'zlib'); return; end + error(javachk('jvm')); if(ischar(varargin{1})) diff --git a/zlibencode.m b/zlibencode.m index 3dc23f2..3d833d8 100644 --- a/zlibencode.m +++ b/zlibencode.m @@ -39,8 +39,7 @@ [varargout{1:nargout}]=zmat(varargin{1},1,'zlib'); return; elseif(isoctavemesh) - warning('You are recommended to install the ZMat toolbox (http://github.com/NeuroJSON/zmat) to use this function in Octave'); - [varargout{1:nargout}]=octavezz(varargin{1}, 1, 'zlib'); + [varargout{1:nargout}]=octavezmat(varargin{1}, 1, 'zlib'); return; end