UGDK  0.5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
baseproxy.h
Go to the documentation of this file.
1 #ifndef UGDK_MODULE_PROXY_CACHE_H_
2 #define UGDK_MODULE_PROXY_CACHE_H_
3 
4 #include <map>
6 #
7 
8 namespace ugdk {
9 namespace script {
10 
11 
12 template <class T>
13 class BaseProxy {
14 public:
15  BaseProxy(const ugdk::script::VirtualObj& proxy) : proxy_(proxy) {}
17  BaseProxy::table_.erase(proxy_.unsafe_data());
18  }
19 
21 
22 
23  static void Set(void* key, T* object) { BaseProxy::table_[key] = object; }
24 
25  static bool Check(const ugdk::script::VirtualObj& proxy) {
26  return BaseProxy::table_.count(proxy.unsafe_data()) > 0;
27  }
28 
29  static T* Get(const ugdk::script::VirtualObj& proxy) {
30  void* key = proxy.unsafe_data();
31  T* obj;
32  if (BaseProxy::table_.count(key) == 0) {
33  obj = new T(proxy);
34  Set(key, obj);
35  }
36  else {
37  obj = BaseProxy::table_[key];
38  }
39  return obj;
40  }
41 
42  static T* Get(ugdk::script::VirtualData* proxy) {
43  void* key = proxy->unsafe_data();
44  T* obj;
45  if (BaseProxy::table_.count(key) == 0) {
46  obj = new T(VirtualObj(VirtualData::Ptr(proxy)));
47  Set(key, obj);
48  }
49  else {
50  obj = BaseProxy::table_[key];
51  }
52  return obj;
53  }
54 
55 protected:
57 
58 private:
59  static std::map<void*, T*> table_;
60 };
61 
62 template <class T>
63 std::map<void*, T*> BaseProxy<T>::table_;
64 
65 }
66 }
67 #endif
Abstract class representing virtual script data.
Definition: virtualdata.h:42
ugdk::script::VirtualObj get_proxy_vobj() const
Definition: baseproxy.h:20
void * unsafe_data() const
Definition: virtualobj.h:62
static void Set(void *key, T *object)
Definition: baseproxy.h:23
Definition: animation.h:11
Definition: baseproxy.h:13
std::shared_ptr< VirtualData > Ptr
Definition: virtualdata.h:46
static T * Get(const ugdk::script::VirtualObj &proxy)
Definition: baseproxy.h:29
~BaseProxy()
Definition: baseproxy.h:16
static T * Get(ugdk::script::VirtualData *proxy)
Definition: baseproxy.h:42
static bool Check(const ugdk::script::VirtualObj &proxy)
Definition: baseproxy.h:25
BaseProxy(const ugdk::script::VirtualObj &proxy)
Definition: baseproxy.h:15
A proxy class wich represents virtual objects from scripting languages.
Definition: virtualobj.h:30
ugdk::script::VirtualObj proxy_
Definition: baseproxy.h:56
virtual void * unsafe_data() const =0