Contents

     clear all;

numbers

create RUDE input

     rlen = [0 nan  2 2  3 inf -inf   2];
     rval = [3   4 -5 6 -7   8    9 -10];

run-length decoding

     vec = rude(rlen,rval)
 
vec = -5  -5  6  6  -7  -7  -7  -10  -10
 

run-length encoding

     [len,val] = rude(vec)
 
len =  2  2  3   2
val = -5  6 -7 -10
 

strings

run-length decoding

     vec = rude([2 3 3 2],'aBBc')
 
vec = aaBBBBBBcc
 

run-length encoding

     [len,val] = rude(vec)
 
len = 2  6  2
val = aBc
 

cells

create test structures

     s.x = pi;
     t.x = pi; % note <s> and <t> are equal!
     u.y = pi;

create RUDE input

     rlen = [nan 1 0    3 3,...
               2 3 2    1 2,...
               2 2 2 -inf 2];
     rval = {0 'a' 'bb' 'ccc' magic(3) 1:3 (1:3).',...
             pi*(1:3) 3:-1:1 1:3 s t u pi 'dddd'};

use subroutines

     rs = rude;

run-length decoding

     vec = rs.d(rlen,rval)
 
vec = 
  'a'  'ccc'  'ccc'  'ccc'  [3x3 D]  [3x3 D]
  [3x3 D]  [1x3 D]  [1x3 D]  [3x1 D]
  [3x1 D]  [3x1 D]  [1x3 D]  [1x3 D]
  [1x3 D]  [1x3 D]  [1x3 D]  [1x1 S]
  [1x1 S]  [1x1 S]  [1x1 S]  [1x1 S]
  [1x1 S]  'dddd'  'dddd'
 

run-length encoding

     [len,val] = rs.e(vec);

show results

  • note handling of <NAN>s and <INF>s
     rlenin   = rlen
     rlenused = rlen(rlen>0)
     rlenout  = len
 
rlenin   = NaN  1  0  3  3  2  3  2  1  2  2  2  2  -Inf  2
rlenused =      1     3  3  2  3  2  1  2  2  2  2        2
rlenout  =      1     3  3  2  3  2  1  2  4     2        2
 
  • show <VAL>s
for  i = 1:length(val)
     disp(sprintf('---- value %2d [%2d x %s]',...
          i,len(i),class(val{i})));
     disp(val{i});
end
 
---- value  1 [ 1 x char]
            a
---- value  2 [ 3 x char]
            ccc
---- value  3 [ 3 x double]
            8  1  6
            3  5  7
            4  9  2
---- value  4 [ 2 x double]
            1  2  3
---- value  5 [ 3 x double]
            1
            2
            3
---- value  6 [ 2 x double]
            3.1416    6.2832    9.4248
---- value  7 [ 1 x double]
            3  2  1
---- value  8 [ 2 x double]
            1  2  3
---- value  9 [ 4 x struct]
            x: 3.1416
---- value 10 [ 2 x struct]
            y: 3.1416
---- value 11 [ 2 x char]
            dddd