function UpdStructure = pls_updstruct(OldStructure, NewStructure)
%
% 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, serguei@ph.tn.tudelft.nl
% Faculty of Applied Sciences, Delft University of Technology
% P.O. Box 5046, 2600 GA Delft, The Netherlands

UpdStructure = OldStructure;
if nargin < 2 || isempty(NewStructure) || ~isstruct(NewStructure)
  return;
end

fn = fieldnames(NewStructure);
for i=1:length(fn)
  v = getfield(NewStructure,fn{i});

  if isa(v,'struct'); 
    if isfield(UpdStructure, fn{i}) 
      w = getfield(UpdStructure, fn{i});  
      if isa(w,'struct')
        v = updstruct(w,v); 
      end  
    end
  end 
  
  UpdStructure = setfield(UpdStructure,fn{i},v);
end

return;

