示例#1
0
文件: SAM.cpp 项目: Martinsos/snap
    void
SAMReader::readHeader(
    const char* fileName,
    ReaderContext& context)
{
    DataReader* data = DataSupplier::Default[false]->getDataReader(maxLineLen);
    if (! data->init(fileName)) {
        fprintf(stderr, "Unable to read file %s\n", fileName);
        soft_exit(1);
    }
    // todo: allow for larger headers
    _int64 headerSize = 1024 * 1024; // 1M header max
    char* buffer = data->readHeader(&headerSize);
    if (!parseHeader(fileName, buffer, buffer + headerSize, context.genome, &headerSize, &context.headerMatchesIndex)) {
        fprintf(stderr,"SAMReader: failed to parse header on '%s'\n",fileName);
        soft_exit(1);
    }
    _ASSERT(context.header == NULL);
    char* p = new char[headerSize + 1];
    memcpy(p, buffer, headerSize);
    p[headerSize] = 0;
    context.header = p;
    context.headerBytes = context.headerLength = headerSize;
    delete data;
}