Browse Source

Add an easier std::string Variant constructor.

Alex Szpakowski 6 years ago
parent
commit
b43074efa5
2 changed files with 12 additions and 4 deletions
  1. 8 3
      src/common/Variant.cpp
  2. 4 1
      src/common/Variant.h

+ 8 - 3
src/common/Variant.cpp

@@ -58,21 +58,26 @@ Variant::Variant(double number)
 	data.number = number;
 }
 
-Variant::Variant(const char *string, size_t len)
+Variant::Variant(const char *str, size_t len)
 {
 	if (len <= MAX_SMALL_STRING_LENGTH)
 	{
 		type = SMALLSTRING;
-		memcpy(data.smallstring.str, string, len);
+		memcpy(data.smallstring.str, str, len);
 		data.smallstring.len = (uint8) len;
 	}
 	else
 	{
 		type = STRING;
-		data.string = new SharedString(string, len);
+		data.string = new SharedString(str, len);
 	}
 }
 
+Variant::Variant(const std::string &str)
+	: Variant(str.c_str(), str.length())
+{
+}
+
 Variant::Variant(void *lightuserdata)
 	: type(LUSERDATA)
 {

+ 4 - 1
src/common/Variant.h

@@ -26,6 +26,7 @@
 #include "common/int.h"
 
 #include <cstring>
+#include <string>
 #include <vector>
 #include <set>
 
@@ -59,6 +60,7 @@ public:
 			: len(len)
 		{
 			str = new char[len+1];
+			str[len] = '\0';
 			memcpy(str, string, len);
 		}
 		virtual ~SharedString() { delete[] str; }
@@ -99,7 +101,8 @@ public:
 	Variant();
 	Variant(bool boolean);
 	Variant(double number);
-	Variant(const char *string, size_t len);
+	Variant(const char *str, size_t len);
+	Variant(const std::string &str);
 	Variant(void *lightuserdata);
 	Variant(love::Type *type, love::Object *object);
 	Variant(std::vector<std::pair<Variant, Variant>> *table);