1*e1f25825SŁukasz Kosmaty // Copyright 2022-present 650 Industries. All rights reserved. 2*e1f25825SŁukasz Kosmaty 3*e1f25825SŁukasz Kosmaty #ifdef __cplusplus 4*e1f25825SŁukasz Kosmaty 5*e1f25825SŁukasz Kosmaty #import <jsi/jsi.h> 6*e1f25825SŁukasz Kosmaty 7*e1f25825SŁukasz Kosmaty namespace jsi = facebook::jsi; 8*e1f25825SŁukasz Kosmaty 9*e1f25825SŁukasz Kosmaty namespace expo::common { 10*e1f25825SŁukasz Kosmaty 11*e1f25825SŁukasz Kosmaty class JSI_EXPORT ObjectDeallocator : public jsi::HostObject { 12*e1f25825SŁukasz Kosmaty public: 13*e1f25825SŁukasz Kosmaty typedef std::function<void()> Block; 14*e1f25825SŁukasz Kosmaty ObjectDeallocator(const Block deallocator)15*e1f25825SŁukasz Kosmaty ObjectDeallocator(const Block deallocator) : deallocator(deallocator) {}; 16*e1f25825SŁukasz Kosmaty ~ObjectDeallocator()17*e1f25825SŁukasz Kosmaty virtual ~ObjectDeallocator() { 18*e1f25825SŁukasz Kosmaty deallocator(); 19*e1f25825SŁukasz Kosmaty } 20*e1f25825SŁukasz Kosmaty 21*e1f25825SŁukasz Kosmaty const Block deallocator; 22*e1f25825SŁukasz Kosmaty 23*e1f25825SŁukasz Kosmaty }; // class ObjectDeallocator 24*e1f25825SŁukasz Kosmaty 25*e1f25825SŁukasz Kosmaty /** 26*e1f25825SŁukasz Kosmaty Sets the deallocator block on a given object, which is called when the object is being deallocated. 27*e1f25825SŁukasz Kosmaty */ 28*e1f25825SŁukasz Kosmaty void setDeallocator( 29*e1f25825SŁukasz Kosmaty jsi::Runtime &runtime, 30*e1f25825SŁukasz Kosmaty const std::shared_ptr<jsi::Object> &jsThis, 31*e1f25825SŁukasz Kosmaty ObjectDeallocator::Block deallocatorBlock, 32*e1f25825SŁukasz Kosmaty const std::string &key = "__expo_object_deallocator__" 33*e1f25825SŁukasz Kosmaty ); 34*e1f25825SŁukasz Kosmaty 35*e1f25825SŁukasz Kosmaty } // namespace expo::common 36*e1f25825SŁukasz Kosmaty 37*e1f25825SŁukasz Kosmaty #endif 38