in orderbook-core/src/main/java/com/epam/deltix/orderbook/core/impl/L1SingleExchangeQuoteProcessor.java [108:141]
public boolean processL1Snapshot(final PackageHeaderInfo pck) {
if (!eventHandler.isSnapshotAllowed(pck.getPackageType())) {
return false;
}
// We expect that all entries are sorted by exchange id
final ObjectList<BaseEntryInfo> entries = pck.getEntries();
for (int i = 0; i < entries.size(); i++) {
final BaseEntryInfo entryInfo = entries.get(i);
final L1EntryInfo entry = (L1EntryInfo) entryInfo;
final QuoteSide side = entry.getSide();
@Alphanumeric final long exchangeId = entry.getExchangeId();
final Option<MutableExchange<Quote, L1Processor<Quote>>> exchange = getOrCreateExchange(exchangeId);
if (!exchange.hasValue()) {
// TODO Log error and throw exception or add package validation
return false;
}
final L1MarketSide<Quote> marketSide = exchange.get().getProcessor().getMarketSide(side);
final Quote quote;
if (marketSide.isEmpty()) {
quote = pool.borrow();
marketSide.insert(quote);
} else {
quote = marketSide.getBestQuote();
}
quote.copyFrom(pck, entry);
}
eventHandler.onSnapshot();
return true;
}