-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMatchingEngine.h
More file actions
56 lines (37 loc) · 1.65 KB
/
Copy pathMatchingEngine.h
File metadata and controls
56 lines (37 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#pragma once
#include <vector>
#include "EngineInterfaces.h"
class MatchingEngine : public IEngineEvents
{
public:
MatchingEngine() = default;
virtual ~MatchingEngine() = default;
MatchingEngine(const MatchingEngine&) = delete;
MatchingEngine(MatchingEngine&&) = delete;
MatchingEngine& operator =(const MatchingEngine&) = delete;
void InitialiseMarkets(const std::vector<std::string>& markets);
void RegisterEventObserver(IExchangeEvents* pObserver);
//
// IEngineEvents implementation
//
virtual OrderPlaceEventResult OnOrderPlace(Order&& o) override final;
virtual OrderCancelEventResult OnOrderCancel(OrderID oid) override final;
private:
using OrderBookOrdersAtPosition = std::map<OrderID, NumericType>;
using OrderBookPosition = std::map<NumericType, OrderBookOrdersAtPosition>;
// Each market consists of positions of bids and asks stored individually
using Market = std::pair<OrderBookPosition, OrderBookPosition>;
using Markets = std::unordered_map<std::string, Market>;
using OrderLookup = std::map<OrderID, OrderBookOrdersAtPosition*>;
OrderPlaceEventResult HandleOrderBookUpdate(Order&& o);
bool HandleOrderBookCancel(OrderID o);
bool TickOrderBook(const std::string& marketName, Market& market);
void NotifyOrderBookEventObservers(OrderID oid, const Order& mo);
void NotifyMatchingEventObservers(const MatchedOrder& mo);
void NotifyCancelEventObservers(OrderID o);
OrderID m_nextOrderID{ 0 };
std::vector<IExchangeEvents*> m_eventObservers;
// Non-owning collection for fast order ID lookups
OrderLookup m_orderLookup;
Markets m_markets;
};