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