Browse Source

Expose C++ variant data union so other C++ code can access it.

Alex Szpakowski 6 years ago
parent
commit
ebe98a91ec
1 changed files with 29 additions and 27 deletions
  1. 29 27
      src/common/Variant.h

+ 29 - 27
src/common/Variant.h

@@ -36,6 +36,8 @@ class Variant
 {
 public:
 
+	static const int MAX_SMALL_STRING_LENGTH = 15;
+
 	enum Type
 	{
 		UNKNOWN = 0,
@@ -49,32 +51,12 @@ public:
 		TABLE
 	};
 
-	Variant();
-	Variant(bool boolean);
-	Variant(double number);
-	Variant(const char *string, size_t len);
-	Variant(void *lightuserdata);
-	Variant(love::Type *type, love::Object *object);
-	Variant(std::vector<std::pair<Variant, Variant>> *table);
-	Variant(const Variant &v);
-	Variant(Variant &&v);
-	~Variant();
-
-	Variant &operator = (const Variant &v);
-
-	Type getType() const { return type; }
-
-	static Variant fromLua(lua_State *L, int n, std::set<const void*> *tableSet = nullptr);
-	void toLua(lua_State *L) const;
-
-private:
-
 	class SharedString : public love::Object
 	{
 	public:
 
 		SharedString(const char *string, size_t len)
-			: len(len)
+		: len(len)
 		{
 			str = new char[len+1];
 			memcpy(str, string, len);
@@ -90,7 +72,7 @@ private:
 	public:
 
 		SharedTable(std::vector<std::pair<Variant, Variant>> *table)
-			: table(table)
+		: table(table)
 		{
 		}
 
@@ -99,10 +81,6 @@ private:
 		std::vector<std::pair<Variant, Variant>> *table;
 	};
 
-	static const int MAX_SMALL_STRING_LENGTH = 15;
-
-	Type type;
-
 	union Data
 	{
 		bool boolean;
@@ -116,7 +94,31 @@ private:
 			char str[MAX_SMALL_STRING_LENGTH];
 			uint8 len;
 		} smallstring;
-	} data;
+	};
+
+	Variant();
+	Variant(bool boolean);
+	Variant(double number);
+	Variant(const char *string, size_t len);
+	Variant(void *lightuserdata);
+	Variant(love::Type *type, love::Object *object);
+	Variant(std::vector<std::pair<Variant, Variant>> *table);
+	Variant(const Variant &v);
+	Variant(Variant &&v);
+	~Variant();
+
+	Variant &operator = (const Variant &v);
+
+	Type getType() const { return type; }
+	const Data &getData() const { return data; }
+
+	static Variant fromLua(lua_State *L, int n, std::set<const void*> *tableSet = nullptr);
+	void toLua(lua_State *L) const;
+
+private:
+
+	Type type;
+	Data data;
 
 }; // Variant
 } // love