changeset 12669:2c96207d0e06 stable

caseless-str.h: Fix implementation of op<
author Jordi Gutiérrez Hermoso <jordigh@gmail.com>
date Sat, 14 May 2011 23:48:09 -0500
parents e3dc23f7dd54
children f83ec5ab90ad
files liboctave/caseless-str.h
diffstat 1 files changed, 10 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/caseless-str.h
+++ b/liboctave/caseless-str.h
@@ -48,22 +48,23 @@
 
   bool operator < (const std::string& s) const
   {
-    bool same = true;
     const_iterator p1 = begin ();
     const_iterator p2 = s.begin ();
 
     while (p1 != end () && p2 != s.end ())
       {
-        if (std::tolower (*p2) < std::tolower (*p1))
+        char lp1 = std::tolower (*p1), lp2 = std::tolower (*p2);
+
+        if ( lp1 > lp2 )
           return false;
-        if (same && (std::tolower (*p2) != std::tolower (*p1)))
-	  same = false;
+        if ( lp1 < lp2)
+          return true;
 
-        *p1++;
-        *p2++;
+        p1++;
+        p2++;
       }
 
-    if (same && (length() >= s.length ()))
+    if ( length () >= s.length ())
       return false;
     else
       return true;
@@ -82,8 +83,8 @@
         if (std::tolower (*p1) != std::tolower (*p2))
           return false;
 
-        *p1++;
-        *p2++;
+        p1++;
+        p2++;
       }
 
     return (limit == std::string::npos) ? size () == s.size () : k == limit;