bool test_read_dynamic_types()

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