xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
xrpld
app
ledger
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
11
namespace
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
24
class
LedgerHolder
:
public
CountedObject
<LedgerHolder>
25
{
26
public
:
27
// Update the held ledger
28
void
29
set
(
std::shared_ptr<Ledger const>
ledger)
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
40
std::shared_ptr<Ledger const>
41
get
()
42
{
43
std::scoped_lock
const
sl(
lock_
);
44
return
heldLedger_
;
45
}
46
47
bool
48
empty
()
49
{
50
std::scoped_lock
const
sl(
lock_
);
51
return
heldLedger_
==
nullptr
;
52
}
53
54
private
:
55
std::mutex
lock_
;
56
std::shared_ptr<Ledger const>
heldLedger_
;
57
};
58
59
}
// namespace xrpl
xrpl::CountedObject< LedgerHolder >::CountedObject
CountedObject() noexcept
Definition
CountedObject.h:119
xrpl::LedgerHolder
Hold a ledger in a thread-safe way.
Definition
LedgerHolder.h:25
xrpl::LedgerHolder::set
void set(std::shared_ptr< Ledger const > ledger)
Definition
LedgerHolder.h:29
xrpl::LedgerHolder::get
std::shared_ptr< Ledger const > get()
Definition
LedgerHolder.h:41
xrpl::LedgerHolder::empty
bool empty()
Definition
LedgerHolder.h:48
xrpl::LedgerHolder::lock_
std::mutex lock_
Definition
LedgerHolder.h:55
xrpl::LedgerHolder::heldLedger_
std::shared_ptr< Ledger const > heldLedger_
Definition
LedgerHolder.h:56
memory
mutex
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::logicError
void logicError(std::string const &how) noexcept
Called when faulty logic causes a broken invariant.
Definition
libxrpl/basics/contract.cpp:19
std::scoped_lock
std::shared_ptr
utility
Generated by
1.17.0