From f37d5230207dc4ddcb5a8fbe9c2ee21721db8e7c 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, 11 Nov 2015 22:39:35 +0100
Subject: [PATCH] Added a second output to setdiff method.

If A and B are dates objects, then

[C, IA] = setdiff(A, B)

returns a dates object C whose elements are the elements belonging to A
that are not member of B, and IA is a vector of integers such that C = A(IA).
---
 src/@dates/setdiff.m | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/@dates/setdiff.m b/src/@dates/setdiff.m
index 5d74848..1c3edab 100644
--- a/src/@dates/setdiff.m
+++ b/src/@dates/setdiff.m
@@ -1,4 +1,4 @@
-function C = setdiff(A,B) % --*-- Unitary tests --*--
+function [C, IA] = setdiff(A,B) % --*-- Unitary tests --*--
 
 %@info:
 %! @deftypefn {Function File} {@var{C} =} setdiff (@var{A},@var{B})
@@ -21,11 +21,13 @@ function C = setdiff(A,B) % --*-- Unitary tests --*--
 %! @table @ @var
 %! @item C
 %! @ref{dates} object.
+%! @item IA
+%! Vector of integers such that C=A(IA).
 %! @end table
 %! @end deftypefn
 %@eod:
 
-% Copyright (C) 2013 Dynare Team
+% Copyright (C) 2013-2015 Dynare Team
 %
 % This file is part of Dynare.
 %
@@ -52,21 +54,31 @@ end
 
 if isequal(A,B)
     C = dates(A.freq);
+    if nargout>1, IA = []; end
     return
 end
 
 if isoctave || matlab_ver_less_than('8.1.0')
-    time = setdiff(A.time,B.time,'rows');
+    if nargout<2
+        time = setdiff(A.time,B.time,'rows');
+    else
+        [time, IA] = setdiff(A.time,B.time,'rows');
+    end
 else
-    time = setdiff(A.time,B.time,'rows','legacy');
+    if nargout<2
+        time = setdiff(A.time,B.time,'rows','legacy');
+    else
+        [time, IA] = setdiff(A.time,B.time,'rows','legacy');
+    end
 end
 
-C = dates();
+C = dates(A.freq);
+
 if isempty(time)
+    IA = [];
     return
 end
 
-C.freq = A.freq;
 C.time = time;
 C.ndat = rows(time); 
 
-- 
GitLab