rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules 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  if isa(s1, 'handle')
51  % Loop over all properties:
52  p = properties(s1);
53  res = 1;
54  for i = 1:length(p)
55  if ~isprop(s2, p{i});
56  ise = 0;return;
57  else
58  ise = isequal_ignore_handles(s1.(p{i}),s2.(p{i}));
59  end
60  if ~ise
61  display(['property ', p{i}, ' not equal'])
62  end
63  res = res && ise;
64  end
65  else
66  error('class type not yet supported');
67  end
68 end;
69