示例#1
0
int Appender::resetMask()
{
	emptyMask();
	addMask(COMLOG_FATAL);
	addMask(COMLOG_WARNING);
	addMask(COMLOG_NOTICE);
	addMask(COMLOG_TRACE);
	addMask(COMLOG_DEBUG);
	return 0;
}
ConstRLEChunk const& ScanRLEArrayIterator::getRQChunk()
{
    Address addr(_desc->getId(), _attId, getPosition());

    ifstream in;
    chunkId chunkDesc;
    chunkFileInfo payloadFileInfo;

    chunkDesc.first = _attId;
    chunkDesc.second = _chunkNo;

    payloadFileInfo = _chunkFileData[chunkDesc];
    size_t payloadOffset = payloadFileInfo.first;
    size_t payloadSize = payloadFileInfo.second;

    vector<char> data (payloadSize, 0);
    _chunkFile.seekg(payloadOffset, ios_base::beg);
    _chunkFile.read(&data[0], payloadSize);

    TypeId type = _desc->getAttributes()[_attId].getType();
    uint16_t compressionMethod = _desc->getAttributes()[_attId].getDefaultCompressionMethod();

    _chunk.initialize(_desc, addr, compressionMethod);

    if (_desc->getEmptyBitmapAttribute() && _attId == _desc->getEmptyBitmapAttribute()->getId())
    {
        //bitmask chunk
        ConstRLEEmptyBitmap emptyMask(&data[0]);
        //inefficient double copy
        shared_ptr<RLEEmptyBitmap> em(new RLEEmptyBitmap(emptyMask));
        _chunk.setMask(em);
    }
    else
    {
        //data chunk

        //another inefficient double copy
        ConstRLEPayload payload(&data[0]);
        _chunk.setPayload(payload);

        //now we still need to find bitmask and attach it to chunk
        if (_desc->getEmptyBitmapAttribute())
        {
            ifstream bmin;
            ostringstream bmPath;
            chunkId bmId;
            chunkFileInfo bmFile;

            bmId.first = _desc->getEmptyBitmapAttribute()->getId();
            bmId.second = _chunkNo;
            bmFile = _chunkFileData[bmId];
            size_t bitmaskSize = bmFile.second;
            size_t fileOffset = bmFile.first;

            vector<char> bmData(bitmaskSize,0);
            _chunkFile.seekg(fileOffset, ios_base::beg);
            _chunkFile.read(&bmData[0], bitmaskSize);

            //another inefficient double copy
            ConstRLEEmptyBitmap emptyMask(&bmData[0]);
            shared_ptr<RLEEmptyBitmap> em(new RLEEmptyBitmap(emptyMask));

            _chunk.setMask(em);
        }
        else //no bitmask? create one that looks like "111111111111111"
        {
           size_t nBits = _chunk.getNumberOfElements(true);
           shared_ptr<RLEEmptyBitmap> em(new RLEEmptyBitmap(nBits));
            _chunk.setMask(em);
        }
    }
    return _chunk;
}