41 template <
typename Holder>
45 enum class IncrementalRefreshBookInitializationTag {};
49 Action == Messaging::UpdateAction::Delete ||
50 Action == Messaging::UpdateAction::DeleteThru ||
51 Action == Messaging::UpdateAction::DeleteFrom>
55 Action == Messaging::UpdateAction::New ||
56 Action == Messaging::UpdateAction::Change ||
57 Action == Messaging::UpdateAction::Overlay>
60 template <Messaging::UpdateAction::Enum Action,
typename Holder>
64 template <Messaging::UpdateAction::Enum Action,
typename Holder>
68 template <Messaging::OrderUpdateAction::Enum Action>
struct IsOrderIdEntryAction : std::integral_constant<bool,
69 Action == Messaging::OrderUpdateAction::New ||
70 Action == Messaging::OrderUpdateAction::Update ||
71 Action == Messaging::OrderUpdateAction::Delete>
74 template <Messaging::OrderUpdateAction::Enum Action,
typename Holder>
78 template <Messaging::UpdateAction::Enum Action,
typename Holder>
84 typename decltype(message->entries())::Size size) { return message->entries(size); });
86 entry.setUpdateAction(Action);
87 entry.setEntryType(entryType);
89 entry.setRptSeq(rptSeq);
90 entry.setPriceLevel(priceLevel);
95 template <Messaging::UpdateAction::Enum Action,
typename Holder>
103 entry.entrySizeNull();
104 entry.numberOfOrdersNull();
109 template <Messaging::UpdateAction::Enum Action,
typename Holder>
117 entry.setEntryPx(price);
118 entry.setEntrySize(quantity);
119 entry.setNumberOfOrders(numberOfOrders);
124 template <Messaging::OrderUpdateAction::Enum Action,
typename Holder>
130 typename decltype(message->orderIdEntries())::Size size) { return message->orderIdEntries(size); });
132 entry.setOrderId(orderId);
133 entry.setOrderPriority(orderPriority);
134 entry.setDisplayQty(quantity);
135 entry.setReferenceId(referenceId);
136 entry.setOrderUpdateAction(Action);
148template <
typename Holder, details::IncrementalRefreshBookInitializationTag...>
150 ->
details::EnableIncrementalRefreshBook<Holder>
160template <
typename Holder, details::IncrementalRefreshBookInitializationTag...>
178template <Messaging::UpdateAction::Enum Action,
typename Holder>
201template <Messaging::UpdateAction::Enum Action,
typename Holder>
209 message,
securityId, entryType, rptSeq, priceLevel, price, quantity, numberOfOrders);
223template <Messaging::OrderUpdateAction::Enum Action,
typename Holder>
235 template <Messaging::UpdateAction::Enum Action>
238 template <
typename Holder,
typename... Arguments>
239 static auto apply(Holder& message, Arguments&&... arguments) ->
decltype(
240 addEntry<Action>(message, std::forward<Arguments>(arguments)...),
247 template <Messaging::OrderUpdateAction::Enum Action>
250 template <
typename Holder,
typename... Arguments>
251 static auto apply(Holder& message, Arguments&&... arguments) ->
decltype(
252 addOrderIdEntry<Action>(message, std::forward<Arguments>(arguments)...),
263 static auto apply(Holder& message, Arguments&&... arguments) ->
typename std::enable_if<
266 message, std::forward<Arguments>(arguments)...))>::type
269 message, std::forward<Arguments>(arguments)...);
281template <Messaging::OrderUpdateAction::Enum Action>
288 orderId, orderPriority, quantity, referenceId))>::type
291 orderId, orderPriority, quantity, referenceId);
316#define ONIXS_CMEMDH_ORDER_ID_ENTRY(Action, ...) \
317 ONIXS_CME_MDH_TESTING_NAMESPACE::details::deferMessageOperation([&]() { \
318 return ONIXS_CME_MDH_TESTING_NAMESPACE::orderIdEntry< \
319 ONIXS_CMEMDH_MESSAGING_NAMESPACE::OrderUpdateAction::Action>(__VA_ARGS__); \
#define ONIXS_CME_MDH_TESTING_NAMESPACE_END
#define ONIXS_CME_MDH_TESTING_NAMESPACE_BEGIN
#define ONIXS_CMEMDH_NODISCARD
The time point without the time-zone information.
Owns fixed-capacity storage for a prefixed CME message.
static Messaging::Timestamp now() noexcept
Returns current UTC time.
FixedPointDecimal< Int64, IntegralConstant< Int8, -9 > > Decimal9
Decimal with constant exponent -9.
std::uint32_t UInt32
uInt32.
auto makeInitializationRecipe(Arguments &&... arguments) -> typename std::enable_if< IsMutableMessageHolder< ExpectedHolder, Holder >::value, decltype(makeMessageRecipe< typename std::decay< Holder >::type >(makeMessageOperation< Operation >(std::forward< Arguments >(arguments)...)))>::type
Messaging::IncrementalRefreshBook46::Entry appendMdEntryBase(Holder &message, SecurityId securityId, Messaging::EntryTypeBook::Enum entryType, Messaging::UInt32 rptSeq, Messaging::UInt8 priceLevel)
typename std::enable_if< IsMutableMessageHolder< ExpectedHolder, Holder >::value, Holder & >::type EnableMutableMessageHolder
Messaging::IncrementalRefreshBook46::Entry appendMdEntry(Holder &message, SecurityId securityId, Messaging::EntryTypeBook::Enum entryType, Messaging::UInt32 rptSeq, Messaging::UInt8 priceLevel)
typename std::enable_if< IsValueMdEntryAction< Action >::value, EnableIncrementalRefreshBook< Holder > >::type EnableValueMdEntry
Messaging::IncrementalRefreshBook46::OrderIDEntry appendOrderIdEntry(Holder &message, OrderId orderId, OrderPriority orderPriority, DisplayQuantity quantity, Messaging::UInt8 referenceId)
MessageOperation< Operation, typename std::decay< Arguments >::type... > makeMessageOperation(Arguments &&... arguments)
typename std::enable_if< IsDeleteMdEntryAction< Action >::value, EnableIncrementalRefreshBook< Holder > >::type EnableDeleteMdEntry
auto initializeMessage(Holder &message, EventFlags::Bits eventIndicator, Messaging::Timestamp transactTime) noexcept -> EnableMutableMessageHolder< ExpectedHolder, Holder >
typename std::enable_if< IsOrderIdEntryAction< Action >::value, EnableIncrementalRefreshBook< Holder > >::type EnableOrderIdEntry
Group::Entry appendGroupEntry(Group group, Resize resize)
EnableMutableMessageHolder< IncrementalRefreshBook, Holder > EnableIncrementalRefreshBook
auto orderIdEntry(OrderId orderId, OrderPriority orderPriority, DisplayQuantity quantity, Messaging::UInt8 referenceId) -> typename std::enable_if< details::IsOrderIdEntryAction< Action >::value, decltype(details::makeMessageOperation< details::OrderIdEntryOperation< Action > >(orderId, orderPriority, quantity, referenceId))>::type
Creates a pipeline operation that appends an order-ID entry.
MessageHolder< Messaging::IncrementalRefreshBook46 > IncrementalRefreshBook
Owns storage for an incremental book refresh test message.
SecurityId securityId(const Messaging::FIX::MultiContainer &message)
Messaging::UInt64 OrderPriority
Represents an order's matching priority.
Messaging::Int32 SecurityId
Identifies a security in CME MDP 3.0 market data.
Messaging::UInt64 OrderId
Identifies an order in a Market By Order book.
Messaging::Int32 DisplayQuantity
Represents the displayed quantity of an order.
Messaging::MatchEventIndicator::Bits Bits
Protocol storage type for combined event flags.
static auto apply(Holder &message, Arguments &&... arguments) -> typename std::enable_if< IsDeleteMdEntryAction< Action >::value||IsValueMdEntryAction< Action >::value, decltype(MdEntryOperation< Action >::apply(message, std::forward< Arguments >(arguments)...))>::type
static auto apply(Holder &message, Arguments &&... arguments) -> decltype(addEntry< Action >(message, std::forward< Arguments >(arguments)...), appendMdEntry< Action >(message, std::forward< Arguments >(arguments)...))
static auto apply(Holder &message, Arguments &&... arguments) -> decltype(addOrderIdEntry< Action >(message, std::forward< Arguments >(arguments)...), appendOrderIdEntry< Action >(message, std::forward< Arguments >(arguments)...))