ECG-Kit 1.0
(1,408 bytes)
function UpdStructure = updstruct(OldStructure, NewStructure, SkipEmptyUpdatesOfTheExistingFields)
%
% Structure update
%
% UpdStructure = updstruct(OldStructure, NewStructure)
%
% In the result UpdStructure all new filed from NewStructure will be added,
% coinciding fields will be replaced, fields which do not exist in the NewStruct
% will be preserved
% Copyright: S.Verzakov, s.verzakov@tudelft.nl
if nargin < 3 | isempty(SkipEmptyUpdatesOfTheExistingFields)
SkipEmptyUpdatesOfTheExistingFields = 0;
end
if nargin < 2
NewStructure = [];
end
if ~isempty(NewStructure) & (~isstruct(NewStructure) | length(NewStructure) ~=1)
error('NewStructure parameter has to be a structure (of length 1) or be empty');
end
if ~isstruct(OldStructure) | length(OldStructure) ~=1
error('OldStructure parameter has to be a structure (of length 1)');
end
UpdStructure = OldStructure;
if isempty(NewStructure)
return;
end
fn = fieldnames(NewStructure);
for i=1:length(fn)
v = getfield(NewStructure,fn{i});
if ~(SkipEmptyUpdatesOfTheExistingFields & isfield(UpdStructure, fn{i}) & isempty(v))
if isa(v,'struct') & length(v) == 1
if isfield(UpdStructure, fn{i})
w = getfield(UpdStructure, fn{i});
if isa(w,'struct') & length(w) == 1
v = updstruct(w,v);
end
end
end
UpdStructure = setfield(UpdStructure,fn{i},v);
end
end
return;