Slick OrderBook 1.1.0
High-Performance C++23 OrderBook Library
Loading...
Searching...
No Matches
order_map.hpp
Go to the documentation of this file.
1// Copyright 2026 Slick Quant
2// SPDX-License-Identifier: MIT
3
4#pragma once
5
9#include <unordered_map>
10
12
16class OrderMap {
17public:
18 using MapType = std::unordered_map<OrderId, Order*>;
19 using iterator = MapType::iterator;
20 using const_iterator = MapType::const_iterator;
21
23 explicit OrderMap(std::size_t initial_capacity = 1024) {
24 map_.reserve(initial_capacity);
25 }
26
30 bool insert(Order* order) noexcept {
31 SLICK_ASSERT(order != nullptr);
32 // Avoid structured bindings to work around C++23 tuple conversion issues with Clang 17 + GCC 14 libstdc++
33 auto result = map_.try_emplace(order->order_id, order);
34 return result.second;
35 }
36
40 bool erase(OrderId order_id) noexcept {
41 return map_.erase(order_id) > 0;
42 }
43
47 [[nodiscard]] Order* find(OrderId order_id) noexcept {
48 auto it = map_.find(order_id);
49 return (it != map_.end()) ? it->second : nullptr;
50 }
51
52 [[nodiscard]] const Order* find(OrderId order_id) const noexcept {
53 auto it = map_.find(order_id);
54 return (it != map_.end()) ? it->second : nullptr;
55 }
56
58 [[nodiscard]] bool contains(OrderId order_id) const noexcept {
59 return map_.contains(order_id);
60 }
61
63 [[nodiscard]] std::size_t size() const noexcept {
64 return map_.size();
65 }
66
68 [[nodiscard]] bool empty() const noexcept {
69 return map_.empty();
70 }
71
73 void reserve(std::size_t capacity) {
74 map_.reserve(capacity);
75 }
76
78 void clear() noexcept {
79 map_.clear();
80 }
81
83 [[nodiscard]] iterator begin() noexcept { return map_.begin(); }
84 [[nodiscard]] iterator end() noexcept { return map_.end(); }
85 [[nodiscard]] const_iterator begin() const noexcept { return map_.begin(); }
86 [[nodiscard]] const_iterator end() const noexcept { return map_.end(); }
87 [[nodiscard]] const_iterator cbegin() const noexcept { return map_.cbegin(); }
88 [[nodiscard]] const_iterator cend() const noexcept { return map_.cend(); }
89
90private:
91 MapType map_; // OrderId -> Order* mapping
92};
93
Hash table for fast OrderId -> Order* lookup Uses std::unordered_map for simplicity and performance P...
Definition order_map.hpp:16
void reserve(std::size_t capacity)
Reserve capacity for orders.
Definition order_map.hpp:73
bool empty() const noexcept
Check if map is empty.
Definition order_map.hpp:68
const_iterator cend() const noexcept
Definition order_map.hpp:88
const_iterator begin() const noexcept
Definition order_map.hpp:85
const Order * find(OrderId order_id) const noexcept
Definition order_map.hpp:52
void clear() noexcept
Clear all orders.
Definition order_map.hpp:78
bool contains(OrderId order_id) const noexcept
Check if order exists.
Definition order_map.hpp:58
iterator begin() noexcept
Iterators.
Definition order_map.hpp:83
bool insert(Order *order) noexcept
Insert order into map.
Definition order_map.hpp:30
OrderMap(std::size_t initial_capacity=1024)
Constructor with initial capacity.
Definition order_map.hpp:23
std::size_t size() const noexcept
Get number of orders in map.
Definition order_map.hpp:63
Order * find(OrderId order_id) noexcept
Find order by OrderId.
Definition order_map.hpp:47
bool erase(OrderId order_id) noexcept
Remove order from map.
Definition order_map.hpp:40
const_iterator end() const noexcept
Definition order_map.hpp:86
MapType::const_iterator const_iterator
Definition order_map.hpp:20
const_iterator cbegin() const noexcept
Definition order_map.hpp:87
std::unordered_map< OrderId, Order * > MapType
Definition order_map.hpp:18
#define SLICK_DETAIL_NAMESPACE_BEGIN
Definition config.hpp:129
#define SLICK_DETAIL_NAMESPACE_END
Definition config.hpp:130
#define SLICK_ASSERT(expr)
Definition config.hpp:135
uint64_t OrderId
Unique order identifier.
Definition types.hpp:24
Order structure for Level 3 orderbook Uses intrusive list design for zero-allocation order queues at ...
Definition order.hpp:14