/* ----------------------------------------------------------------------------- GSFramework Copyright 2001-2013 Emmanuel Julien. All Rights Reserved. ----------------------------------------------------------------------------- */ #include "script/script_variant.h" #include "script/script_object.h" #include "script/script_vm.h" using namespace GS::Script; //------------------------------------------------------------------------------ bool Variant::operator == (const Variant &b) const { return ( (type == b.type) && (variant == b.variant) && (object_owner == b.object_owner) && (object == b.object) && (ptr == b.ptr) && (typetag == b.typetag) ); } bool Variant::operator != (const Variant &b) const { return !(*this == b); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void Variant::Set() { type = Type_None; if (object_owner) _safe_delete(object); object = NULL; } void Variant::Set(bool v) { Set(); type = Type_Variant; variant = v; } void Variant::Set(int v) { Set(); type = Type_Variant; variant = v; } void Variant::Set(uint v) { Set(); type = Type_Variant; variant = (int)v; } void Variant::Set(float v) { Set(); type = Type_Variant; variant = v; } void Variant::Set(const char *v) { Set(); type = Type_Variant; variant = v; } void Variant::Set(const GS::Variant &v) { Set(); type = Type_Variant; variant = v; } void Variant::Set(Object *o, bool own) { Set(); type = Type_ScriptObject; object_owner = own; object = o; } void Variant::Set(const void *p, size_t size) { Set(); type = Type_Variant; variant.SetBinary(p, size); } void Variant::Set(void *_ptr, uint _ptr_id) { Set(); type = Type_UserObject; ptr = _ptr; typetag = _ptr_id; object = NULL; } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ Variant::Variant() { type = Type_None; object = NULL; } Variant::Variant(const GS::Variant &v) { type = Type_Variant; variant = v; object = NULL; } Variant::Variant(bool v) { type = Type_Variant; variant = v; object = NULL; } Variant::Variant(int v) { type = Type_Variant; variant = v; object = NULL; } Variant::Variant(uint v) { type = Type_Variant; variant = (int)v; object = NULL; } Variant::Variant(float v) { type = Type_Variant; variant = v; object = NULL; } Variant::Variant(const char *v) { type = Type_Variant; variant = v; object = NULL; } Variant::Variant(Object *o, bool own) { type = Type_ScriptObject; object_owner = own; object = o; } Variant::Variant(const void *_ptr, size_t size) { type = Type_Variant; variant.SetBinary(_ptr, size); object = NULL; } Variant::Variant(void *_ptr, uint _ptr_id) { type = Type_UserObject; ptr = _ptr; typetag = _ptr_id; object = NULL; } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ Variant::~Variant() { Set(); } //------------------------------------------------------------------------------