2
0
Эх сурвалжийг харах

core: early-out if possible

Daniele Bartolini 5 жил өмнө
parent
commit
689f97834e

+ 6 - 2
src/core/strings/dynamic_string.inl

@@ -82,12 +82,16 @@ inline bool operator<(const DynamicString& a, const DynamicString& b)
 
 inline bool operator==(const DynamicString& a, const DynamicString& b)
 {
-	return strcmp(a.c_str(), b.c_str()) == 0;
+	return array::size(a._data) == array::size(b._data)
+		&& strcmp(a.c_str(), b.c_str()) == 0
+		;
 }
 
 inline bool operator!=(const DynamicString& a, const DynamicString& b)
 {
-	return strcmp(a.c_str(), b.c_str()) != 0;
+	return array::size(a._data) != array::size(b._data)
+		|| strcmp(a.c_str(), b.c_str()) != 0
+		;
 }
 
 inline bool operator==(const DynamicString& a, const char* str)

+ 26 - 0
src/core/unit_tests.cpp

@@ -997,6 +997,32 @@ static void test_dynamic_string()
 		ENSURE(str.length() == 16);
 		ENSURE(strcmp(str.c_str(), "2f4a8724618f4c63") == 0);
 	}
+	{
+		TempAllocator128 ta;
+		DynamicString ds1(ta);
+		DynamicString ds2(ta);
+		ds1.set("foo", 3);
+		ds2.set("foo", 3);
+		ENSURE(ds1 == ds2);
+	}
+	{
+		TempAllocator128 ta;
+		DynamicString ds1(ta);
+		DynamicString ds2(ta);
+		ds1.set("foo", 3);
+		ds2.set("bar", 3);
+		ENSURE(ds1 != ds2);
+	}
+	{
+		TempAllocator128 ta;
+		DynamicString ds1(ta);
+		DynamicString ds2(ta);
+		ds1.set("bar", 3);
+		ds2.set("foo", 3);
+		ENSURE(ds1 < ds2);
+	}
+	memory_globals::shutdown();
+}
 
 static void test_string_view()
 {