Slick OrderBook 1.1.0
High-Performance C++23 OrderBook Library
Loading...
Searching...
No Matches
concepts.hpp
Go to the documentation of this file.
1// Copyright 2026 Slick Quant
2// SPDX-License-Identifier: MIT
3
4#pragma once
5
8#include <concepts>
9#include <type_traits>
10
12
13// Forward declarations
14struct PriceLevelUpdate;
15struct OrderUpdate;
16struct Trade;
17struct TopOfBook;
18
21template<typename T>
22concept OrderBookObserver = requires(T observer,
23 const PriceLevelUpdate& level_update,
24 const OrderUpdate& order_update,
25 const Trade& trade,
26 const TopOfBook& tob) {
27 { observer.onPriceLevelUpdate(level_update) } -> std::same_as<void>;
28 { observer.onOrderUpdate(order_update) } -> std::same_as<void>;
29 { observer.onTrade(trade) } -> std::same_as<void>;
30 { observer.onTopOfBookUpdate(tob) } -> std::same_as<void>;
31};
32
34template<typename T>
35concept PriceLike = std::is_arithmetic_v<T> && std::totally_ordered<T>;
36
38template<typename T>
39concept QuantityLike = std::is_arithmetic_v<T> && std::totally_ordered<T>;
40
42template<typename T>
43concept TimestampLike = std::is_arithmetic_v<T> && std::totally_ordered<T>;
44
46template<typename T>
47concept Reservable = requires(T container, std::size_t n) {
48 { container.reserve(n) } -> std::same_as<void>;
49 { container.capacity() } -> std::convertible_to<std::size_t>;
50};
51
53template<typename A>
54concept AllocatorLike = requires(A alloc, std::size_t n) {
55 typename A::value_type;
56 { alloc.allocate(n) } -> std::same_as<typename A::value_type*>;
57 { alloc.deallocate(std::declval<typename A::value_type*>(), n) } -> std::same_as<void>;
58};
59
Concept for allocator-like types.
Definition concepts.hpp:54
Concept for orderbook observers Observers must implement all four callback methods.
Definition concepts.hpp:22
Concept for price-like types.
Definition concepts.hpp:35
Concept for quantity-like types.
Definition concepts.hpp:39
Concept for container that supports reserve()
Definition concepts.hpp:47
Concept for timestamp-like types.
Definition concepts.hpp:43
#define SLICK_NAMESPACE_END
Definition config.hpp:127
#define SLICK_NAMESPACE_BEGIN
Definition config.hpp:126