Skip to content

Commit da0bdee

Browse files
committed
[feat] support bjdata draft 3 optimized ND column-major array
1 parent 6f72eed commit da0bdee

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

loadbj.m

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@
247247
pos = parse_char(inputstr, pos, '[');
248248
object = cell(0, 1);
249249
dim = [];
250+
iscolumn = 0;
250251
type = '';
251252
count = -1;
252253
[cc, pos] = next_char(inputstr, pos);
@@ -263,6 +264,9 @@
263264
error_pos('ND array size specifier does not support embedding', inputstr, pos);
264265
end
265266
varargin{1}.noembedding_ = 1;
267+
if (pos + 1 < length(inputstr) && inputstr(pos + 1) == '[')
268+
iscolumn = 1;
269+
end
266270
[dim, pos] = parse_array(inputstr, pos, varargin{:});
267271
count = prod(double(dim));
268272
varargin{1}.noembedding_ = 0;
@@ -275,7 +279,11 @@
275279
if (count >= 0)
276280
[object, adv] = parse_block(inputstr, pos, type, count, varargin{:});
277281
if (~isempty(dim) && length(dim) > 1)
278-
object = permute(reshape(object, fliplr(dim(:)')), length(dim):-1:1);
282+
if (iscolumn == 0)
283+
object = permute(reshape(object, fliplr(dim(:)')), length(dim):-1:1);
284+
else
285+
object = reshape(object, dim);
286+
end
279287
end
280288
pos = pos + adv;
281289
return

test/run_jsonlab_test.m

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,9 @@ function run_jsonlab_test(tests)
241241
'[{U<1>iD<1.1>U<1>dSU<3>str}{U<1>iD<1.1>U<1>dSU<3>str}]', 'debug', 1);
242242
test_jsonlab('encoded fieldnames', @savebj, struct(encodevarname('_i'), 1, encodevarname('i_'), 'str'), ...
243243
'{U<2>_iU<1>U<2>i_SU<3>str}', 'debug', 1);
244+
test_jsonlab('optimized 2D row-major array', @savebj, loadbj(['[$i#[$U#U' 2 2 3 61 62 65 66 67 68]), '[$U#[$U#U<2><2><3><61><62><65><66><67><68>', 'debug', 1);
245+
test_jsonlab('optimized 2D column-major array', @savebj, loadbj(['[$U#[[$U#U' 2 2 3 ']' 61 62 65 66 67 68]), '[$U#[$U#U<2><2><3><61><65><67><62><66><68>', 'debug', 1);
246+
244247
test_jsonlab('single byte', @savebj, loadbj(['B' 65]), 'C<65>', 'debug', 1);
245248
test_jsonlab('byte 1D vector', @savebj, loadbj(['[$B#U' 3 61 62 65]), 'SU<3>=>A', 'debug', 1);
246249
test_jsonlab('optimized byte 1D vector', @savebj, loadbj(['[$B#[$U#U' 1 4 61 62 65 66]), 'SU<4>=>AB', 'debug', 1);

0 commit comments

Comments
 (0)