in src/dxapi-tests.cpp [286:341]
bool test_read_dynamic_types(TickDb &db, const char *streamName, uint64_t nMax, uintptr_t preloadSize)
{
vector<string> messageNames;
vector<string> types;
vector<uint64_t> numMsg;
auto stream = db.getStream(streamName);
SelectionOptions opt;
/*vector<InstrumentIdentity> symbols;*/
unique_ptr<TickCursor> pCursor(stream->select(TIMESTAMP_NULL, opt, NULL, NULL));
TickCursor &cursor = *pCursor;
InstrumentMessage msg;
//messageNames.push_back("<unknown>");
//numMsg.push_back(0);
//cursor.registerMessageType(0, messageNames[0]);
#ifdef PRELOAD
preload(cursor, preloadSize, 0x400);
#endif
DataReader &reader = cursor.getReader();
START_TEST(test dynamic);
msg.cursor = &cursor;
while (cursor.next(&msg) && nMessagesRead < nMax) {
if (numMsg.size() > msg.typeId) {
// Do nothing
++numMsg[msg.typeId];
}
else {
printf("%s\n", msg.getTypeName()->c_str());
//cursor.registerMessageType((unsigned)messageNames.size(), msg.getTypeName()->c_str());
messageNames.resize(msg.typeId + 1);
numMsg.resize(msg.typeId + 1);
numMsg[msg.typeId] = 1;
messageNames[msg.typeId] = *msg.getTypeName();
}
++nMessagesRead;
}
//uint64_t end = time_ns();
//printf("Bytes received: %llu\n", (long long unsigned)cursor.getNumBytesReceived());
//printf("Bytes read: %llu, avg msg size: %.1lf bytes\n", (long long unsigned)cursor.getNumBytesRead(), (double)cursor.getNumBytesRead() / nMessagesRead);
//printf("Decoding speed: %.1lf bytes/s\n", (double)cursor.getNumBytesRead() / timetodouble(end - start));
END_READING(test bars);
printf("Number of message types: %u\n", (unsigned)messageNames.size());
puts("Number of messages read:");
for (int i = 0; i < (int)messageNames.size(); ++i) {
printf("%llu\t%s\n", numMsg[i], messageNames[i].c_str());
}
puts("");
cursor.close();
return true;
}