Advanced Chunk Processing Library 0.2.0
A comprehensive C++ library for advanced data chunking strategies and processing operations
Loading...
Searching...
No Matches
utils.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <algorithm>
4#include <functional>
5#include <map>
6#include <numeric>
7#include <random>
8#include <sstream>
9#include <string>
10#include <vector>
11
12namespace chunk_utils {
13
14// Statistics utilities
15template <typename T>
17public:
18 static T mean(const std::vector<T>& data) {
19 if (data.empty())
20 return T();
21 return std::accumulate(data.begin(), data.end(), T()) / static_cast<T>(data.size());
22 }
23
24 static T median(std::vector<T> data) {
25 if (data.empty())
26 return T();
27 std::sort(data.begin(), data.end());
28 if (data.size() % 2 == 0) {
29 // For even number of elements, return average of two middle values
30 size_t mid = data.size() / 2;
31 return (data[mid - 1] + data[mid]) / static_cast<T>(2);
32 } else {
33 // For odd number of elements, return middle value
34 return data[data.size() / 2];
35 }
36 }
37
38 static std::pair<T, size_t> mode(const std::vector<T>& data) {
39 if (data.empty())
40 return {T(), 0};
41 std::map<T, size_t> freq;
42 for (const auto& val : data)
43 freq[val]++;
44 return *std::max_element(freq.begin(), freq.end(), [](const auto& p1, const auto& p2) {
45 return p1.second < p2.second;
46 });
47 }
48};
49
50// Chunk manipulation utilities
51template <typename T>
53public:
54 static std::vector<std::vector<T>> merge_chunks(const std::vector<std::vector<T>>& chunks1,
55 const std::vector<std::vector<T>>& chunks2) {
56 std::vector<std::vector<T>> result = chunks1;
57 result.insert(result.end(), chunks2.begin(), chunks2.end());
58 return result;
59 }
60
61 static std::vector<std::vector<T>>
62 filter_chunks(const std::vector<std::vector<T>>& chunks,
63 std::function<bool(const std::vector<T>&)> predicate) {
64 std::vector<std::vector<T>> result;
65 std::copy_if(chunks.begin(), chunks.end(), std::back_inserter(result), predicate);
66 return result;
67 }
68
69 static std::vector<std::vector<T>>
70 transform_chunks(const std::vector<std::vector<T>>& chunks,
71 std::function<std::vector<T>(const std::vector<T>&)> transformer) {
72 std::vector<std::vector<T>> result;
73 std::transform(chunks.begin(), chunks.end(), std::back_inserter(result), transformer);
74 return result;
75 }
76};
77
78// Random chunk generation
79template <typename T>
81private:
82 static std::random_device rd;
83 static std::mt19937 gen;
84
85public:
86 static std::vector<T> generate_random_data(size_t size, T min_val, T max_val) {
87 std::vector<T> data(size);
88 std::uniform_real_distribution<T> dis(min_val, max_val);
89 std::generate(data.begin(), data.end(), [&]() { return dis(gen); });
90 return data;
91 }
92
93 static std::vector<std::vector<T>> generate_random_chunks(size_t num_chunks, size_t chunk_size,
94 T min_val, T max_val) {
95 std::vector<std::vector<T>> chunks(num_chunks);
96 for (auto& chunk : chunks) {
97 chunk = generate_random_data(chunk_size, min_val, max_val);
98 }
99 return chunks;
100 }
101};
102
103template <typename T>
104std::random_device ChunkGenerator<T>::rd;
105template <typename T>
107
108} // namespace chunk_utils
static std::random_device rd
Definition utils.hpp:82
static std::vector< T > generate_random_data(size_t size, T min_val, T max_val)
Definition utils.hpp:86
static std::mt19937 gen
Definition utils.hpp:83
static std::vector< std::vector< T > > generate_random_chunks(size_t num_chunks, size_t chunk_size, T min_val, T max_val)
Definition utils.hpp:93
static std::vector< std::vector< T > > transform_chunks(const std::vector< std::vector< T > > &chunks, std::function< std::vector< T >(const std::vector< T > &)> transformer)
Definition utils.hpp:70
static std::vector< std::vector< T > > merge_chunks(const std::vector< std::vector< T > > &chunks1, const std::vector< std::vector< T > > &chunks2)
Definition utils.hpp:54
static std::vector< std::vector< T > > filter_chunks(const std::vector< std::vector< T > > &chunks, std::function< bool(const std::vector< T > &)> predicate)
Definition utils.hpp:62
static T median(std::vector< T > data)
Definition utils.hpp:24
static std::pair< T, size_t > mode(const std::vector< T > &data)
Definition utils.hpp:38
static T mean(const std::vector< T > &data)
Definition utils.hpp:18