From f99dcdf422310400fe9f20f61697328e87485a34 Mon Sep 17 00:00:00 2001 From: Joel Grunbaum <joelgrun@gmail.com> Date: Wed, 19 Jan 2022 09:57:14 +0000 Subject: [PATCH] Insertion sort sides instead of hashmap --- protocol.cpp | 64 ++++++++++++++++++++++--------- 1 files changed, 45 insertions(+), 19 deletions(-) diff --git a/protocol.cpp b/protocol.cpp index a4b8475..f1083c0 100644 --- a/protocol.cpp +++ b/protocol.cpp @@ -175,31 +175,57 @@ json::DeletedMessage* message) { if (message->side == book::Buy) { - bs[message->product].bidSide.erase(message->id); + for (auto i = bs[message->product].bidSide.begin(); i != bs[message->product].bidSide.end(); i++) { + if (i->id == message->id) { + bs[message->product].bidSide.erase(i); + break; + } + } } else { - bs[message->product].askSide.erase(message->id); + for (auto i = bs[message->product].askSide.begin(); i != bs[message->product].askSide.end(); i++) { + if (i->id == message->id) { + bs[message->product].askSide.erase(i); + break; + } + } } } void tradeOrder(std::unordered_map<std::string, book::Book>& bs, json::TradeMessage* message) { - if (bs.find(message->passiveOrder) != bs.end()) { - if (message->tradeType == json::BUY_AGGRESSOR) { - if (message->passiveOrderRemaining > 0) { - bs[message->product].askSide.at(message->passiveOrder).volume = - message->passiveOrderRemaining; - } else { - bs[message->product].askSide.erase(message->passiveOrder); - } - } else if (message->tradeType == json::SELL_AGGRESSOR) { - if (message->passiveOrderRemaining > 0) { - bs[message->product].bidSide.at(message->passiveOrder).volume = - message->passiveOrderRemaining; - } else { - bs[message->product].bidSide.erase(message->passiveOrder); - } - } - } + if (message->tradeType == json::BUY_AGGRESSOR) { + if (message->passiveOrderRemaining > 0) { + for (auto& i : bs[message->product].askSide) { + if (i.id == message->passiveOrder) { + i.volume = message->passiveOrderRemaining; + break; + } + } + } else { + for (auto i = bs[message->product].askSide.begin(); i != bs[message->product].askSide.end(); i++) { + if (i->id == message->passiveOrder) { + bs[message->product].askSide.erase(i); + break; + } + } + } + } else if (message->tradeType == json::SELL_AGGRESSOR) { + if (message->passiveOrderRemaining > 0) { + for (auto& i : bs[message->product].bidSide) { + if (i.id == message->passiveOrder) { + i.volume = message->passiveOrderRemaining; + break; + } + } + } else { + for (auto i = bs[message->product].bidSide.begin(); i != bs[message->product].bidSide.end(); i++) { + if (i->id == message->passiveOrder) { + bs[message->product].bidSide.erase(i); + break; + } + } + } + } } void broker(std::unordered_map<std::string, book::Book>& bs, -- Gitblit v1.9.3