--- a +++ b/functions/@eegobj/subsasgn.m @@ -0,0 +1,68 @@ +function this = subsasgn(this,index,c) + + if isempty(this) + this = eegobj; + end + + % multiple dataset + if strcmpi(index(1).type, '()') && length(index) == 1 % dataset assignment + if isempty(c) % suppression + this(index.subs{1}) = []; + else + % create empty structures if necessary + % not optimized for speed but compatible Octave 3.4 and Matlab + allfieldsori = fieldnames( this ); + allSetIndices = [ [(length(this)+1):(min(index.subs{1})-1)] index.subs{1} ]; + this(max(index.subs{1})) = this(1); + for j = 1:length(allfieldsori) + for i = allSetIndices + this(i).EEG.(allfieldsori{j}) = []; + end + end + + % create empty structure, replaces the code above but + % only compatible under Matlab + %allfieldsori = fieldnames( this ); + %tmpfields = allfieldsori; + %tmpfields(:,2) = cell(size(tmpfields)); + %tmpfields = tmpfields'; + %tmp = struct(tmpfields{:}) + %this(index.subs{1}) = tmp; + + % dealing with input object and making it a compatible + % structure + if isa(c, 'eegobj') + c2 = struct(c); + c = c2(1).EEG; + fieldorder = fieldnames(c); + for cIndexe = 2:length(c2) + c(cIndexe) = orderfields(c2(cIndexe).EEG, fieldorder); + end + end + + allfields = fieldnames( c ); + for i=1:length( allfields ) + for j = 1:length(index.subs{1}) + this(index.subs{1}(j)).EEG.(allfields{i}) = c(min(j, length(c))).(allfields{i}); + end + %this(index.subs(1)).EEG = setfield(this(index.subs(1)).EEG, getfield(c, allfields{i}), allfields{i}); + %eval( ['this(' int2str(index.subs{1}) ').' allfields{i} ' = c.' allfields{i} ';' ]); + end; + %if ~isfield(c, 'datfile') & isfield(this, 'datfile') + % this(index.subs{1}).datfile = ''; + %end + end + elseif strcmpi(index(1).type, '()') + if length(index(1).subs{1}) > 1 + error('Unsuported object feature - a.field or a([x y]).field is not supported for object arrays'); + elseif length(this) < index(1).subs{1} + this(index(1).subs{1}) = eegobj; + end + this(index(1).subs{1}).EEG = builtin('subsasgn', this(index(1).subs{1}).EEG, index(2:end), c); + elseif strcmpi(index(1).type, '.') + if length(this) > 1 + error('Unsuported object feature - a.field or a([x y]).field is not supported for object arrays'); + else + this.EEG = builtin('subsasgn', this.EEG, index, c); + end + end