void TickCursor::decodeCurrentMessage()

in src/tick_cursor.cpp [106:137]


void TickCursor::decodeCurrentMessage() {
    uint32_t type_id = instrument_message_->typeId;
    while (message_decoders_.size() <= type_id)
        message_decoders_.push_back(nullptr);

    while (message_objects_.size() <= type_id)
        message_objects_.push_back(NULL);

    std::shared_ptr<MessageCodec> message_decoder = message_decoders_[type_id];
    if (message_decoder == nullptr) {
        const std::string *schema = cursor_->getMessageSchema(type_id);

        std::vector<Schema::TickDbClassDescriptor> descriptors =
            Schema::TickDbClassDescriptor::parseDescriptors(*schema, true);

        message_decoder = std::shared_ptr<MessageCodec>(new MessageCodec(&tbapi_module_, descriptors, 0));
        message_decoders_[type_id] = message_decoder;
    }

    PyObject *message_object = message_objects_[type_id];
    if (message_object == NULL) {
        message_object = tbapi_module_.newInstrumentMessageObject();
        //message_object = PyDict_New();
        if (message_object == NULL)
            THROW_EXCEPTION("Can't create object of class '%32s'", MESSAGE_OBJECT_CLASS_NAME.c_str());

        message_objects_[type_id] = message_object;
    }

    decodeHeader(message_object);
    message_decoder->decode(message_object, cursor_->getReader());
}