Mercurial > hg > camir-aes2014
diff toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/subsasgn.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolboxes/MIRtoolbox1.3.2/MIRToolbox/@mirstruct/subsasgn.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,60 @@ +function a = subsasgn(a,index,val) +% SUBSASGN Define index assignment for mirstruct objects +switch index(1).type +case '.' + if strcmpi(index(1).subs,'tmp') + fields = a.fields; + data = a.data; + + if isa(val,'mirdata') || (iscell(val) && isa(val{1},'mirdata')) + % If the 'tmp' data turns to be an actual evaluated data, + % the mirstruct object is transformed into a simple struct. + a = struct; + for i = 1:length(fields) + a.(fields{i}) = data{i}; + end + a.tmp.(index(2).subs) = val; + return + end + + if isa(val,'mirdesign') + val = set(val,'Stored',{index.subs}); + end + if length(index)>2 + if strcmpi(index(3).type,'{}') + isubs = index(3).subs; + if length(isubs)>1 + a.tmp.(index(2).subs){isubs{1},isubs{2}} = val; + else + a.tmp.(index(2).subs){isubs{1}} = val; + end + end + else + a.tmp.(index(2).subs) = val; + end + aa = struct; + aa.fields = fields; + aa.data = data; + aa.tmp = a.tmp; + aa.stat = a.stat; + a = class(aa,'mirstruct',val); + return + end + [is,id] = ismember(index(1).subs,a.fields); + if not(is) + a.fields{end+1} = index(1).subs; + a.data{end+1} = []; + id = length(a.fields); + end + if length(index) == 1 + a.data{id} = val; + else + a.data{id} = subsasgn(a.data{id},index(2:end),val); + end + if get(val,'NoChunk') && isframed(a) + a = set(a,'FrameDontChunk',1); + % Frame-decomposed flowchart where one dependent variable requires + % a complete computation. Should not therefore be evaluated + % chunk after chunk. + end +end \ No newline at end of file