Slick OrderBook 1.1.0
High-Performance C++23 OrderBook Library
Loading...
Searching...
No Matches
orderbook_manager.hpp
Go to the documentation of this file.
1// Copyright 2026 Slick Quant
2// SPDX-License-Identifier: MIT
3
4#pragma once
5
11#include <memory>
12#include <shared_mutex>
13#include <string>
14#include <vector>
15#include <mutex>
16#include <utility>
17
19
60template<typename OrderBookT>
62public:
63 using OrderBookPtr = std::shared_ptr<OrderBookT>;
65
68 explicit OrderBookManager(std::size_t initial_symbol_capacity = 64);
69
71 ~OrderBookManager() = default;
72
73 // Non-copyable, movable (manual implementation: std::shared_mutex is neither copyable nor movable)
74 // Moving transfers the orderbooks under the source's lock; the moved-from manager is left empty.
75 // Lifetime on move:
76 // - Orderbooks of the source are transferred, not copied: pointers/handles obtained from the
77 // source stay valid and now refer to orderbooks owned by the destination.
78 // - Move assignment releases the destination's previous orderbooks, as clear() does: raw pointers
79 // obtained from the destination before the assignment are invalidated, unless a shared handle
80 // (getSharedOrderBook()/getOrCreateSharedOrderBook()) still retains that orderbook.
83 OrderBookManager(OrderBookManager&& other) noexcept;
84 OrderBookManager& operator=(OrderBookManager&& other) noexcept;
85
91 [[nodiscard]] OrderBookT* getOrCreateOrderBook(SymbolId symbol);
92
98 [[nodiscard]] const OrderBookT* getOrderBook(SymbolId symbol) const;
99
105 [[nodiscard]] OrderBookT* getOrderBook(SymbolId symbol);
106
112 [[nodiscard]] std::shared_ptr<OrderBookT> getOrCreateSharedOrderBook(SymbolId symbol);
113
119 [[nodiscard]] std::shared_ptr<OrderBookT> getSharedOrderBook(SymbolId symbol) const;
120
125 [[nodiscard]] bool hasSymbol(SymbolId symbol) const;
126
131 bool removeOrderBook(SymbolId symbol);
132
136 [[nodiscard]] std::vector<SymbolId> getSymbols() const;
137
141 [[nodiscard]] std::size_t symbolCount() const;
142
145 void clear();
146
150 void reserve(std::size_t capacity);
151
152private:
154 template<typename Projection>
155 auto find(SymbolId symbol, Projection&& proj) const;
156
158 template<typename Projection>
159 auto findOrCreate(SymbolId symbol, Projection&& proj);
160
161 mutable std::shared_mutex mutex_;
162 SymbolMap symbol_map_;
163};
164
166
167// Include implementation for header-only mode
168#ifdef SLICK_ORDERBOOK_HEADER_ONLY
170#elif SLICK_EXTERN_TEMPLATE_DECLS
171// Explicitly instantiated in the compiled library (src/core/orderbook_manager.cpp)
174extern template class SLICK_API OrderBookManager<OrderBookL2>;
175extern template class SLICK_API OrderBookManager<OrderBookL3>;
178#endif
Multi-symbol OrderBook Manager.
detail::FlatMap< SymbolId, OrderBookPtr > SymbolMap
OrderBookManager(const OrderBookManager &)=delete
OrderBookManager & operator=(const OrderBookManager &)=delete
std::shared_ptr< OrderBookT > OrderBookPtr
~OrderBookManager()=default
Destructor.
#define SLICK_NAMESPACE_END
Definition config.hpp:127
#define SLICK_DLL_INTERFACE_WARNINGS_PUSH
Definition config.hpp:47
#define SLICK_NAMESPACE_BEGIN
Definition config.hpp:126
#define SLICK_API
Definition config.hpp:13
#define SLICK_DLL_INTERFACE_WARNINGS_POP
Definition config.hpp:48
std::map< Key, Value, Compare > FlatMap
Cache-friendly sorted map.
Definition flat_map.hpp:37
uint16_t SymbolId
Symbol identifier - can be hash or sequential ID.
Definition types.hpp:27