rbmatlab  1.13.10
 All Classes Namespaces Files Functions Variables Groups Pages
isequal_ignore_handles.m
1 function res = isequal_ignore_handles(s1,s2)
2 %function res = isequal_ignore_handles(s1,s2)
3 %
4 % generalization of isequal for structures with possibly
5 % function_handles. as isequal does not work for these,
6 % function_handles are skipped
7 %
8 % parameters:
9 % s1: general variable to be compared
10 % s2: general variable to be compared
11 %
12 % return value:
13 % boolean, indicating wether the two variables are identical (while ignoring
14 % function handles)
15 
16 res = 0;
17 
18 if ~isequal(class(s1),class(s2))
19  return;
20 end;
21 
22 switch class(s1)
23  case 'function_handle'
24  res = 1;
25  return
26  case {'double','char','single','logical','rectgrid','triagrid','onedgrid'}
27  res = isequal(s1,s2);
28  case 'cell'
29  if length(s1)~=length(s2)
30  return;
31  else
32  res = 1;
33  for i=1:length(s1)
34  res = res && isequal_ignore_handles(s1{i},s2{i});
35  end;
36  end;
37  case {'struct', 'feminfo'}
38  fn1 = fieldnames(s1);
39  fn2 = fieldnames(s2);
40  if length(intersect(fn1,fn2))~=length(fn1)
41  res = 0;
42  return;
43  end;
44  res = 1;
45  for i = 1:length(fn1)
46  res = res && ...
47  isequal_ignore_handles(s1.(fn1{i}),s2.(fn1{i}));
48  end;
49  otherwise
50  error('class type not yet supported');
51 end;
52