xrpld
Loading...
Searching...
No Matches
LedgerHolder.h
1#pragma once
2
3#include <xrpl/basics/CountedObject.h>
4#include <xrpl/basics/contract.h>
5#include <xrpl/ledger/Ledger.h>
6
7#include <memory>
8#include <mutex>
9#include <utility>
10
11namespace xrpl {
12
13// Can std::atomic<std::shared_ptr>> make this lock free?
14
15// VFALCO NOTE This class can be replaced with atomic<shared_ptr<...>>
16
24class LedgerHolder : public CountedObject<LedgerHolder>
25{
26public:
27 // Update the held ledger
28 void
30 {
31 if (!ledger)
32 logicError("LedgerHolder::set with nullptr");
33 if (!ledger->isImmutable())
34 logicError("LedgerHolder::set with mutable Ledger");
35 std::scoped_lock const sl(lock_);
36 heldLedger_ = std::move(ledger);
37 }
38
39 // Return the (immutable) held ledger
42 {
43 std::scoped_lock const sl(lock_);
44 return heldLedger_;
45 }
46
47 bool
49 {
50 std::scoped_lock const sl(lock_);
51 return heldLedger_ == nullptr;
52 }
53
54private:
57};
58
59} // namespace xrpl
Hold a ledger in a thread-safe way.
void set(std::shared_ptr< Ledger const > ledger)
std::shared_ptr< Ledger const > get()
std::shared_ptr< Ledger const > heldLedger_
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
void logicError(std::string const &how) noexcept
Called when faulty logic causes a broken invariant.