20 using clock = std::chrono::steady_clock;
21 const bool paced = m_speed_multiplier > 0.0;
23 std::uint64_t replayed = 0;
24 bool have_base =
false;
25 std::uint64_t base_timestamp = 0;
26 clock::time_point base_wall {};
31 const std::uint64_t feed_timestamp = timestamp_of(message);
33 base_timestamp = feed_timestamp;
34 base_wall = clock::now();
36 }
else if (feed_timestamp > base_timestamp) {
39 const double elapsed_ns =
40 static_cast<double>(feed_timestamp - base_timestamp) / m_speed_multiplier;
42 base_wall + std::chrono::nanoseconds {
static_cast<std::int64_t
>(elapsed_ns)};
43 std::this_thread::sleep_until(target);
auto parse(const char *data, size_t size, const MessageCallback &callback) -> void
Parses messages from a memory buffer and invokes a callback for each.
auto replay(std::span< const std::byte > data, const MessageCallback &callback) const -> std::uint64_t
Parses data and invokes callback for each message, paced by the message timestamps.
std::variant< SystemEventMessage, StockDirectoryMessage, StockTradingActionMessage, RegSHOMessage, MarketParticipantPositionMessage, MWCBDeclineLevelMessage, MWCBStatusMessage, IPOQuotingPeriodUpdateMessage, LULDAuctionCollarMessage, OperationalHaltMessage, AddOrderMessage, AddOrderMPIDAttributionMessage, OrderExecutedMessage, OrderExecutedWithPriceMessage, OrderCancelMessage, OrderDeleteMessage, OrderReplaceMessage, NonCrossTradeMessage, CrossTradeMessage, BrokenTradeMessage, NOIIMessage, RetailPriceImprovementIndicatorMessage, DLCRMessage > Message
A variant able to hold any one of the ITCH 5.0 message structs.