- // ObjectHolder_t
- template <class F>
- void CallSafe(unique_ptr<Object>* ppObject, F Func)
- {
- if (!ppObject)
- return;
- Object* pRaw = ppObject->get();
- if (pRaw)
- Func(&pRaw);
- if (!pRaw)
- ppObject->reset();
- }
- // NSBInterpreter
- void NSBInterpreter::Delete()
- {
- string Handle = PopString();
- ObjectHolder.Execute(Handle, [this] (Object** ppObject)
- {
- if (NSBContext* pThread = dynamic_cast<NSBContext*>(*ppObject))
- RemoveThread(pThread);
- *ppObject = nullptr;
- });
- }