diff copyWithDefault.m @ 832:5573913a0949 feature/burgers1d

Merged with default, and updated +scheme/Burgers1D accordingly
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Tue, 11 Sep 2018 15:58:35 +0200
parents 499653b553b8
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/copyWithDefault.m	Tue Sep 11 15:58:35 2018 +0200
@@ -0,0 +1,31 @@
+% Copy the struct src to dest with default values from default
+%   dest = copyWithDefault(src, default)
+function dest = copyWithDefault(src, default)
+    % src does not have a value => use default
+    if isempty(src)
+        dest = default;
+        return
+    end
+
+    % src has a value and is not a struct => use src
+    % src has a value and default is not a struct => use src
+    if ~isstruct(src) || ~isstruct(default)
+        dest = src;
+        return
+    end
+
+
+    % src has a value and is a struct => add all default fields
+    dest = src;
+
+    fn = fieldnames(default);
+    for i = 1:length(fn)
+        if isfield(src, fn{i})
+            srcField = src.(fn{i});
+        else
+            srcField = [];
+        end
+
+        dest.(fn{i}) = copyWithDefault(srcField, default.(fn{i}));
+    end
+end