sandbox
Loading...
Searching...
No Matches
compression.hpp
1#ifndef LIBSBX_UTILITY_COMPRESSION_HPP_
2#define LIBSBX_UTILITY_COMPRESSION_HPP_
3
4#include <span>
5#include <vector>
6#include <stdexcept>
7#include <cstdint>
8
9namespace sbx::utility {
10
11struct compression_error : public std::runtime_error {
12 explicit compression_error(std::string_view message)
13 : std::runtime_error{std::string{message}} { }
14}; // struct compression_error
15
16struct decompression_error : public std::runtime_error {
17 explicit decompression_error(std::string_view message)
18 : std::runtime_error{std::string{message}} { }
19}; // struct decompression_error
20
21enum class compression_type : std::uint8_t {
22 lz4 = 0
23}; // enum class compression_type
24
25template<compression_type Type>
27 [[nodiscard]] static auto compress(std::span<const char> input) -> std::vector<char>;
28 [[nodiscard]] static auto decompress(std::span<const char> input, const std::size_t original_size) -> std::vector<char>;
29}; // struct basic_compressor
30
31template<>
32struct basic_compressor<compression_type::lz4> {
33 [[nodiscard]] static auto compress(std::span<const char> input) -> std::vector<char>;
34 [[nodiscard]] static auto decompress(std::span<const char> input, const std::size_t original_size) -> std::vector<char>;
35}; // struct basic_compressor
36
38
39template<typename Type, compression_type CompressionType = compression_type::lz4>
40auto compress(std::span<const Type> input) -> std::vector<char> {
41 return basic_compressor<CompressionType>::compress({reinterpret_cast<const char*>(input.data()), input.size() * sizeof(Type)});
42}
43
44template<typename Type, compression_type CompressionType = compression_type::lz4>
45auto decompress(std::span<const char> input, const std::size_t original_size) -> std::vector<Type> {
46 return basic_compressor<CompressionType>::decompress({reinterpret_cast<const char*>(input.data()), input.size() * sizeof(Type)}, original_size * sizeof(Type));
47}
48
49} // namespace sbx::utility
50
51#endif // LIBSBX_UTILITY_COMPRESSION_HPP_
Definition: compression.hpp:26
Definition: compression.hpp:11
Definition: compression.hpp:16