# HG changeset patch # User Jordi GutiƩrrez Hermoso # Date 1305434889 18000 # Node ID 2c96207d0e064102bf400b38aba6d394f246c2de # Parent e3dc23f7dd54d21d444635286cc9b90153163059 caseless-str.h: Fix implementation of op< diff -r e3dc23f7dd54 -r 2c96207d0e06 liboctave/caseless-str.h --- a/liboctave/caseless-str.h Sat May 14 21:17:20 2011 -0700 +++ b/liboctave/caseless-str.h Sat May 14 23:48:09 2011 -0500 @@ -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;