Add missing operators for CFX_ByteString.
authorTom Sepez <tsepez@chromium.org>
Wed, 22 Apr 2015 17:09:35 +0000 (10:09 -0700)
committerTom Sepez <tsepez@chromium.org>
Wed, 22 Apr 2015 17:09:35 +0000 (10:09 -0700)
Part 3 of 4.

BUG=pdfium:142
R=brucedawson@chromium.org, thestig@chromium.org

Review URL: https://codereview.chromium.org/1099213002

core/include/fxcrt/fx_string.h
core/src/fxcrt/fx_basic_bstring_unittest.cpp

index 70f6493..4db83e3 100644 (file)
@@ -7,6 +7,8 @@
 #ifndef _FX_STRING_H_
 #define _FX_STRING_H_
 
+#include <algorithm>
+
 #include "fx_memory.h"
 
 class CFX_ByteStringC;
@@ -261,6 +263,12 @@ public:
         return !operator==(str);
     }
 
+    bool operator< (const CFX_ByteString& str) const
+    {
+        int result = FXSYS_memcmp32(c_str(), str.c_str(), std::min(GetLength(), str.GetLength()));
+        return result < 0 || (result == 0 && GetLength() < str.GetLength());
+    }
+
     void                                       Empty();
 
     const CFX_ByteString&      operator = (FX_LPCSTR str);
index 53427e3..1ddaad4 100644 (file)
@@ -6,6 +6,45 @@
 #include "../../../testing/fx_string_testhelpers.h"
 #include "../../include/fxcrt/fx_basic.h"
 
+TEST(fxcrt, ByteStringOperatorSubscript) {
+    // CFX_ByteString includes the NUL terminator for non-empty strings.
+    CFX_ByteString abc("abc");
+    EXPECT_EQ('a', abc[0]);
+    EXPECT_EQ('b', abc[1]);
+    EXPECT_EQ('c', abc[2]);
+    EXPECT_EQ(0, abc[3]);
+}
+
+TEST(fxcrt, ByteStringOperatorLT) {
+    CFX_ByteString empty;
+    CFX_ByteString a("a");
+    CFX_ByteString abc("abc");
+    CFX_ByteString def("def");
+
+    EXPECT_FALSE(empty < empty);
+    EXPECT_FALSE(a < a);
+    EXPECT_FALSE(abc < abc);
+    EXPECT_FALSE(def < def);
+
+    EXPECT_TRUE(empty < a);
+    EXPECT_FALSE(a < empty);
+
+    EXPECT_TRUE(empty < abc);
+    EXPECT_FALSE(abc < empty);
+
+    EXPECT_TRUE(empty < def);
+    EXPECT_FALSE(def < empty);
+
+    EXPECT_TRUE(a < abc);
+    EXPECT_FALSE(abc < a);
+
+    EXPECT_TRUE(a < def);
+    EXPECT_FALSE(def < a);
+
+    EXPECT_TRUE(abc < def);
+    EXPECT_FALSE(def < abc);
+}
+
 TEST(fxcrt, ByteStringCNull) {
   CFX_ByteStringC null_string;
   EXPECT_EQ(null_string.GetPtr(), nullptr);