aboutsummaryrefslogtreecommitdiff
path: root/src/lua/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/common')
-rw-r--r--src/lua/common/je_lua_common.h2
-rw-r--r--src/lua/common/je_lua_proxy.h30
-rw-r--r--src/lua/common/je_lua_shared.hpp (renamed from src/lua/common/je_lua_reference.hpp)43
3 files changed, 43 insertions, 32 deletions
diff --git a/src/lua/common/je_lua_common.h b/src/lua/common/je_lua_common.h
index 1d772a5..82c550a 100644
--- a/src/lua/common/je_lua_common.h
+++ b/src/lua/common/je_lua_common.h
@@ -3,7 +3,7 @@
#include "je_lua_port.h"
#include "je_lua_proxy.h"
-#include "je_lua_reference.hpp"
+#include "je_lua_shared.hpp"
#include "je_lua_error.h"
#endif \ No newline at end of file
diff --git a/src/lua/common/je_lua_proxy.h b/src/lua/common/je_lua_proxy.h
index b428dc9..56e5fee 100644
--- a/src/lua/common/je_lua_proxy.h
+++ b/src/lua/common/je_lua_proxy.h
@@ -1,7 +1,7 @@
#ifndef __JIN_COMMON_PROXY_H
#define __JIN_COMMON_PROXY_H
-#include "je_lua_reference.hpp"
+#include "je_lua_shared.hpp"
namespace JinEngine
{
@@ -11,53 +11,53 @@ namespace JinEngine
class Proxy
{
public:
- void bind(RefBase* ref)
+ void bind(SharedBase* ref)
{
if (ref == nullptr)
return;
- reference = ref;
+ shared = ref;
}
void release()
{
- if (reference != nullptr)
+ if (shared != nullptr)
{
- reference->release();
- reference = nullptr;
+ shared->release();
+ shared = nullptr;
}
}
void retain()
{
- if (reference != nullptr)
- reference->retain();
+ if (shared != nullptr)
+ shared->retain();
}
void setUserdata(void* data)
{
- if (reference != nullptr)
- reference->setUserdata(data);
+ if (shared != nullptr)
+ shared->setUserdata(data);
}
template<class T>
- Ref<T>& getRef()
+ Shared<T>& getShared()
{
- return *(Ref<T>*) reference;
+ return *(static_cast<Shared<T>*>(shared));
}
template<class T>
T* getObject()
{
- Ref<T>& ref = getRef<T>();
+ Shared<T>& ref = getShared<T>();
return ref.getObject();
}
const char* getObjectType()
{
- return reference->type;
+ return shared->type;
}
- RefBase* reference;
+ SharedBase* shared;
};
diff --git a/src/lua/common/je_lua_reference.hpp b/src/lua/common/je_lua_shared.hpp
index ba918bb..7ad7c1d 100644
--- a/src/lua/common/je_lua_reference.hpp
+++ b/src/lua/common/je_lua_shared.hpp
@@ -6,17 +6,17 @@ namespace JinEngine
namespace Lua
{
- /*abstract*/class RefBase
+ /*abstract*/class SharedBase
{
public:
void retain()
{
- ++count;
+ ++(*count);
}
void release()
{
- if (--count <= 0)
+ if (--(*count) <= 0)
delete this;
}
@@ -34,34 +34,35 @@ namespace JinEngine
}
protected:
- RefBase(void* obj, const char* t)
- : count(1)
- , object(obj)
+ SharedBase(void* obj, const char* t)
+ : object(obj)
, type(t)
{
+ count = new int(1);
}
- RefBase(const RefBase&);
+ SharedBase(const SharedBase&);
- virtual ~RefBase()
+ virtual ~SharedBase()
{
+
}
void* object;
- int count;
+ int* count;
void* userdata;
};
template<class T>
- class Ref : public RefBase
+ class Shared : public SharedBase
{
public:
- Ref(T* obj, const char* type)
- : RefBase(obj, type)
+ Shared(T* obj, const char* type)
+ : SharedBase(obj, type)
{
}
- ~Ref()
+ ~Shared()
{
T* obj = static_cast<T*>(object);
delete obj;
@@ -69,16 +70,26 @@ namespace JinEngine
T* operator->()
{
- return (T*)object;
+ return static_cast<T*>(object);
}
T* getObject()
{
- return (T*)object;
+ return static_cast<T*>(object);
+ }
+
+ T* operator &()
+ {
+ return static_cast<T*>(object);
+ }
+
+ T& operator *()
+ {
+ return *(static_cast<T*>(object));
}
private:
- Ref(const Ref<T>& ref);
+ Shared(const Shared<T>& ref);
};