Program Listing for File LempelZiv.h
↰ Return to documentation for file (ADS/compression/LempelZiv.h)
/*--------------------------------------------------------------------------*/
/*---------------------------- File LempelZiv.h ----------------------------*/
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/*----------------------------- DEFINITIONS --------------------------------*/
/*--------------------------------------------------------------------------*/
#ifndef __ADS_LempelZiv
#define __ADS_LempelZiv
/* self-identification: #endif constant */
/*--------------------------------------------------------------------------*/
/*------------------------------ INCLUDES ----------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/Contract.h"
#include <algorithm>
#include <cstddef>
#include <cstdint>
#include <limits>
#include <map>
#include <optional>
#include <string>
#include <string_view>
#include <unordered_map>
#include <utility>
#include <vector>
/*--------------------------------------------------------------------------*/
/*--------------------------- NAMESPACE ------------------------------------*/
/*--------------------------------------------------------------------------*/
namespace ADS {
struct LZ77Phrase {
std::size_t distance , length;
std::optional< char > next;
friend bool operator==( const LZ77Phrase & a ,
const LZ77Phrase & b ) = default;
};
struct LZSSPhrase {
std::size_t distance , length;
char literal;
friend bool operator==( const LZSSPhrase & a ,
const LZSSPhrase & b ) = default;
};
struct LZ78Phrase {
std::size_t id;
char next;
friend bool operator==( const LZ78Phrase & a ,
const LZ78Phrase & b ) = default;
};
[[nodiscard]] inline std::vector< LZ77Phrase > lz77Parse(
std::string_view s ,
std::size_t w = std::numeric_limits< std::size_t >::max() );
[[nodiscard]] inline std::string lz77Decode(
const std::vector< LZ77Phrase > & P );
[[nodiscard]] inline std::vector< LZSSPhrase > lzssParse(
std::string_view s ,
std::size_t w = std::numeric_limits< std::size_t >::max() ,
std::size_t minLength = 1 );
[[nodiscard]] inline std::vector< LZSSPhrase > lzssParseHashed(
std::string_view s , std::size_t w , std::size_t minLength = 3 ,
std::size_t maxChain = std::numeric_limits< std::size_t >::max() );
[[nodiscard]] inline std::string lzssDecode(
const std::vector< LZSSPhrase > & P );
[[nodiscard]] inline std::vector< LZ78Phrase > lz78Parse(
std::string_view s ,
std::size_t maxPhrases = std::numeric_limits< std::size_t >::max() );
[[nodiscard]] inline std::string lz78Decode(
const std::vector< LZ78Phrase > & P ,
std::size_t maxPhrases = std::numeric_limits< std::size_t >::max() );
[[nodiscard]] inline std::vector< std::uint32_t > lzwEncode(
std::string_view s );
[[nodiscard]] inline std::string lzwDecode(
const std::vector< std::uint32_t > & I );
/*--------------------------------------------------------------------------*/
} // end( namespace ADS )
/*--------------------------------------------------------------------------*/
/*-------------------------- IMPLEMENTATION --------------------------------*/
/*--------------------------------------------------------------------------*/
#include "ADS/compression/impl/LempelZiv.tpp"
/*--------------------------------------------------------------------------*/
#endif /* LempelZiv.h included */
/*--------------------------------------------------------------------------*/
/*-------------------------- End File LempelZiv.h --------------------------*/
/*--------------------------------------------------------------------------*/