22 std::vector<std::vector<T>>
chunk(
const std::vector<T>& data) {
24 throw std::invalid_argument(
"Cannot chunk empty data");
27 std::vector<std::vector<T>> result;
28 std::vector<T> current_chunk;
30 for (
size_t i = 0; i < data.size(); ++i) {
31 current_chunk.push_back(data[i]);
33 if (current_chunk.size() >= window_size_) {
35 if (detect_boundary(current_chunk)) {
36 result.push_back(current_chunk);
37 current_chunk.clear();
42 if (!current_chunk.empty()) {
43 result.push_back(current_chunk);