From ef8ebdfe2ff22ff918c77f0fa60d916426d312bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?=
 <stephane.adjemian@univ-lemans.fr>
Date: Wed, 14 May 2014 15:54:15 +0200
Subject: [PATCH] Save empty dates and dseries objects in memory (base
 workspace) instead of disk (faster). Added an initialization mode for dates
 and dseries constructor. The following commands:

dates('initialization');
dseries('initialization');

create variables emptydatesobject and emptydseriesobject in base workspace.
---
 .gitignore                |  2 --
 matlab/@dates/dates.m     |  8 +++++---
 matlab/@dseries/dseries.m |  9 ++++++---
 matlab/dynare_config.m    | 16 +++-------------
 preprocessor/ModFile.cc   |  4 ++++
 5 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/.gitignore b/.gitignore
index 1f117b4b0f..be2c969479 100644
--- a/.gitignore
+++ b/.gitignore
@@ -116,8 +116,6 @@ mex/build/matlab/run_m2html.m
 /matlab/dynare_m
 /matlab/dynare_m.exe
 /matlab/dynare_version.m
-/matlab/empty-dates-object.mat
-/matlab/empty-dseries-object.mat
 
 # DLL rules
 *.mex
diff --git a/matlab/@dates/dates.m b/matlab/@dates/dates.m
index b52eb9c93f..5df103424a 100644
--- a/matlab/@dates/dates.m
+++ b/matlab/@dates/dates.m
@@ -62,13 +62,15 @@ function dd = dates(varargin) % --*-- Unitary tests --*--
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-if exist('empty-dates-object.mat','file')
-    load('empty-dates-object');
-else
+if nargin>0 && isequal(varargin{1},'initialize')
     dd = struct('ndat', 0, 'freq', NaN(0), 'time', NaN(0,2));
     dd = class(dd,'dates');
+    assignin('base','emptydatesobject',dd);
+    return
 end
 
+dd = evalin('base','emptydatesobject');
+
 switch nargin
   case 0
     % Returns an empty object
diff --git a/matlab/@dseries/dseries.m b/matlab/@dseries/dseries.m
index 55ed8c3b75..213800c70a 100644
--- a/matlab/@dseries/dseries.m
+++ b/matlab/@dseries/dseries.m
@@ -76,9 +76,7 @@ function ts = dseries(varargin) % --*-- Unitary tests --*--
 % You should have received a copy of the GNU General Public License
 % along with Dynare.  If not, see <http://www.gnu.org/licenses/>.
 
-if exist('empty-dseries-object.mat','file')
-    load('empty-dseries-object');
-else
+if nargin>0 && isequal(varargin{1},'initialize')
     ts = struct;
     ts.data  = [];
     ts.nobs  = 0;
@@ -88,8 +86,13 @@ else
     ts.freq  = [];
     ts.init  = dates();
     ts.dates = dates();
+    ts = class(ts,'dseries');
+    assignin('base','emptydseriesobject',ts);
+    return
 end
 
+ts = evalin('base','emptydseriesobject');
+
 switch nargin
   case 0
     %  Create an empty dseries object.
diff --git a/matlab/dynare_config.m b/matlab/dynare_config.m
index 9f8f706c09..2eb992b36e 100644
--- a/matlab/dynare_config.m
+++ b/matlab/dynare_config.m
@@ -249,18 +249,8 @@ if verbose
     skipline()
 end
 
-% Delete empty dates and dseries saved on disk.
-if exist('empty-dates-object.mat','file')
-    delete([dynareroot 'empty-dates-object.mat']);
-end
-if exist('empty-dseries-object.mat','file')
-    delete([dynareroot 'empty-dseries-object.mat']);
-end
-
-% Save empty dates and dseries objects on disk.
-dd = dates();
-ts = dseries();
-save([dynareroot 'empty-dates-object.mat'],'dd');
-save([dynareroot 'empty-dseries-object.mat'],'ts');
+% Save empty dates and dseries objects (necessary if a mod file is not preprocessed).
+dates('initialize');
+dseries('initialize');
 
 cd(origin);
diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc
index 314fd504e4..5c6c9fa752 100644
--- a/preprocessor/ModFile.cc
+++ b/preprocessor/ModFile.cc
@@ -554,6 +554,10 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool no_log, b
     mOutputFile << "clear all" << endl;
 
   mOutputFile << "tic;" << endl
+	      << "% Save empty dates and dseries objects in memory." << endl
+	      << "dates('initialize');" << endl
+	      << "dseries('initialize');" << endl
+	      << "% Define global variables." << endl
               << "global M_ oo_ options_ ys0_ ex0_ estimation_info" << endl
               << "options_ = [];" << endl
               << "M_.fname = '" << basename << "';" << endl
-- 
GitLab