From 15b17095c3ea21bda34c00f3ee478281de3bb49e 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 21:01:09 +0200
Subject: [PATCH] Improve speed of comparison methods (lt, gt, le and ge) for
 @dates class.

---
 matlab/@dates/ge.m | 27 +++++++++++++++++++++------
 matlab/@dates/gt.m | 26 ++++++++++++++++++++------
 matlab/@dates/le.m | 29 ++++++++++++++++++++++-------
 matlab/@dates/lt.m | 25 +++++++++++++++++++------
 4 files changed, 82 insertions(+), 25 deletions(-)

diff --git a/matlab/@dates/ge.m b/matlab/@dates/ge.m
index 8f18cf7abe..625f1bbdf2 100644
--- a/matlab/@dates/ge.m
+++ b/matlab/@dates/ge.m
@@ -43,26 +43,41 @@ if isequal(A.ndat, B.ndat)
     C = (A==B);
     idx = find(C==0);
     for i=1:length(idx)
-        C(idx(i)) = compare_vectors(@gt, A.time(idx(i),:), B.time(idx(i),:));
+        C(idx(i)) = greaterorequal(A.time(idx(i),:), B.time(idx(i),:));
     end
 else
-    if isequal(A.ndat,1) && isequal(B.ndat,1)
-        C = compare_vectors(@ge, A.time, B.time);
-    elseif isequal(A.ndat,1)
+    if isequal(A.ndat,1)
         C = NaN(B.ndat,1);
         for i=1:B.ndat
-            C(i) = compare_vectors(@ge, A.time, B.time(i,:));
+            C(i) = greaterorequal(A.time, B.time(i,:));
         end
     elseif isequal(B.ndat,1)
         C = NaN(A.ndat,1);
         for i=1:A.ndat
-            C(i) = compare_vectors(@ge, A.time(i,:), B.time);
+            C(i) = greaterorequal(A.time(i,:), B.time);
         end
     else
         C = 0;
     end
 end
 
+
+function c = greaterorequal(a,b)
+    if a(1)>b(1)
+        c = 1;
+    else
+        if a(1)<b(1)
+            c = 0;
+        else
+            if a(2)>=b(2)
+                c = 1;
+            else
+                c = 0;
+            end
+        end
+    end
+
+
 %@test:1
 %$ % Define some dates
 %$ date_2 = '1950Q2';
diff --git a/matlab/@dates/gt.m b/matlab/@dates/gt.m
index 241dd729e0..7960388850 100644
--- a/matlab/@dates/gt.m
+++ b/matlab/@dates/gt.m
@@ -42,26 +42,40 @@ end
 if isequal(A.ndat, B.ndat)
     C = NaN(A.ndat,1);
     for i=1:A.ndat
-        C(i) = compare_vectors(@gt, A.time(i,:), B.time(i,:));
+        C(i) = greaterthan(A.time(i,:), B.time(i,:));
     end
 else
-    if isequal(A.ndat,1) && isequal(B.ndat,1)
-        C = compare_vectors(@gt, A.time, B.time);
-    elseif isequal(A.ndat,1)
+    if isequal(A.ndat,1)
         C = NaN(B.ndat,1);
         for i=1:B.ndat
-            C(i) = compare_vectors(@gt, A.time, B.time(i,:));
+            C(i) = greaterthan(A.time, B.time(i,:));
         end
     elseif isequal(B.ndat,1)
         C = NaN(A.ndat,1);
         for i=1:A.ndat
-            C(i) = compare_vectors(@gt, A.time(i,:), B.time);
+            C(i) = greaterthan(A.time(i,:), B.time);
         end
     else
         C = 0;
     end
 end
 
+
+function c = greaterthan(a,b)
+    if a(1)>b(1)
+        c = 1;
+    else
+        if a(1)<b(1)
+            c = 0;
+        else
+            if a(2)>b(2)
+                c = 1;
+            else
+                c = 0;
+            end
+        end
+    end
+
 %@test:1
 %$ % Define some dates
 %$ date_2 = '1950Q2';
