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