xref: /haiku/headers/private/support/ZstdCompressionAlgorithm.h (revision 268f99dd7dc4bd7474a8bd2742d3f1ec1de6752a)
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