diff --git a/matlab/@dates/le.m b/matlab/@dates/le.m
index 2283172283..3056785fe7 100644
--- a/matlab/@dates/le.m
+++ b/matlab/@dates/le.m
@@ -43,26 +43,41 @@ if isequal(A.ndat, B.ndat)
     C = (A==B);
     idx = find(C==0);
     for i=1:length(idx)
-        C(idx(i)) = compare_vectors(@lt, A.time(idx(i),:), B.time(idx(i),:));
+        C(idx(i)) = lessorequal(A.time(idx(i),:), B.time(idx(i),:));
     end
 else
-    if isequal(A.ndat,1) && isequal(B.ndat,1)
-        C = compare_vectors(@le, A.time, B.time);
-    elseif isequal(A.ndat,1)
+    if isequal(A.ndat,1)
         C = NaN(B.ndat,1);
         for i=1:B.ndat
-            C(i) = compare_vectors(@le, A.time, B.time(i,:));
+            C(i) = lessorequal(A.time, B.time(i,:));
         end
     elseif isequal(B.ndat,1)
         C = NaN(A.ndat,1);
         for i=1:A.ndat
-            C(i) = compare_vectors(@le, A.time(i,:), B.time);
+            C(i) = lessorequal(A.time(i,:), B.time);
         end
     else
         C = 0;
     end
 end
 
+
+function c = lessorequal(a, b)
+    if a(1)<b(1)
+        c = 1;
+    else
+        if a(1)>b(1)
+            c = 0;
+        else
+            if a(2)<=b(2)
+                c = 1;
+            else
+                c = 0;
+            end
+        end
+    end
+
+
 %@test:1
 %$ % Define some dates
 %$ date_2 = '1950Q2';
@@ -79,7 +94,7 @@ end
 %$ i2 = (d3<=d4);
 %$ i3 = (d4<=d2);
 %$ i4 = (d5<=d4);
-%$ i5 = (d5<=d5); 
+%$ i5 = (d5<=d5);
 %$
 %$ % Check the results.
 %$ t(1) = dyn_assert(i1,1);
diff --git a/matlab/@dates/lt.m b/matlab/@dates/lt.m
index 3707b6861e..97bddcff8a 100644
--- a/matlab/@dates/lt.m
+++ b/matlab/@dates/lt.m
@@ -42,26 +42,39 @@ end
 if isequal(A.ndat, B.ndat)
     C = NaN(A.ndat,1);
     for i=1:A.ndat
-        C(i) = compare_vectors(@lt, A.time(i,:), B.time(i,:));
+        C(i) = lessthan(A.time(i,:),B.time(i,:));
     end
 else
-    if isequal(A.ndat,1) && isequal(B.ndat,1)
-        C = compare_vectors(@lt, A.time, B.time);
-    elseif isequal(A.ndat,1)
+    if isequal(A.ndat,1)
         C = NaN(B.ndat,1);
         for i=1:B.ndat
-            C(i) = compare_vectors(@lt, A.time, B.time(i,:));
+            C(i) = lessthan(A.time,B.time(i,:));
         end
     elseif isequal(B.ndat,1)
         C = NaN(A.ndat,1);
         for i=1:A.ndat
-            C(i) = compare_vectors(@lt, A.time(i,:), B.time);
+            C(i) =  lessthan(A.time(i,:),B.time);
         end
     else
         C = 0;
     end
 end
 
+function c = lessthan(a,b)
+    if a(1)<b(1)
+        c = 1;
+    else
+        if a(1)>b(1)
+            c = 0;
+        else
+            if a(2)<b(2)
+                c = 1;
+            else
+                c = 0;
+            end
+        end
+    end
+
 %@test:1
 %$ % Define some dates
 %$ date_2 = '1950Q2';
-- 
GitLab