diff --git a/matlab/@dynDates/sort.m b/matlab/@dynDates/sort.m new file mode 100644 index 000000000..f25529fe6 --- /dev/null +++ b/matlab/@dynDates/sort.m @@ -0,0 +1,83 @@ +function dd = sort(dd) +% sort method for dynDates class. + +%@info: +%! @deftypefn {Function File} {@var{a} =} sort (@var{a}) +%! @anchor{dynDates/sort} +%! @sp 1 +%! Sort method for the Dynare dates class. +%! @sp 2 +%! @strong{Inputs} +%! @sp 1 +%! @table @ @var +%! @item a +%! Object instantiated by @ref{dynDates}. +%! @end table +%! @sp 2 +%! @strong{Outputs} +%! @sp 1 +%! @table @ @var +%! @item a +%! Object instantiated by @ref{dynDates}, with dates sorted by increasing order. +%! @end table +%! @sp 2 +%! @strong{This function is called by:} +%! @sp 2 +%! @strong{This function calls:} +%! +%! @end deftypefn +%@eod: + +% Copyright (C) 2011 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 . + +% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr + +if ~isa(dd,'dynDates') + error(['dynDates::sort: Input argument ' inputname(dd) ' has to be a dynDates object.']) +end + +if dd.ndat==1 + return +end + +dd.time = sortrows(dd.time,[1,2]); + +%@test:1 +%$ addpath ../matlab +%$ +%$ % Define some dates +%$ B1 = '1945Q3'; +%$ B2 = '1950Q2'; +%$ B3 = '1950Q1'; +%$ B4 = '1953Q4'; +%$ +%$ % Define expected results. +%$ e.time = [1945 3; 1950 1; 1950 2; 1953 4]; +%$ e.freq = 4; +%$ e.ndat = 4; +%$ +%$ % Call the tested routine. +%$ d = dynDates(B1,B2,B3,B4); +%$ d = sort(d); +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(d.time,e.time); +%$ t(2) = dyn_assert(d.freq,e.freq); +%$ t(3) = dyn_assert(d.ndat,e.ndat); +%$ T = all(t); +%@eof:1 \ No newline at end of file diff --git a/matlab/@dynDates/subsref.m b/matlab/@dynDates/subsref.m index d5e017784..b5408de77 100644 --- a/matlab/@dynDates/subsref.m +++ b/matlab/@dynDates/subsref.m @@ -2,7 +2,7 @@ function B = subsref(A,S) %@info: %! @deftypefn {Function File} {@var{us} =} subsref (@var{ts},S) -%! @anchor{@dynDates/subsref} +%! @anchor{dynDates/subsref} %! @sp 1 %! Overloads the subsref method for the Dynare dates class (@ref{dynDates}). %! @sp 2 @@ -50,4 +50,25 @@ function B = subsref(A,S) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -B = builtin('subsref', A, S); \ No newline at end of file +B = builtin('subsref', A, S); + +if isequal(S(1).type,'.') + switch S(1).subs + case {'time','freq','ndat'} % Public members. + B = builtin('subsref', A, S(1)); + case {'sort'} % Give "dot access" to public methods. + if length(S)==1 + B = feval(S(1).subs,A); + else + if isequal(S(2).type,'()') + B = feval(S(1).subs,A,S(2).subs{:}); + else + error('dynTime::subsref: Something is wrong in your syntax!') + end + end + otherwise + error('dynTime::subsref: Unknown public method or member!') + end +else + error('dynTime::subsref: Something is wrong in your syntax!') +end