1*ab11e3c9SKudo Chien #pragma once 2*ab11e3c9SKudo Chien 3*ab11e3c9SKudo Chien #include <memory> 4*ab11e3c9SKudo Chien #include <vector> 5*ab11e3c9SKudo Chien 6*ab11e3c9SKudo Chien #include "FrozenObject.h" 7*ab11e3c9SKudo Chien #include "JSIStoreValueUser.h" 8*ab11e3c9SKudo Chien #include "SharedParent.h" 9*ab11e3c9SKudo Chien 10*ab11e3c9SKudo Chien using namespace facebook; 11*ab11e3c9SKudo Chien 12*ab11e3c9SKudo Chien namespace reanimated { 13*ab11e3c9SKudo Chien 14*ab11e3c9SKudo Chien class RemoteObject : public jsi::HostObject, public StoreUser { 15*ab11e3c9SKudo Chien private: 16*ab11e3c9SKudo Chien std::weak_ptr<jsi::Value> backing; 17*ab11e3c9SKudo Chien std::unique_ptr<FrozenObject> initializer; 18*ab11e3c9SKudo Chien 19*ab11e3c9SKudo Chien public: 20*ab11e3c9SKudo Chien void maybeInitializeOnWorkletRuntime(jsi::Runtime &rt); RemoteObject(jsi::Runtime & rt,const jsi::Object & object,RuntimeManager * runtimeManager,std::shared_ptr<Scheduler> s)21*ab11e3c9SKudo Chien RemoteObject( 22*ab11e3c9SKudo Chien jsi::Runtime &rt, 23*ab11e3c9SKudo Chien const jsi::Object &object, 24*ab11e3c9SKudo Chien RuntimeManager *runtimeManager, 25*ab11e3c9SKudo Chien std::shared_ptr<Scheduler> s) 26*ab11e3c9SKudo Chien : StoreUser(s, *runtimeManager), 27*ab11e3c9SKudo Chien initializer( 28*ab11e3c9SKudo Chien std::make_unique<FrozenObject>(rt, object, runtimeManager)) {} 29*ab11e3c9SKudo Chien void 30*ab11e3c9SKudo Chien set(jsi::Runtime &rt, const jsi::PropNameID &name, const jsi::Value &value); 31*ab11e3c9SKudo Chien jsi::Value get(jsi::Runtime &rt, const jsi::PropNameID &name); 32*ab11e3c9SKudo Chien std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime &rt); 33*ab11e3c9SKudo Chien }; 34*ab11e3c9SKudo Chien 35*ab11e3c9SKudo Chien } // namespace reanimated 36