From 82d0b952d9d3f059fe4bdf4a0f5b5e043b2aa4fb Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Sat, 23 Nov 2024 21:15:47 +0100 Subject: [PATCH] [design-updates] Converted merge method to read The merge method was made to merge two different Settings classes The read method can read from any struct --- classes/Settings.m | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/classes/Settings.m b/classes/Settings.m index b24a7e7..88b8a16 100644 --- a/classes/Settings.m +++ b/classes/Settings.m @@ -37,28 +37,44 @@ classdef Settings < Config & dynamicprops varsIn = obj.getConfig(configNames); obj.loadConfig(varsIn); end + end - function merge(target, source) + methods(Static) + function target = read(target, source, targetFields) arguments - target - source + target {mustBeA(target, {'struct', 'Settings'})} + source struct + end + + arguments (Repeating) + targetFields {mustBeA(targetFields, {'char', 'string'})} end - % MERGE - merges two settings classes - % Priority is given to the source settings - % empty fields are ignored + % MERGE - reads and applies data from a source struct + % Usage: settings.read(<struct>, <name of settings field>) + % + % Source fields have priority over settings fields, meaning + % the source will overwrite existing settings with the same + % name + % + % Empty fields in the source struct are ignored fields = fieldnames(source)'; + if isempty(fields), return; end + + if length(targetFields) > 1 + target.(targetFields{1}) = Settings.read( ... + target.(targetFields{1}), ... + source, ... + targetFields{2:end}); + return; + end + + % WIP: fix wrong assignment + targetField = targetFields{1}; for field = fields fd = field{1}; if isempty(source.(fd)), continue; end - if isempty(findprop(target, fd)) - target.addprop(fd); - target.(fd) = source.(fd); - elseif isa(source.(fd), 'Settings') - target.(fd).merge(source.(fd)) - else - target.(fd) = source.(fd); - end + target.(targetField).(fd) = source.(fd); end end end -- GitLab