aboutsummaryrefslogtreecommitdiff
path: root/src/libjin-lua/common/l_object.h
blob: 84d16d7c54685a72fe400396b4e50f50927e380b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifndef __JIN_COMMON_OBJECT_H__
#define __JIN_COMMON_OBJECT_H__

#include "libjin/jin.h"
#include "l_shared.hpp"

struct lua_State;

namespace JinEngine
{
	namespace Lua
	{

		class LuaObject
		{
		public:
			///
			/// Set lua_State and object it bind.
			///
			void bind(Shared* obj);

			void release();

			const char* getObjectType();

			Shared* getShared();

			template<class T>
			T* getObject()
			{
				return shared->getObject<T>();
			}

			void setDependency(uint key, LuaObject* dep);

			void removeDependency(uint key);

			void removeDependency(LuaObject* dep);

			bool isDependOn(uint key);

			bool isDependOn(LuaObject* shared);

			void clearDependencies();

			LuaObject* getDependency(uint key);

			int getDependenciesCount();

			//////////////////////////////////////////////////////////////////////////////////////////////////////
			// Lua state object.
			//////////////////////////////////////////////////////////////////////////////////////////////////////

			using DepsMap = std::map<uint, LuaObject*>;

			lua_State* state;

			Shared* shared;

			const char* type;

			DepsMap* dependencies;

		};

	} // namespace Lua
} // namespace JinEngine

#endif // __JIN_COMMON_OBJECT_H__