#ifndef ObjectManager_h #define ObjectManager_h #include "Common.h" namespace tns { class ObjectManager; struct ObjectWeakCallbackState { ObjectWeakCallbackState(std::shared_ptr> target) : target_(target) { } std::shared_ptr> target_; }; class ObjectManager { public: static void Init(v8::Isolate* isolate, v8::Local globalTemplate); static std::shared_ptr> Register(v8::Local context, const v8::Local obj); static void FinalizerCallback(const v8::WeakCallbackInfo& data); static bool DisposeValue(v8::Isolate* isolate, v8::Local value, bool isFinalDisposal = false); private: static void ReleaseNativeCounterpartCallback(const v8::FunctionCallbackInfo& info); static long GetRetainCount(id obj); static bool IsInstanceOf(id obj, Class clazz); }; } #endif /* ObjectManager_h */