OnixS C++ SGX Titan ITCH Market Data Handler  1.2.2
API documentation
BookImpl.h
Go to the documentation of this file.
1 /*
2 * Copyright Onix Solutions Limited [OnixS]. All rights reserved.
3 *
4 * This software owned by Onix Solutions Limited [OnixS] and is protected by copyright law
5 * and international copyright treaties.
6 *
7 * Access to and use of the software is governed by the terms of the applicable ONIXS Software
8 * Services Agreement (the Agreement) and Customer end user license agreements granting
9 * a non-assignable, non-transferable and non-exclusive license to use the software
10 * for it's own data processing purposes under the terms defined in the Agreement.
11 *
12 * Except as otherwise granted within the terms of the Agreement, copying or reproduction of any part
13 * of this source code or associated reference material to any other location for further reproduction
14 * or redistribution, and any amendments to this copyright notice, are expressly prohibited.
15 *
16 * Any reproduction or redistribution for sale or hiring of the Software not in accordance with
17 * the terms of the Agreement is a violation of copyright law.
18 */
19 
20 #pragma once
21 
24 
25 #include <OnixS/HandlerCore/OrderBook.h>
26 
27 #include <OnixS/Core/Memory/FixedBlockAllocator.h>
28 
29 #include "NamespaceHelper.h"
30 
31 ONIXS_HANDLER_NAMESPACE_BEGIN
32 
33 struct Order
34 {
38 
39  Order();
40  Order(const OrderId& inId, const Price& inPrice, Quantity inQuantity);
41  static void addOrder(const Order& order, PriceLevel& level);
42  static void removeOrder(const Order& order, PriceLevel& level);
43  static bool isOrderAffectsPriceLevel(const Order& order);
44 };
45 
46 void addOrder(const Order& order, PriceLevel& level);
47 void removeOrder(const Order& order, PriceLevel& level);
48 bool isOrderAffectsPriceLevel(const Order& order);
49 const OrderId& getOrderId(const Order& order);
50 const Price& getPrice(const Order& order);
51 
52 static const size_t DefaultMaxBooksAmount = 500;
53 
55 {
56  typedef OnixS::HandlerCore::MarketData::DefaultBaseFullOrderDepthBook::BaseAskMap BaseAskMap;
57  typedef OnixS::HandlerCore::MarketData::DefaultBaseFullOrderDepthBook::BaseBidMap BaseBidMap;
58 };
59 
60 typedef OnixS::HandlerCore::MarketData::FullOrderDepthBook<PriceLevel, Order, OrderId, Price, BaseFullOrderDepthBook> OrderDepthBook;
61 
63 {
64 public:
65  typedef OrderDepthBook::AskFullOrderDepthMap AskFullOrderDepthMap;
66  typedef OrderDepthBook::BidFullOrderDepthMap BidFullOrderDepthMap;
67  typedef OrderDepthBook::PoolManager PoolManager;
68  typedef OrderDepthBook::PoolManagerPtr PoolManagerPtr;
69  typedef OrderDepthBook::OrderIdMap OrderIdMap;
70  typedef OrderIdMap::Map BookSide;
71 
72  using OrderBook::asks;
73  using OrderBook::bids;
74  using OrderBook::depth;
75  using OrderBook::empty;
76 
77 public:
79  (
80  const OrderBookId& id,
81  size_t bookDepth,
82  size_t maxAggregatedPriceLevelsCount = (size_t)-1,
83  const PoolManagerPtr& poolManager = PoolManagerPtr()
84  );
85 
86  virtual ~OrderBookInternal();
87 
88  AskFullOrderDepthMap& askOrders();
89  const AskFullOrderDepthMap& askOrders() const;
90  BidFullOrderDepthMap& bidOrders();
91  const BidFullOrderDepthMap& bidOrders() const;
92 
93  void remove(const OrderId& orderId);
94  void clear();
95  void checkSanity() const;
96 
97  static void* operator new (std::size_t);
98  static void operator delete (void*);
99 
100  static void* operator new (std::size_t, void*);
101  static void operator delete (void*, void*);
102 
103 private:
104  size_t doDepth() const;
105  const PriceLevels& doAsks() const;
106  const PriceLevels& doBids() const;
107  bool doBestAsk (Price& price, Quantity& quantity) const;
108  bool doBestBid (Price& price, Quantity& quantity) const;
109  OrderBookId doOrderBookId() const;
110 
111  void checkAsksSanity() const;
112  void checkBidsSanity() const;
113 
114 private:
116  const OrderBookInternal& operator=(const OrderBookInternal&);
117 
118 private:
119  const size_t bookDepth_;
120  OrderBookId id_;
121 };
122 
123 class OrderBookAllocator : public boost::noncopyable
124 {
125 public:
126  explicit
127  OrderBookAllocator(size_t objectsAmount);
129  void* alloc();
130  void reset();
131 
132 private:
133  const size_t poolSize_;
134  std::vector<unsigned char> poolPtr_;
135  OnixS::FixedBlockAllocator allocator_;
136 };
137 
138 size_t hash_value(OrderBookInternal const& book);
139 
140 ONIXS_HANDLER_NAMESPACE_END
141 
142 namespace OnixS {
143 namespace HandlerCore {
144 namespace MarketData {
145 namespace Detail{
146 
147 inline
149 {
150  return boost::hash<HANDLER_NAMESPACE::OrderId>()(value);
151 }
152 
153 }}}}
size_t hash_value(OrderBookInternal const &book)
Definition: BookImpl.cpp:323
UInt64 OrderId
Alias for OrderId type.
Definition: Defines.h:40
void addOrder(const Order &order, PriceLevel &level)
Definition: BookImpl.cpp:70
void checkSanity(const OrderBook &book)
checks whether the given book is properly built
Definition: Book.cpp:455
OnixS::HandlerCore::MarketData::DefaultBaseFullOrderDepthBook::BaseAskMap BaseAskMap
Definition: BookImpl.h:56
Encapsulates price level concept.
Definition: OrderBook.h:47
UInt64 Quantity
Alias for Quantity type.
Definition: Defines.h:46
UInt32 OrderBookId
Alias for Security Id type.
Definition: Defines.h:43
PriceLevelCollections::Array PriceLevels
Sequence of price levels.
Definition: OrderBook.h:135
size_t getHash(const OnixS::SgxTitan::MarketData::Itch::OrderId &value)
Definition: BookImpl.h:148
OrderDepthBook::BidFullOrderDepthMap BidFullOrderDepthMap
Definition: BookImpl.h:66
const OrderId & getOrderId(const Order &order)
Definition: BookImpl.cpp:84
OrderDepthBook::AskFullOrderDepthMap AskFullOrderDepthMap
Definition: BookImpl.h:65
OnixS::HandlerCore::MarketData::FullOrderDepthBook< PriceLevel, Order, OrderId, Price, BaseFullOrderDepthBook > OrderDepthBook
Definition: BookImpl.h:60
OrderDepthBook::PoolManagerPtr PoolManagerPtr
Definition: BookImpl.h:68
void removeOrder(const Order &order, PriceLevel &level)
Definition: BookImpl.cpp:75
bool isOrderAffectsPriceLevel(const Order &order)
Definition: BookImpl.cpp:80
OnixS::HandlerCore::MarketData::DefaultBaseFullOrderDepthBook::BaseBidMap BaseBidMap
Definition: BookImpl.h:57
const Price & getPrice(const Order &order)
Definition: BookImpl.cpp:89