mergestructs

PURPOSE ^

MERGESTRUCTS: merge structs where fields in later structs override earlier

SYNOPSIS ^

function s_out = mergestructs(s_in, varargin)

DESCRIPTION ^

 MERGESTRUCTS: merge structs where fields in later structs override earlier

 struct_out = mergestructs(base, struct1, struct2, ...)

 Example:
   s1 = struct('a',1,'b',2);
   s2 = struct('c',5,'b',3);
   mergestructs(s1,s2) => .a=1, .b=3, .c=3
 
 Note this only processes the top level of a struct tree

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function s_out = mergestructs(s_in, varargin)
0002 % MERGESTRUCTS: merge structs where fields in later structs override earlier
0003 %
0004 % struct_out = mergestructs(base, struct1, struct2, ...)
0005 %
0006 % Example:
0007 %   s1 = struct('a',1,'b',2);
0008 %   s2 = struct('c',5,'b',3);
0009 %   mergestructs(s1,s2) => .a=1, .b=3, .c=3
0010 %
0011 % Note this only processes the top level of a struct tree
0012 
0013 % $Id: mergestructs.m 7002 2024-11-24 13:11:35Z aadler $
0014 % (C) 2024 A Adler: License GPL v2 or v3
0015 
0016   if ischar(s_in) && strcmp(s_in,'UNIT_TEST'); do_unit_test; return; end
0017 
0018   s_out = s_in;
0019  
0020   for i = 1:length(varargin);
0021     ssi = varargin{i};
0022     if ~isstruct(ssi); error('Mergestructs: only struct args'); end
0023     for fn = fieldnames(ssi)'
0024       s_out.( fn{1} ) = ssi.( fn{1} ); 
0025     end
0026   end
0027 
0028 function do_unit_test
0029   s1 = struct('a',1,'b',2);
0030   s2 = struct('c',5,'b',3);
0031   s3 = struct('d',6,'b',4);
0032 
0033   so = mergestructs(s1);
0034   unit_test_cmp('1 arg',so,s1);
0035 
0036   so = mergestructs(s1,s2);
0037   so2= struct('a',1,'b',3,'c',5);
0038   unit_test_cmp('2 arg',so,so2);
0039 
0040   so = mergestructs(s1,s2,s3);
0041   so3= struct('a',1,'b',4,'c',5,'d',6);
0042   unit_test_cmp('3 arg',so,so3);

Generated on Sun 29-Dec-2024 11:41:59 by m2html © 2005