void Binding::initialize( const ContextHandle context , const bool _useContext , const bool _resolveFunctions) { g_mutex.lock(); if (g_bindings.find(context) != g_bindings.end()) { g_mutex.unlock(); return; } g_mutex.unlock(); const int pos = static_cast<int>(g_bindings.size()); g_mutex.lock(); g_bindings[context] = pos; g_mutex.unlock(); g_mutex.lock(); AbstractFunction::provideState(pos); g_mutex.unlock(); if (_useContext) { useContext(context); } if (_resolveFunctions) { resolveFunctions(); } }
void Binding::initialize( const ContextHandle context , const bool _useContext , const bool _resolveFunctions) { mutex.lock(); // TODO: use read lock if (bindings.find(context) != bindings.end()) { mutex.unlock(); return; } mutex.unlock(); const int pos = static_cast<int>(bindings.size()); mutex.lock(); // TODO: use write lock bindings[context] = pos; mutex.unlock(); mutex.lock(); // TODO: use read lock AbstractFunction::provideState(pos); mutex.unlock(); if (_useContext) useContext(context); if (_resolveFunctions) resolveFunctions(); }
void Binding::initialize( const ContextHandle context , const bool _useContext , const bool _resolveFunctions) { g_mutex.lock(); if (g_bindings.find(context) != g_bindings.cend()) { g_mutex.unlock(); return; } g_mutex.unlock(); const auto pos = static_cast<int>(g_bindings.size()); g_mutex.lock(); g_bindings[context] = pos; g_mutex.unlock(); g_mutex.lock(); AbstractFunction::provideState(pos); g_mutex.unlock(); const auto resolveWOUse = !_useContext & _resolveFunctions; const auto currentContext = resolveWOUse ? getCurrentContext() : static_cast<ContextHandle>(0); if(_useContext) useContext(context); if (_resolveFunctions) resolveFunctions(); // restore previous context if(resolveWOUse) useContext(currentContext); }