Skip to content

Commit 398539d

Browse files
committed
reoptimize for speed
1 parent b5cfba1 commit 398539d

File tree

8 files changed

+105
-83
lines changed

8 files changed

+105
-83
lines changed

decodevarname.m

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,18 @@
3030
% License: GPLv3 or 3-clause BSD license, see https://github.com/fangq/easyh5 for details
3131
%
3232

33-
isunpack=jsonopt('UnpackHex',1,varargin{:});
3433
newname=name;
35-
if(isempty(regexp(name,'0x([0-9a-fA-F]+)_','once')))
36-
return
34+
isunpack=1;
35+
if(nargin==2 && ~isstruct(varargin{1}))
36+
isunpack=varargin{1};
37+
elseif(nargin>1)
38+
isunpack=jsonopt('UnpackHex',1,varargin{:});
3739
end
40+
3841
if(isunpack)
42+
if(isempty(regexp(name,'0x([0-9a-fA-F]+)_','once')))
43+
return
44+
end
3945
if(exist('native2unicode','builtin'))
4046
h2u=@hex2unicode;
4147
newname=regexprep(name,'(^x|_){1}0x([0-9a-fA-F]+)_','${h2u($2)}');

encodevarname.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
% License: GPLv3 or 3-clause BSD license, see https://github.com/fangq/easyh5 for details
3838
%
3939

40-
if(~isempty(regexp(str,'^[^A-Za-z]','once')))
40+
if(~isvarname(str(1)))
4141
if(exist('unicode2native','builtin'))
4242
str=regexprep(str,'^([^A-Za-z])','x0x${sprintf(''%X'',unicode2native($1))}_','once');
4343
else

jdatadecode.m

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,12 @@
5454
%
5555

5656
newdata=data;
57-
opt=varargin2struct(varargin{:});
57+
opt=struct;
58+
if(nargin==2)
59+
opt=varargin{1};
60+
elseif(nargin>2)
61+
opt=varargin2struct(varargin{:});
62+
end
5863

5964
%% process non-structure inputs
6065
if(~isstruct(data))
@@ -75,8 +80,8 @@
7580
len=length(data);
7681
needbase64=jsonopt('Base64',0,opt);
7782
format=jsonopt('FormatVersion',2,opt);
78-
prefix=jsonopt('Prefix',sprintf('x0x%X','_'+0),opt);
79-
if(~any(ismember(N_('_ArrayType_'),fn)) && any(ismember('x_ArrayType_',fn)))
83+
prefix=jsonopt('Prefix','x0x5F',opt);
84+
if(~isfield(data,N_('_ArrayType_')) && isfield(data,'x_ArrayType_'))
8085
prefix='x';
8186
opt.prefix='x';
8287
end
@@ -95,15 +100,15 @@
95100
end
96101

