#ifndef SLANG_COMPRESSION_SYSTEM_H
#define SLANG_COMPRESSION_SYSTEM_H
#include "slang-basic.h"
namespace Slang
{
struct CompressionStyle
{
enum class Type
{
Level, ///< Use the value specified in 'level' to control compression
BestSpeed, ///< Best for speed (typically lower compression ration)
BestCompression, ///< Best compression (typically slower)
Default, ///< Default compression (a good balance between speed and size)
};
Type m_type = Type::Default; ///< The type
float m_level = 1.0f; ///< 0 lowest compression, 1 highest compression (Ignored if m_type != Type::Level)
};
enum class CompressionSystemType
{
None,
Deflate,
LZ4,
CountOf,
};
class ICompressionSystem : public ISlangUnknown
{
SLANG_COM_INTERFACE(0xcc935840, 0xe059, 0x4bb8, { 0xa2, 0x2d, 0x92, 0x7b, 0x3c, 0x73, 0x8f, 0x85 })
/** Get the compression system type
@return The compression system type */
virtual SLANG_NO_THROW CompressionSystemType SLANG_MCALL getSystemType() = 0;
/** compress
@param src Points to the start of the data to compress
@param srcSizeInBytes The size of the source data to compress in bytes
@param outBlob The input data compressed
@return SLANG_OK if successful */
virtual SLANG_NO_THROW SlangResult SLANG_MCALL compress(const CompressionStyle* style, const void* src, size_t srcSizeInBytes, ISlangBlob** outBlob) = 0;
/* decompress
@param compressed The start of the compressed data
@param compressedSizeInBytes The compressed size in bytes
@param decompressedSizeInBytes The size of the decompressed buffer. MUST be exactly the same as the original source size.
@param outDecompressed Where decompressed data is written
@return SLANG_OK if successful */
virtual SLANG_NO_THROW SlangResult SLANG_MCALL decompress(const void* compressed, size_t compressedSizeInBytes, size_t decompressedSizeInBytes, void* outDecompressed) = 0;
};
}
#endif