Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
kcenon::network::utils::compression_pipeline Class Reference

Message compression and decompression pipeline. More...

#include <compression_pipeline.h>

Collaboration diagram for kcenon::network::utils::compression_pipeline:
Collaboration graph

Classes

class  impl
 

Public Member Functions

 compression_pipeline (compression_algorithm algo=compression_algorithm::lz4, size_t compression_threshold=256)
 Constructs a compression pipeline.
 
 ~compression_pipeline () noexcept
 Destructor.
 
auto compress (std::span< const uint8_t > input) -> Result< std::vector< uint8_t > >
 Compresses input data.
 
auto compress (const std::vector< uint8_t > &input) -> Result< std::vector< uint8_t > >
 Compresses input data (vector overload)
 
auto decompress (std::span< const uint8_t > input) -> Result< std::vector< uint8_t > >
 Decompresses input data.
 
auto decompress (const std::vector< uint8_t > &input) -> Result< std::vector< uint8_t > >
 Decompresses input data (vector overload)
 
auto set_compression_threshold (size_t bytes) -> void
 Sets compression threshold.
 
auto get_compression_threshold () const -> size_t
 Gets current compression threshold.
 
auto get_algorithm () const -> compression_algorithm
 Gets current algorithm.
 

Private Attributes

std::unique_ptr< implpimpl_
 

Detailed Description

Message compression and decompression pipeline.

Thread Safety

  • All public methods are thread-safe
  • Can be used from multiple threads concurrently

Key Features

  • LZ4 fast compression algorithm
  • Configurable compression threshold
  • Automatic size threshold handling
  • Error handling via Result<T> pattern

Usage Example

auto pipeline = std::make_shared<compression_pipeline>(
256 // Don't compress messages smaller than 256 bytes
);
// Compress data
std::vector<uint8_t> data = {...};
auto result = pipeline->compress(data);
if (!result.is_err()) {
auto compressed = result.value();
// Send compressed data...
}
// Decompress data
auto decompressed = pipeline->decompress(compressed);

Definition at line 63 of file compression_pipeline.h.

Constructor & Destructor Documentation

◆ compression_pipeline()

kcenon::network::utils::compression_pipeline::compression_pipeline ( compression_algorithm algo = compression_algorithm::lz4,
size_t compression_threshold = 256 )
explicit

Constructs a compression pipeline.

Parameters
algoCompression algorithm to use
compression_thresholdMinimum size to compress (bytes)

Definition at line 448 of file compression_pipeline.cpp.

450 : pimpl_(std::make_unique<impl>(algo, compression_threshold))
451 {
452 }

◆ ~compression_pipeline()

kcenon::network::utils::compression_pipeline::~compression_pipeline ( )
defaultnoexcept

Destructor.

Member Function Documentation

◆ compress() [1/2]

auto kcenon::network::utils::compression_pipeline::compress ( const std::vector< uint8_t > & input) -> Result<std::vector<uint8_t>>

Compresses input data (vector overload)

Parameters
inputData to compress
Returns
Compressed data or error

Definition at line 462 of file compression_pipeline.cpp.

464 {
465 return pimpl_->compress(std::span<const uint8_t>(input));
466 }
auto compress(std::span< const uint8_t > input) -> Result< std::vector< uint8_t > >

◆ compress() [2/2]

auto kcenon::network::utils::compression_pipeline::compress ( std::span< const uint8_t > input) -> Result<std::vector<uint8_t>>

Compresses input data.

Parameters
inputData to compress
Returns
Compressed data or error

If input size is below threshold, returns uncompressed data. If compression fails or produces larger output, returns uncompressed data.

Definition at line 456 of file compression_pipeline.cpp.

458 {
459 return pimpl_->compress(input);
460 }

◆ decompress() [1/2]

auto kcenon::network::utils::compression_pipeline::decompress ( const std::vector< uint8_t > & input) -> Result<std::vector<uint8_t>>

Decompresses input data (vector overload)

Parameters
inputData to decompress
Returns
Decompressed data or error

Definition at line 474 of file compression_pipeline.cpp.

476 {
477 return pimpl_->decompress(std::span<const uint8_t>(input));
478 }
auto decompress(std::span< const uint8_t > input) -> Result< std::vector< uint8_t > >

◆ decompress() [2/2]

auto kcenon::network::utils::compression_pipeline::decompress ( std::span< const uint8_t > input) -> Result<std::vector<uint8_t>>

Decompresses input data.

Parameters
inputData to decompress
Returns
Decompressed data or error

Definition at line 468 of file compression_pipeline.cpp.

470 {
471 return pimpl_->decompress(input);
472 }

◆ get_algorithm()

auto kcenon::network::utils::compression_pipeline::get_algorithm ( ) const -> compression_algorithm

Gets current algorithm.

Returns
Compression algorithm

Definition at line 490 of file compression_pipeline.cpp.

491 {
492 return pimpl_->get_algorithm();
493 }
auto get_algorithm() const -> compression_algorithm

References kcenon::network::utils::compression_pipeline::impl::get_algorithm(), and pimpl_.

Here is the call graph for this function:

◆ get_compression_threshold()

auto kcenon::network::utils::compression_pipeline::get_compression_threshold ( ) const -> size_t

Gets current compression threshold.

Returns
Threshold in bytes

Definition at line 485 of file compression_pipeline.cpp.

References kcenon::network::utils::compression_pipeline::impl::get_compression_threshold(), and pimpl_.

Here is the call graph for this function:

◆ set_compression_threshold()

auto kcenon::network::utils::compression_pipeline::set_compression_threshold ( size_t bytes) -> void

Sets compression threshold.

Parameters
bytesMinimum size to compress

Definition at line 480 of file compression_pipeline.cpp.

481 {
483 }

Member Data Documentation

◆ pimpl_

std::unique_ptr<impl> kcenon::network::utils::compression_pipeline::pimpl_
private

Definition at line 135 of file compression_pipeline.h.

Referenced by get_algorithm(), and get_compression_threshold().


The documentation for this class was generated from the following files: