当前位置: 首页>>代码示例>>C++>>正文


C++ LogFile::getStreamDescriptions方法代码示例

本文整理汇总了C++中LogFile::getStreamDescriptions方法的典型用法代码示例。如果您正苦于以下问题:C++ LogFile::getStreamDescriptions方法的具体用法?C++ LogFile::getStreamDescriptions怎么用?C++ LogFile::getStreamDescriptions使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在LogFile的用法示例。


在下文中一共展示了LogFile::getStreamDescriptions方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: createIndexFile

bool IndexFile::createIndexFile(std::string indexFileName, LogFile& logFile)
{
    std::cout << "Creating Index File for logfile " << logFile.getFileName() << std::endl;
    std::vector<char> writeBuffer;
    writeBuffer.resize(8096 * 1024);
    std::fstream indexFile;
    indexFile.rdbuf()->pubsetbuf(writeBuffer.data(), writeBuffer.size());

    indexFile.open(indexFileName.c_str(), std::fstream::out | std::fstream::binary | std::fstream::trunc);
    
    const std::vector< StreamDescription > streams(logFile.getStreamDescriptions());
    indices.resize(streams.size());
    
//     std::cout << "Found " << streams.size() << " datastreams " << std::endl;
    
    for(std::vector< StreamDescription >::const_iterator it = streams.begin(); it != streams.end(); it++)
    {
        Index *newIndex = new Index(*it);
        size_t index = it->getIndex();
        if(index >= indices.size() )
        {
            throw std::runtime_error("Error building Index, Unexpected stream index");
        }
        indices[index] = newIndex;

    }

    while(logFile.readNextBlockHeader())
    {
        if(!logFile.readSampleHeader())
        {
            throw std::runtime_error("Error building index, log file seems corrupted");
        }
        
        indices[logFile.getSampleStreamIdx()]->addSample(logFile.getSamplePos(), logFile.getSampleTime());
    }

    IndexFileHeader header;
    header.numStreams = streams.size();
    
    assert(header.magic == header.getMagic());
    
    indexFile.write((char *) &header, sizeof(header));
    if(!indexFile.good())
        throw std::runtime_error("Error writing index header");
    
    off_t curProloguePos = sizeof(IndexFileHeader);
    off_t curDataPos = indices.size() * Index::getPrologueSize() + sizeof(IndexFileHeader);
    for(std::vector<Index* >::iterator it = indices.begin(); it != indices.end(); it++)
    {
//         std::cout << "Writing index for stream " << (*it)->getName() << " , num samples " << (*it)->getNumSamples() << std::endl;
    
        //Write index prologue
        curDataPos = (*it)->writeIndexToFile(indexFile, curProloguePos, curDataPos);
        curProloguePos += Index::getPrologueSize();
        
        if(!indexFile.good())
            throw std::runtime_error("Error writing index File");
        
        delete *it;
    }
    
    indexFile.close();
//     std::cout << "done " << std::endl;
    
    indices.clear();;
    
    return true;
}
开发者ID:marvin2k,项目名称:tools-pocolog_cpp,代码行数:69,代码来源:IndexFile.cpp


注:本文中的LogFile::getStreamDescriptions方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。