1 #pragma once
2 
3 #include <jsi/jsi.h>
4 #include <stdio.h>
5 #include <memory>
6 #include <mutex>
7 #include <unordered_map>
8 #include <vector>
9 #include "Scheduler.h"
10 
11 using namespace facebook;
12 
13 namespace reanimated {
14 
15 class RuntimeManager;
16 
17 struct StaticStoreUser {
18   std::atomic<int> ctr;
19   std::unordered_map<int, std::vector<std::shared_ptr<jsi::Value>>> store;
20   std::recursive_mutex storeMutex;
21 };
22 
23 class StoreUser {
24   int identifier = 0;
25   std::weak_ptr<Scheduler> scheduler;
26   std::shared_ptr<StaticStoreUser> storeUserData;
27 
28  public:
29   StoreUser(std::shared_ptr<Scheduler> s, const RuntimeManager &runtimeManager);
30 
31   std::weak_ptr<jsi::Value> getWeakRef(jsi::Runtime &rt);
32   void removeRefs();
33 
34   virtual ~StoreUser();
35 };
36 
37 } // namespace reanimated
38