16ac3a280SJérôme Duval /* 26ac3a280SJérôme Duval * Copyright 2017, Jérôme Duval. 36ac3a280SJérôme Duval * Copyright 2014, Ingo Weinhold, ingo_weinhold@gmx.de. 46ac3a280SJérôme Duval * Distributed under the terms of the MIT License. 56ac3a280SJérôme Duval */ 66ac3a280SJérôme Duval #ifndef _ZSTD_COMPRESSION_ALGORITHM_H_ 76ac3a280SJérôme Duval #define _ZSTD_COMPRESSION_ALGORITHM_H_ 86ac3a280SJérôme Duval 96ac3a280SJérôme Duval 106ac3a280SJérôme Duval #include <CompressionAlgorithm.h> 116ac3a280SJérôme Duval 126ac3a280SJérôme Duval 136ac3a280SJérôme Duval // compression level 146ac3a280SJérôme Duval enum { 156ac3a280SJérôme Duval B_ZSTD_COMPRESSION_NONE = 0, 166ac3a280SJérôme Duval B_ZSTD_COMPRESSION_FASTEST = 1, 17*a8981308SAugustin Cavalier B_ZSTD_COMPRESSION_BEST = 22, 18*a8981308SAugustin Cavalier B_ZSTD_COMPRESSION_DEFAULT = 4, 196ac3a280SJérôme Duval }; 206ac3a280SJérôme Duval 216ac3a280SJérôme Duval 226ac3a280SJérôme Duval class BZstdCompressionParameters : public BCompressionParameters { 236ac3a280SJérôme Duval public: 246ac3a280SJérôme Duval BZstdCompressionParameters( 256ac3a280SJérôme Duval int compressionLevel 266ac3a280SJérôme Duval = B_ZSTD_COMPRESSION_DEFAULT); 276ac3a280SJérôme Duval virtual ~BZstdCompressionParameters(); 286ac3a280SJérôme Duval 296ac3a280SJérôme Duval int32 CompressionLevel() const; 306ac3a280SJérôme Duval void SetCompressionLevel(int32 level); 316ac3a280SJérôme Duval 326ac3a280SJérôme Duval size_t BufferSize() const; 336ac3a280SJérôme Duval void SetBufferSize(size_t size); 346ac3a280SJérôme Duval 356ac3a280SJérôme Duval private: 366ac3a280SJérôme Duval int32 fCompressionLevel; 376ac3a280SJérôme Duval size_t fBufferSize; 386ac3a280SJérôme Duval }; 396ac3a280SJérôme Duval 406ac3a280SJérôme Duval 416ac3a280SJérôme Duval class BZstdDecompressionParameters : public BDecompressionParameters { 426ac3a280SJérôme Duval public: 436ac3a280SJérôme Duval BZstdDecompressionParameters(); 446ac3a280SJérôme Duval virtual ~BZstdDecompressionParameters(); 456ac3a280SJérôme Duval 466ac3a280SJérôme Duval size_t BufferSize() const; 476ac3a280SJérôme Duval void SetBufferSize(size_t size); 486ac3a280SJérôme Duval 496ac3a280SJérôme Duval private: 506ac3a280SJérôme Duval size_t fBufferSize; 516ac3a280SJérôme Duval }; 526ac3a280SJérôme Duval 536ac3a280SJérôme Duval 546ac3a280SJérôme Duval class BZstdCompressionAlgorithm : public BCompressionAlgorithm { 556ac3a280SJérôme Duval public: 566ac3a280SJérôme Duval BZstdCompressionAlgorithm(); 576ac3a280SJérôme Duval virtual ~BZstdCompressionAlgorithm(); 586ac3a280SJérôme Duval 596ac3a280SJérôme Duval virtual status_t CreateCompressingInputStream(BDataIO* input, 606ac3a280SJérôme Duval const BCompressionParameters* parameters, 616ac3a280SJérôme Duval BDataIO*& _stream); 626ac3a280SJérôme Duval virtual status_t CreateCompressingOutputStream(BDataIO* output, 636ac3a280SJérôme Duval const BCompressionParameters* parameters, 646ac3a280SJérôme Duval BDataIO*& _stream); 656ac3a280SJérôme Duval virtual status_t CreateDecompressingInputStream(BDataIO* input, 666ac3a280SJérôme Duval const BDecompressionParameters* parameters, 676ac3a280SJérôme Duval BDataIO*& _stream); 686ac3a280SJérôme Duval virtual status_t CreateDecompressingOutputStream(BDataIO* output, 696ac3a280SJérôme Duval const BDecompressionParameters* parameters, 706ac3a280SJérôme Duval BDataIO*& _stream); 716ac3a280SJérôme Duval 726ac3a280SJérôme Duval virtual status_t CompressBuffer(const void* input, 736ac3a280SJérôme Duval size_t inputSize, void* output, 746ac3a280SJérôme Duval size_t outputSize, size_t& _compressedSize, 756ac3a280SJérôme Duval const BCompressionParameters* parameters 766ac3a280SJérôme Duval = NULL); 776ac3a280SJérôme Duval virtual status_t DecompressBuffer(const void* input, 786ac3a280SJérôme Duval size_t inputSize, void* output, 796ac3a280SJérôme Duval size_t outputSize, 806ac3a280SJérôme Duval size_t& _uncompressedSize, 816ac3a280SJérôme Duval const BDecompressionParameters* parameters 826ac3a280SJérôme Duval = NULL); 836ac3a280SJérôme Duval 846ac3a280SJérôme Duval private: 856ac3a280SJérôme Duval struct CompressionStrategy; 866ac3a280SJérôme Duval struct DecompressionStrategy; 876ac3a280SJérôme Duval 886ac3a280SJérôme Duval template<typename BaseClass, typename Strategy, typename StreamType> struct Stream; 896ac3a280SJérôme Duval template<typename BaseClass, typename Strategy, typename StreamType> 906ac3a280SJérôme Duval friend struct Stream; 916ac3a280SJérôme Duval 926ac3a280SJérôme Duval private: 936ac3a280SJérôme Duval static status_t _TranslateZstdError(size_t error); 946ac3a280SJérôme Duval }; 956ac3a280SJérôme Duval 966ac3a280SJérôme Duval 976ac3a280SJérôme Duval #endif // _ZSTD_COMPRESSION_ALGORITHM_H_ 98