| 2548 | } |
| 2549 | |
| 2550 | StreamIndexedIO::Index::WriteInfo StreamIndexedIO::Index::writeUniqueDataCompressed( const char *data, size_t size, bool prefixSize ) |
| 2551 | { |
| 2552 | WriteInfo writeInfo; |
| 2553 | |
| 2554 | std::vector<char> compressedBuffer; |
| 2555 | size_t numBlocks = 0; |
| 2556 | |
| 2557 | if ( m_compressionLevel ) |
| 2558 | { |
| 2559 | numBlocks = compress( data, size, compressedBuffer, m_compressionLevel, m_compressor, m_compressionThreadCount, m_maxCompressedBlockSize ); |
| 2560 | } |
| 2561 | |
| 2562 | //! if compression fails or produces a buffer larger than the original |
| 2563 | //! write the original source data uncompressed |
| 2564 | if( numBlocks && !compressedBuffer.empty() && ( compressedBuffer.size() < size ) ) |
| 2565 | { |
| 2566 | writeInfo.offset = writeUniqueData( compressedBuffer.data(), compressedBuffer.size(), prefixSize ); |
| 2567 | writeInfo.size = compressedBuffer.size(); |
| 2568 | writeInfo.numCompressedBlocks = numBlocks; |
| 2569 | } |
| 2570 | else |
| 2571 | { |
| 2572 | writeInfo.offset = writeUniqueData( data, size, prefixSize ); |
| 2573 | writeInfo.size = size; |
| 2574 | writeInfo.numCompressedBlocks = 0; |
| 2575 | } |
| 2576 | |
| 2577 | |
| 2578 | return writeInfo; |
| 2579 | } |
| 2580 | |
| 2581 | void StreamIndexedIO::Index::deallocateWalk( NodeBase* n ) |
| 2582 | { |