public boolean handleReplace()

in orderbook-core/src/main/java/com/epam/deltix/orderbook/core/impl/L3SingleExchangeQuoteProcessor.java [145:182]


    public boolean handleReplace(final PackageHeaderInfo pck, final L3EntryUpdateInfo msg) {
        final QuoteSide side = msg.getSide();
        final CharSequence quoteId = msg.getQuoteId();
        final L3MarketSide<Quote> newSide = getMarketSide(side);

        final EntryValidationCode errorCode = newSide.isInvalidInsert(InsertType.ADD_BACK, quoteId, msg.getPrice(), msg.getSize(), side);
        if (errorCode != null) {
            return failUpdate(pck, errorCode);
        }

        final Quote quote = newSide.remove(quoteId);
        if (quote != null) { // replace didn't change side
            quote.copyFrom(pck, msg);
            newSide.add(quote);
            return true;
        }

        final L3MarketSide<Quote> prevSide = getMarketSide(side == ASK ? BID : ASK);
        final Quote removed = prevSide.remove(quoteId);
        if (removed != null) { // replace changed side
            Quote newQuote = removed;
            if (newSide.isFull()) {
                pool.release(removed);
                final Quote worstQuote = newSide.getWorstQuote();
                if (side == ASK && Decimal64Utils.isGreater(worstQuote.getPrice(), msg.getPrice()) ||
                        side == BID && Decimal64Utils.isGreater(msg.getPrice(), worstQuote.getPrice())) {
                    newQuote = newSide.remove(worstQuote.getQuoteId());
                } else {
                    return true;
                }
            }
            newQuote.copyFrom(pck, msg);
            newSide.add(newQuote);
            return true;
        }

        return failUpdate(pck, EntryValidationCode.UNKNOWN_QUOTE_ID);
    }