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