Mercurial > hg > aimmat
view aim-mat/tools/mixstruct.m @ 0:74dedb26614d
Initial checkin of AIM-MAT version 1.5 (6.4.2011).
author | tomwalters |
---|---|
date | Fri, 20 May 2011 12:32:31 +0100 |
parents | |
children | 20ada0af3d7d |
line wrap: on
line source
% support file for 'aim-mat' % % This external file is included as part of the 'aim-mat' distribution package % http://www.pdn.cam.ac.uk/cnbh/aim2006 % $Date: 2008-06-10 18:00:16 +0100 (Tue, 10 Jun 2008) $ % $Revision: 585 $ function new_struct=mixstruct(old_struct,add_struct) % old_struct is the original structure % add_struct is the new struct % entries that are double are overwritten by the entry in add_struct % works only for the first recursion level newstructs=fieldnames(add_struct); % copy all old stuff new_struct=old_struct; for i=1:length(newstructs) curr_str=newstructs{i}; % if ~strcmp(curr_col,'signal') % if ~isfield(old_struct,curr_str) % add whole new fields from the new struct est=sprintf('new_struct.%s=add_struct.%s;',curr_str,curr_str); eval(est); % else % its already there, but not neccessarily up to date % eval(sprintf('old_columns=old_struct.%s;',curr_col)); % eval(sprintf('new_columns=add_struct.%s;',curr_col)); % old_modules=fieldnames(old_columns); % new_modules=fieldnames(new_columns); % end end % for i=1:length(newcolumns) % curr_col=newcolumns{i}; % % if ~strcmp(curr_col,'signal') % if ~isfield(old_struct,curr_col) % add whole new fields from the new struct % est=sprintf('new_struct.%s=add_struct.%s;',curr_col,curr_col); % eval(est); % else % its already there, but not neccessarily up to date % eval(sprintf('old_columns=old_struct.%s;',curr_col)); % eval(sprintf('new_columns=add_struct.%s;',curr_col)); % old_modules=fieldnames(old_columns); % new_modules=fieldnames(new_columns); % end % end % % % for j=1:length(new_modules) % if ~isfield(old_columns,new_modules{j}) % add whole new module % est=sprintf('new_struct.%s.%s=new_columns.%s;',curr_col,new_modules{j},new_modules{j}); % eval(est); % constr=sprintf('conflicts{%d}=''new module added: %s %s'';',conflict_counter,newcolumns{i},new_modules{j}); % eval(constr); % % conflict_counter=conflict_counter+1; % % else % both are there, but check the versions % % % if ~strcmp(newcolumns{i},'signal') && ~strcmp(newcolumns{i},'graphics') % % ver1str=sprintf('ver1=old_struct.%s.%s.revision;',newcolumns{i},new_modules{j}); % % try % old version % % eval(ver1str); % % [ver11,ver12]=ver2num(ver1); % % catch % % constr=sprintf('conflicts{%d}=''old module had no revision number: module: %s.%s'';',conflict_counter,newcolumns{i},new_modules{j}); % % eval(constr);conflict_counter=conflict_counter+1; % % % ver11='no version'; % % ver11=-1; % % ver12=-1; % % end % % ver2str=sprintf('ver2=add_struct.%s.%s.revision;',newcolumns{i},new_modules{j}); % % try % new version % % eval(ver2str); % % [ver21,ver22]=ver2num(ver2); % % catch % % ver2='no version'; % % constr=sprintf('conflicts{%d}=''loaded newer version on module: %s.%s (current version: no version)'';',conflict_counter,newcolumns{i},new_modules{j}); % % eval(constr);conflict_counter=conflict_counter+1; % % end % % % if isnumeric(ver11) && isnumeric(ver12) && isnumeric(ver21) && isnumeric(ver22) % % if ver21>ver11 || (ver21==ver11 && ver22>ver12) % % constr=sprintf('conflicts{%d}=''module %s.%s loaded with higher version number (old: %d.%d new: %d.%d)'';',conflict_counter,newcolumns{i},new_modules{j},ver11,ver12,ver21,ver22); % % eval(constr);conflict_counter=conflict_counter+1; % % end % % if ver21<ver11 || (ver21==ver11 && ver22<ver12) % % constr=sprintf('conflicts{%d}=''module %s.%s loaded with lower version number (old: %d.%d new: %d.%d)'';',conflict_counter,newcolumns{i},new_modules{j},ver11,ver12,ver21,ver22); % % % constr=sprintf('conflicts{%d}=''module loaded with lower version number: module: %s.%s revision %d.%d (current version: %d.%d )'';',conflict_counter,newcolumns{i},new_modules{j},ver11,ver12,ver21,ver22); % % eval(constr);conflict_counter=conflict_counter+1; % % end % % if ver21==ver11 && ver22==ver12 % % % constr=sprintf('conflicts{%d}=''no conflict: module: %s.%s revision %d.%d '';',conflict_counter,newcolumns{i},new_modules{j},ver11,ver12); % % % eval(constr);conflict_counter=conflict_counter+1; % % end % % end % % end % end % % % next to version checking is checking all parameters. If new % % % ones are there, add them! % % % but only, if the module is already there % % if isfield(old_columns,new_modules{j}) % % oldstr=sprintf('old_parameter=old_columns.%s;',new_modules{j}); % % eval(oldstr); % % newstr=sprintf('new_parameter=fieldnames(new_columns.%s);',new_modules{j}); % % eval(newstr); % % for k=1:length(new_parameter) % % if ~isfield(old_parameter,new_parameter{k}) % % addstr=sprintf('new_struct.%s.%s.%s=add_struct.%s.%s.%s;',newcolumns{i},new_modules{j},new_parameter{k},newcolumns{i},new_modules{j},new_parameter{k}); % % eval(addstr); % % valstr=sprintf('value=new_struct.%s.%s.%s;',newcolumns{i},new_modules{j},new_parameter{k}); % % eval(valstr); % % if isnumeric(value) % % value=num2str(value); % % end % % constr=sprintf('conflicts{%d}=''new parameter added to the module: %s.%s : %s=%s'';',conflict_counter,newcolumns{i},new_modules{j},new_parameter{k},value); % % eval(constr);conflict_counter=conflict_counter+1; % % end % % end % % end % end % end % end % % end %