Skip to content
Daniel Esambu
Work
Work
Projects
Things I've built
Leka
A C++20 matching engine
Latency Lab
(opens in a new tab)
A C++ course I wrote
Resume
The formal version
Writing
Writing
Poetry
Poems, shelved by what they're about
Essays
Notes and essays
Math
Math
Notes
Notes I've written up
IB papers
Worked exam questions
Calculus lessons
(opens in a new tab)
On YouTube
Life
Life
Photos
Things I stopped to look at
Training
Reps, not phases
Modeling
Measurements and photos
Resume
Say hi
Say hi
Resume
Menu
Leka
A low-latency C++20 price-time-priority limit order book and matching engine
Replay viewer
Toggle main menu visibility
Loading...
Searching...
No Matches
order_event.cpp
Go to the documentation of this file.
1
#include "
lob/order/order_event.hpp
"
2
3
#include <stdexcept>
4
#include <utility>
5
6
namespace
lob {
7
8
/**
9
* @file
10
* @brief Implements type-safe NEW, CANCEL, and REDUCE event payload access.
11
*/
12
13
/** Constructs a NEW event from its payload. */
14
OrderEvent::OrderEvent
(
NewOrder
order) : payload(std::move(order)) {}
15
16
/** Constructs a CANCEL event from its payload. */
17
OrderEvent::OrderEvent
(
CancelOrder
order) : payload(order) {}
18
19
/** Constructs a REDUCE event from its payload. */
20
OrderEvent::OrderEvent
(
ReduceOrder
order) : payload(order) {}
21
22
/** Returns the variant index corresponding to the event operation. */
23
OrderEventType
OrderEvent::getEventType
()
const
{
24
return
static_cast<
OrderEventType
>
(payload.index());
25
}
26
27
/**
28
* @details The accessors test the active alternative once through get_if
29
* rather than pairing holds_alternative with get, which would discriminate
30
* the variant twice on every dispatched event.
31
*/
32
const
NewOrder
&
OrderEvent::getNewOrder
()
const
{
33
const
NewOrder
* order = std::get_if<NewOrder>(&payload);
34
if
(order ==
nullptr
) {
35
throw
std::logic_error(
"Order event is not NEW"
);
36
}
37
return
*order;
38
}
39
40
/** Returns the CANCEL payload after checking the active event type. */
41
const
CancelOrder
&
OrderEvent::getCancelOrder
()
const
{
42
const
CancelOrder
* order = std::get_if<CancelOrder>(&payload);
43
if
(order ==
nullptr
) {
44
throw
std::logic_error(
"Order event is not CANCEL"
);
45
}
46
return
*order;
47
}
48
49
/** Returns the REDUCE payload after checking the active event type. */
50
const
ReduceOrder
&
OrderEvent::getReduceOrder
()
const
{
51
const
ReduceOrder
* order = std::get_if<ReduceOrder>(&payload);
52
if
(order ==
nullptr
) {
53
throw
std::logic_error(
"Order event is not REDUCE"
);
54
}
55
return
*order;
56
}
57
58
}
// namespace lob
lob::OrderEvent::getNewOrder
const NewOrder & getNewOrder() const
Returns the NEW payload or throws when this is not a NEW event.
Definition
order_event.cpp:32
lob::OrderEvent::OrderEvent
OrderEvent(NewOrder order)
Creates a NEW event.
Definition
order_event.cpp:14
lob::OrderEvent::getCancelOrder
const CancelOrder & getCancelOrder() const
Returns the CANCEL payload or throws when this is not a CANCEL event.
Definition
order_event.cpp:41
lob::OrderEvent::getReduceOrder
const ReduceOrder & getReduceOrder() const
Returns the REDUCE payload or throws when this is not a REDUCE event.
Definition
order_event.cpp:50
lob::OrderEvent::getEventType
OrderEventType getEventType() const
Returns the operation represented by the active payload.
Definition
order_event.cpp:23
order_event.hpp
Defines event-first order command payloads and dispatch types.
lob::OrderEventType
OrderEventType
Operation selected before an event payload is interpreted.
Definition
order_event.hpp:29
lob::CancelOrder
Payload for removing an existing resting order.
Definition
order_event.hpp:52
lob::NewOrder
Payload for accepting a new order.
Definition
order_event.hpp:36
lob::ReduceOrder
Payload for shrinking a resting order without losing priority.
Definition
order_event.hpp:64
src
order
order_event.cpp
Generated by
1.18.0