public boolean processL2Snapshot()

in orderbook-core/src/main/java/com/epam/deltix/orderbook/core/impl/CompactL2SingleExchangeQuoteProcessor.java [130:188]


    public boolean processL2Snapshot(final PackageHeaderInfo pck) {
        if (!isSnapshotAllowed(pck)) {
            return false;
        }

        final ObjectList<BaseEntryInfo> entries = pck.getEntries();

        clear();
        int askCnt = 0;
        int bidCnt = 0;
        for (int i = 0; i < entries.size(); i++) {
            final BaseEntryInfo e = entries.get(i);
            if (e instanceof L2EntryNewInterface) {
                final L2EntryNewInterface entry = (L2EntryNewInterface) e;

                final int level = entry.getLevel();
                final QuoteSide side = entry.getSide();
                @Alphanumeric final long exchangeId = entry.getExchangeId();

                // We expect that exchangeId is valid and all entries have the same exchangeId
                final Option<MutableExchange<Quote, CompactL2Processor<Quote>>> exchange = getOrCreateExchange(exchangeId);
                if (!exchange.hasValue()) {
                    clear();
                    eventHandler.onBroken();
                    return false;
                }

                final CompactL2MarketSide<Quote> marketSide = exchange.get().getProcessor().getMarketSide(side);

                // Both side have the same max depth
                final int maxDepth = marketSide.getMaxDepth();
                if ((side == ASK && askCnt == maxDepth) || (side == BID && bidCnt == maxDepth)) {
                    continue;
                }
                marketSide.add(level, entry.getPrice(), entry.getSize());

                if (side == ASK) {
                    askCnt++;
                } else {
                    bidCnt++;
                }

                if (askCnt == maxDepth && bidCnt == maxDepth) {
                    break;
                }
            }
        }

        //Validate state after snapshot
        //We believe that snapshot is valid, but...
        if (!asks.validateState() || !bids.validateState()) {
            clear();
            eventHandler.onBroken();
            return false;
        }

        eventHandler.onSnapshot();
        return true;
    }