From 6631f2d1d0b1d31c1701b4eb36806f5bacd7238f Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Mon, 20 Sep 2010 13:17:20 +0200 Subject: [PATCH] Macro used to clean up after encountering an error in a mex file (previously handled by mexErrMsgTxt) and helper m file --- matlab/mexErrCheck.m | 42 ++++++++++++++++++++++++++++++++++++++++++ mex/sources/dynmex.h | 16 +++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 matlab/mexErrCheck.m diff --git a/matlab/mexErrCheck.m b/matlab/mexErrCheck.m new file mode 100644 index 000000000..708d4e505 --- /dev/null +++ b/matlab/mexErrCheck.m @@ -0,0 +1,42 @@ +function mexErrCheck(mexFunctionName, err) +% function mexErrCheck(mexFunctionName, err) +% this function halts processing if err is equal to 1. +% +% INPUTS +% mexFunctionName [char] Name of the mexFunction +% err [double] error code returned from mexFunction +% +% OUTPUTS +% none. +% +% ALGORITHM +% ... +% +% SPECIAL REQUIREMENTS +% none. +% + +% Copyright (C) 2010 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see . + +if ~ischar(mexFunctionName) || ~isscalar(err) + error('The first argument must be a char and the second a scalar'); +end + +if err + error(['Error encountered in: ' mexFunctionName '.']); +end \ No newline at end of file diff --git a/mex/sources/dynmex.h b/mex/sources/dynmex.h index c75a1a9f5..ed7e9377d 100644 --- a/mex/sources/dynmex.h +++ b/mex/sources/dynmex.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Dynare Team + * Copyright (C) 2009-2010 Dynare Team * * This file is part of Dynare. * @@ -32,4 +32,18 @@ typedef int mwIndex; typedef int mwSize; #endif +/* + * Fix for trac ticket Ticket #137 + */ +#if !defined(DYN_MEX_FUNC_ERR_MSG_TXT) +#define DYN_MEX_FUNC_ERR_MSG_TXT(str) \ + do { \ + mexPrintf("%s\n", str); \ + int i; \ + for (i = 0; i < nlhs; i++) \ + plhs[i] = mxCreateDoubleScalar(1); \ + return; \ + } while(0) +#endif + #endif