Exemplo n.º 1
0
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();
    }
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
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);
}