97102
%% handle array data
98-
if(any(ismember(N_('_ArrayType_'),fn)) && (any(ismember(N_('_ArrayData_'),fn)) || any(ismember(N_('_ArrayZipData_'),fn))))
103+
if(isfield(data,N_('_ArrayType_')) && (isfield(data,N_('_ArrayData_')) || isfield(data,N_('_ArrayZipData_'))))
99104
newdata=cell(len,1);
100105
for j=1:len
101-
if(any(ismember(N_('_ArrayZipSize_'),fn)) && any(ismember(N_('_ArrayZipData_'),fn)))
106+
if(isfield(data,N_('_ArrayZipSize_')) && isfield(data,N_('_ArrayZipData_')))
102107
zipmethod='zip';
103-
if(any(ismember(N_('_ArrayZipType_'),fn)))
108+
if(isfield(data,N_('_ArrayZipType_')))
104109
zipmethod=data(j).(N_('_ArrayZipType_'));
105110
end
106-
if(any(ismember(zipmethod,{'zlib','gzip','lzma','lzip','lz4','lz4hc'})))
111+
if(~isempty(strmatch(zipmethod,{'zlib','gzip','lzma','lzip','lz4','lz4hc'})))
107112
decompfun=str2func([zipmethod 'decode']);
108113
if(needbase64)
109114
ndata=reshape(typecast(decompfun(base64decode(data(j).(N_('_ArrayZipData_')))),data(j).(N_('_ArrayType_'))),data(j).(N_('_ArrayZipSize_'))(:)');
@@ -119,18 +124,18 @@
119124
end
120125
ndata=cast(data(j).(N_('_ArrayData_')),char(data(j).(N_('_ArrayType_'))));
121126
end
122-
if(any(ismember(N_('_ArrayZipSize_'),fn)))
127+
if(isfield(data,N_('_ArrayZipSize_')))
123128
ndata=reshape(ndata(:),fliplr(data(j).(N_('_ArrayZipSize_'))(:)'));
124129
ndata=permute(ndata,ndims(ndata):-1:1);
125130
end
126131
iscpx=0;
127-
if(any(ismember(N_('_ArrayIsComplex_'),fn)))
132+
if(isfield(data,N_('_ArrayIsComplex_')))
128133
if(data(j).(N_('_ArrayIsComplex_')))
129134
iscpx=1;
130135
end
131136
end
132-
if(any(ismember(N_('_ArrayIsSparse_'),fn)) && data(j).(N_('_ArrayIsSparse_')))
133-
if(any(ismember(N_('_ArraySize_'),fn)))
137+
if(isfield(data,N_('_ArrayIsSparse_')) && data(j).(N_('_ArrayIsSparse_')))
138+
if(isfield(data,N_('_ArraySize_')))
134139
dim=double(data(j).(N_('_ArraySize_'))(:)');
135140
if(iscpx)
136141
ndata(end-1,:)=complex(ndata(end-1,:),ndata(end,:));
@@ -154,7 +159,7 @@
154159
end
155160
ndata=sparse(ndata(1,:),ndata(2,:),ndata(3,:));
156161
end
157-
elseif(any(ismember(N_('_ArraySize_'),fn)))
162+
elseif(isfield(data,N_('_ArraySize_')))
158163
if(iscpx)
159164
ndata=complex(ndata(1,:),ndata(2,:));
160165
end
@@ -175,7 +180,7 @@
175180
end
176181

177182
%% handle table data
178-
if(any(ismember(N_('_TableRecords_'),fn)))
183+
if(isfield(data,N_('_TableRecords_')))
179184
newdata=cell(len,1);
180185
for j=1:len
181186
ndata=data(j).(N_('_TableRecords_'));
@@ -205,7 +210,7 @@
205210
end
206211

207212
%% handle map data
208-
if(any(ismember(N_('_MapData_'),fn)))
213+
if(isfield(data,N_('_MapData_')))
209214
newdata=cell(len,1);
210215
for j=1:len
211216
key=cell(1,length(data(j).(N_('_MapData_'))));
@@ -223,7 +228,7 @@
223228
end
224229

225230
%% handle graph data
226-
if(any(ismember(N_('_GraphNodes_'),fn)) && exist('graph','file') && exist('digraph','file'))
231+
if(isfield(data,N_('_GraphNodes_')) && exist('graph','file') && exist('digraph','file'))
227232
newdata=cell(len,1);
228233
isdirected=1;
229234
for j=1:len
@@ -241,12 +246,12 @@
241246
nodetable=table;
242247
end
243248

244-
if(any(ismember(N_('_GraphEdges_'),fn)))
249+
if(isfield(data,N_('_GraphEdges_')))
245250
edgedata=data(j).(N_('_GraphEdges_'));
246-
elseif(any(ismember(N_('_GraphEdges0_'),fn)))
251+
elseif(isfield(data,N_('_GraphEdges0_')))
247252
edgedata=data(j).(N_('_GraphEdges0_'));
248253
isdirected=0;
249-
elseif(any(ismember(N_('_GraphMatrix_'),fn)))
254+
elseif(isfield(data,N_('_GraphMatrix_')))
250255
edgedata=jdatadecode(data(j).(N_('_GraphMatrix_')),varargin{:});
251256
end
252257

@@ -273,7 +278,7 @@
273278
end
274279

275280
%% handle bytestream and arbitrary matlab objects
276-
if(sum(ismember({N_('_ByteStream_'),N_('_DataInfo_')},fn))==2)
281+
if(isfield(data,N_('_ByteStream_')) && isfield(data,N_('_DataInfo_'))==2)
277282
newdata=cell(len,1);
278283
for j=1:len
279284
if(isfield(data(j).(N_('_DataInfo_')),'MATLABObjectClass'))

jsonopt.m

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@
2525
if(nargin<=2)
2626
return;
2727
end
28+
key0=lower(key);
2829
opt=varargin{1};
2930
if(isstruct(opt))
30-
if(isfield(opt,key))
31+
if(isfield(opt,key0))
32+
val=opt.(key0);
33+
elseif(isfield(opt,key))
3134
val=opt.(key);
32-
elseif(isfield(opt,lower(key)))
33-
val=opt.(lower(key));
3435
end
3536
end

loadjson.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,10 @@
130130
data=data{1};
131131
end
132132

133+
if(jsonopt('JDataDecode',1,varargin{:})==1)
134+
data=jdatadecode(data,'Base64',1,'Recursive',1,varargin{:});
135+
end
136+
133137
if(isfield(opt,'progressbar_'))
134138
close(opt.progressbar_);
135139
end
@@ -425,10 +429,6 @@
425429
end
426430
end
427431
pos=parse_char(inputstr, pos, '}');
428-
if(jsonopt('JDataDecode',1,varargin{:})==1)
429-
varargin{:}.Recursive=0;
430-
object=jdatadecode(object,'Base64',1,varargin{:});
431-
end
432432
end
433433

434434
%%-------------------------------------------------------------------------

loadubjson.m

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@
9292
if(jsoncount==1 && iscell(data))
9393
data=data{1};
9494
end
95+
96+
if(jsonopt('JDataDecode',1,varargin{:})==1)
97+
data=jdatadecode(data,'Base64',0,'Recursive',1,varargin{:});
98+
end
9599
end
96100

97101
%%-------------------------------------------------------------------------
@@ -338,9 +342,6 @@
338342
if(count==-1)
339343
pos=parse_char(inputstr, pos, '}');
340344
end
341-
if(isstruct(object))
342-
object=jdatadecode(object,'Recursive',0, 'Base64',0,varargin{:});
343-
end
344345
end
345346

346347
%%-------------------------------------------------------------------------

mergestruct.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
end
2828
fn=fieldnames(s2);
2929
s=s1;
30-
for i=1:length(fn)
31-
s=setfield(s,fn{i},getfield(s2,fn{i}));
30+
for i=1:length(fn)
31+
s.(fn{i})=s2.(fn{i});
3232
end
3333

0 commit comments

Comments
 (0)