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());
}