Exemple #1
0
std::shared_ptr<SLE const>
CachedViewImpl::read (Keylet const& k) const
{
    {
        std::lock_guard<
            std::mutex> lock(mutex_);
        auto const iter = map_.find(k.key);
        if (iter != map_.end())
        {
            if (! k.check(*iter->second))
                return nullptr;
            return iter->second;
        }
    }
    auto const digest =
        base_.digest(k.key);
    if (! digest)
        return nullptr;
    auto sle = cache_.fetch(*digest,
        [&]() { return base_.read(k); });
    std::lock_guard<
        std::mutex> lock(mutex_);
    auto const iter =
        map_.find(k.key);
    if (iter == map_.end())
    {
        map_.emplace(k.key, sle);
        return sle;
    }
    if (! k.check(*iter->second))
        LogicError("CachedView::read: wrong type");
    return iter->second;

}
Exemple #2
0
std::shared_ptr<SLE>
Ledger::peek (Keylet const& k) const
{
    auto const& value =
        stateMap_->peekItem(k.key);
    if (! value)
        return nullptr;
    auto sle = std::make_shared<SLE>(
        SerialIter{value->data(), value->size()}, value->key());
    if (! k.check(*sle))
        return nullptr;
    return sle;
}
Exemple #3
0
bool
RawStateTable::exists (ReadView const& base,
    Keylet const& k) const
{
    assert(k.key.isNonZero());
    auto const iter = items_.find(k.key);
    if (iter == items_.end())
        return base.exists(k);
    auto const& item = iter->second;
    if (item.first == Action::erase)
        return false;
    if (! k.check(*item.second))
        return false;
    return true;
}
Exemple #4
0
std::shared_ptr<SLE>
Ledger::peek (Keylet const& k) const
{
    auto const& value =
        stateMap_->peekItem(k.key);
    if (! value)
        return nullptr;
    auto sle = std::make_shared<SLE>(
                   SerialIter{value->data(), value->size()}, value->key());
    if (! k.check(*sle))
        return nullptr;
    // VFALCO TODO Eliminate "immutable" runtime property
    sle->setImmutable();
    return sle;
}
Exemple #5
0
std::shared_ptr<SLE const>
RawStateTable::read (ReadView const& base,
    Keylet const& k) const
{
    auto const iter =
        items_.find(k.key);
    if (iter == items_.end())
        return base.read(k);
    auto const& item = iter->second;
    if (item.first == Action::erase)
        return nullptr;
    // Convert to SLE const
    std::shared_ptr<
        SLE const> sle = item.second;
    if (! k.check(*sle))
        return nullptr;
    return sle;
}
Exemple #6
0
std::shared_ptr<SLE const>
Ledger::read (Keylet const& k) const
{
    if (k.key == zero)
    {
        assert(false);
        return nullptr;
    }
    auto const& item =
        stateMap_->peekItem(k.key);
    if (! item)
        return nullptr;
    auto sle = std::make_shared<SLE>(
        SerialIter{item->data(),
            item->size()}, item->key());
    if (! k.check(*sle))
        return nullptr;
    // need move otherwise makes a copy
    // because return type is different
    return std::move(sle);
}