Pārlūkot izejas kodu

core: add StringId*::parse()

Daniele Bartolini 6 gadi atpakaļ
vecāks
revīzija
1bd769ccf9

+ 20 - 0
src/core/strings/string_id.cpp

@@ -27,6 +27,14 @@ void StringId32::hash(const char* str, u32 len)
 	_id = murmur32(str, len, 0);
 }
 
+void StringId32::parse(const char* str)
+{
+	CE_ENSURE(NULL != str);
+	int num = sscanf(str, "%8x", &_id);
+	CE_ENSURE(num == 2);
+	CE_UNUSED(num);
+}
+
 void StringId32::to_string(char* buf, u32 len) const
 {
 	snprintf(buf, len, "%.8x", _id);
@@ -48,6 +56,18 @@ void StringId64::hash(const char* str, u32 len)
 	_id = murmur64(str, len, 0);
 }
 
+void StringId64::parse(const char* str)
+{
+	u32 id[2];
+	CE_ENSURE(NULL != str);
+	int num = sscanf(str, "%8x%8x", &id[0], &id[1]);
+	_id = 0;
+	_id |= u64(id[0]) << 32;
+	_id |= u64(id[1]) <<  0;
+	CE_ENSURE(num == 2);
+	CE_UNUSED(num);
+}
+
 void StringId64::to_string(char* buf, u32 len) const
 {
 	snprintf(buf, len, "%.16" PRIx64, _id);

+ 6 - 0
src/core/strings/string_id.h

@@ -24,6 +24,9 @@ struct StringId32
 
 	void hash(const char* str, u32 len);
 
+	/// Parses the id from @a str.
+	void parse(const char* str);
+
 	/// Fills @a buf with the string representation of this id.
 	void to_string(char* buf, u32 len) const;
 };
@@ -42,6 +45,9 @@ struct StringId64
 
 	void hash(const char* str, u32 len);
 
+	/// Parses the id from @a str.
+	void parse(const char* str);
+
 	/// Fills @a buf with the string representation of this id.
 	void to_string(char* buf, u32 len) const;
 };

+ 16 - 0
src/core/unit_tests.cpp

@@ -892,6 +892,22 @@ static void test_string_id()
 		a.to_string(str, sizeof(str));
 		ENSURE(strcmp(str, "90631502d1a3432b") == 0);
 	}
+	{
+		StringId32 id(0x2dd65fa6u);
+		char str[9];
+		id.to_string(str, sizeof(str));
+		StringId32 parsed;
+		parsed.parse(str);
+		ENSURE(id == parsed);
+	}
+	{
+		StringId64 id(0xa73491922dd65fa6u);
+		char str[17];
+		id.to_string(str, sizeof(str));
+		StringId64 parsed;
+		parsed.parse(str);
+		ENSURE(id == parsed);
+	}
 	memory_globals::shutdown();
 }