Advanced Chunk Processing Library 0.2.0
A comprehensive C++ library for advanced data chunking strategies and processing operations
Loading...
Searching...
No Matches
chunk_compression.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <algorithm>
4#include <cmath>
5#include <vector>
6
8
9/**
10 * @brief Compression strategies for chunk data
11 */
12template <typename T>
14public:
15 /**
16 * @brief Run-length encode a chunk
17 * @param chunk Input chunk
18 * @return Encoded chunk with value-count pairs
19 */
20 static std::vector<std::pair<T, size_t>> run_length_encode(const std::vector<T>& chunk) {
21 std::vector<std::pair<T, size_t>> result;
22 if (chunk.empty())
23 return result;
24
25 T current = chunk[0];
26 size_t count = 1;
27
28 for (size_t i = 1; i < chunk.size(); ++i) {
29 if (chunk[i] == current) {
30 ++count;
31 } else {
32 result.emplace_back(current, count);
33 current = chunk[i];
34 count = 1;
35 }
36 }
37 result.emplace_back(current, count);
38
39 return result;
40 }
41
42 /**
43 * @brief Delta encode a chunk
44 * @param chunk Input chunk
45 * @return Delta-encoded chunk
46 */
47 static std::vector<T> delta_encode(const std::vector<T>& chunk) {
48 if (chunk.empty())
49 return {};
50
51 std::vector<T> result;
52 result.reserve(chunk.size());
53 result.push_back(chunk[0]);
54
55 for (size_t i = 1; i < chunk.size(); ++i) {
56 result.push_back(chunk[i] - chunk[i - 1]);
57 }
58
59 return result;
60 }
61
62 /**
63 * @brief Delta decode a chunk
64 * @param chunk Delta-encoded chunk
65 * @return Decoded chunk
66 */
67 static std::vector<T> delta_decode(const std::vector<T>& chunk) {
68 if (chunk.empty())
69 return {};
70
71 std::vector<T> result;
72 result.reserve(chunk.size());
73 result.push_back(chunk[0]);
74
75 for (size_t i = 1; i < chunk.size(); ++i) {
76 result.push_back(result.back() + chunk[i]);
77 }
78
79 return result;
80 }
81};
82
83} // namespace chunk_compression
Compression strategies for chunk data.
static std::vector< T > delta_encode(const std::vector< T > &chunk)
Delta encode a chunk.
static std::vector< std::pair< T, size_t > > run_length_encode(const std::vector< T > &chunk)
Run-length encode a chunk.
static std::vector< T > delta_decode(const std::vector< T > &chunk)
Delta decode a chunk.