NextResult TickCursor::nextIfAvailable()

in src/tick_cursor.cpp [70:92]


NextResult TickCursor::nextIfAvailable() {
    if (cursor_ == nullptr)
        THROW("Cursor is null.");

    if (cursor_->isClosed())
        THROW("Cursor is closed.");

    if (cursor_->isAtEnd())
        return NextResult::END_OF_CURSOR;

    if (instrument_message_ == nullptr)
        instrument_message_ = std::shared_ptr<DxApi::InstrumentMessage>(new DxApi::InstrumentMessage());

    bool has_next = cursor_->nextIfAvailable(instrument_message_.get());
    if (has_next) {
        decodeCurrentMessage();
        return NextResult::OK;
    }

    return instrument_message_->cursorState >= CursorState::END ?
        NextResult::END_OF_CURSOR :
        NextResult::UNAVAILABLE;
}