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