From 13c6cf86ceccbf1a834a887f4e8c0cb82689b97f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Ry=C3=BBk=29?=
 <stepan@adjemian.eu>
Date: Wed, 15 Sep 2021 13:42:16 +0200
Subject: [PATCH] Cosmetic change (code factorization).

---
 matlab/+pac/+bgp/set.m | 69 ++++++++++++++----------------------------
 1 file changed, 23 insertions(+), 46 deletions(-)

diff --git a/matlab/+pac/+bgp/set.m b/matlab/+pac/+bgp/set.m
index dfb17b128f..d09c5acb73 100644
--- a/matlab/+pac/+bgp/set.m
+++ b/matlab/+pac/+bgp/set.m
@@ -43,55 +43,32 @@ if isempty(ide)
 end
 
 if ~isempty(ide)
-    if isfield(M_.pac.(pacmodel).equations.(eqtag), 'additive')
-        if ~isfield(M_.pac.(pacmodel).equations.(eqtag).additive, 'bgp')
-            M_.pac.(pacmodel).equations.(eqtag).additive.bgp = zeros(1, length(M_.pac.(pacmodel).equations.(eqtag).additive.params));
-        end
-        [isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).additive.vars);
-        if isvar
-            if xflag
-                assert(~M_.pac.(pacmodel).equations.(eqtag).additive.isendo(ie), 'Variable type issue.')
-            else
-                assert(M_.pac.(pacmodel).equations.(eqtag).additive.isendo(ie), 'Variable type issue.')
-            end
-            M_.pac.(pacmodel).equations.(eqtag).additive.bgp(ie) = nonzeromean;
-            return
-        end
-    end
-    if isfield(M_.pac.(pacmodel).equations.(eqtag), 'optim_additive')
-        if ~isfield(M_.pac.(pacmodel).equations.(eqtag).optim_additive, 'bgp')
-            M_.pac.(pacmodel).equations.(eqtag).optim_additive.bgp = zeros(1, length(M_.pac.(pacmodel).equations.(eqtag).optim_additive.params));
-        end
-        [isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).optim_additive.vars);
-        if isvar
-            if xflag
-                assert(~M_.pac.(pacmodel).equations.(eqtag).optim_additive.isendo(ie), 'Variable type issue.')
-            else
-                assert(M_.pac.(pacmodel).equations.(eqtag).optim_additive.isendo(ie), 'Variable type issue.')
-            end
-            M_.pac.(pacmodel).equations.(eqtag).optim_additive.bgp(ie) = nonzeromean;
-            return
-        end
-    end
-    if isfield(M_.pac.(pacmodel).equations.(eqtag), 'non_optimizing_behaviour')
-        if ~isfield(M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour, 'bgp')
-            M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.bgp = zeros(1, length(M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.params));
-        end
-        [isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.vars);
-        if isvar
-            if xflag
-                assert(~M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.isendo(ie), 'Variable type issue.')
-            else
-                assert(M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.isendo(ie), 'Variable type issue.')
-            end
-            M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.bgp(ie) = nonzeromean;
-            return
-        end
-    end
+    [M_, done] = writebgpfield('additive', pacmodel, eqtag, ide, xflag, nonzeromean, M_);
+    if done, return, end
+    [M_, done] = writebgpfield('optim_additive', pacmodel, eqtag, ide, xflag, nonzeromean, M_);
+    if done, return, end
+    [M_, done] = writebgpfield('non_optimizing_behaviour', pacmodel, eqtag, ide, xflag, nonzeromean, M_);
+    if done, return, end
     warning('%s is not an exogenous variable in equation %s.', variable, paceq)
 else
     error('Endogenous/Exogenous variable %s is unknown.', variable)
 end
 
 
-function 
\ No newline at end of file
+function [M_, done] = writebgpfield(type, pacmodel, eqtag, ide, xflag, nonzeromean, M_)
+done = false;
+if isfield(M_.pac.(pacmodel).equations.(eqtag), type)
+    if ~isfield(M_.pac.(pacmodel).equations.(eqtag).additive, 'bgp')
+        M_.pac.(pacmodel).equations.(eqtag).(type).bgp = zeros(1, length(M_.pac.(pacmodel).equations.(eqtag).(type).params));
+    end
+    [isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).(type).vars);
+    if isvar
+        if xflag
+            assert(~M_.pac.(pacmodel).equations.(eqtag).(type).isendo(ie), 'Variable type issue.')
+        else
+            assert(M_.pac.(pacmodel).equations.(eqtag).(type).isendo(ie), 'Variable type issue.')
+        end
+        M_.pac.(pacmodel).equations.(eqtag).(type).bgp(ie) = nonzeromean;
+        done = true;
+    end
+end
-- 
GitLab