Advanced Chunk Processing Library 0.2.0
A comprehensive C++ library for advanced data chunking strategies and processing operations
Loading...
Searching...
No Matches
chunk_processing::HierarchicalSubChunkStrategy< T > Class Template Reference

#include <sub_chunk_strategies.hpp>

+ Inheritance diagram for chunk_processing::HierarchicalSubChunkStrategy< T >:
+ Collaboration diagram for chunk_processing::HierarchicalSubChunkStrategy< T >:

Public Member Functions

 HierarchicalSubChunkStrategy (std::vector< std::shared_ptr< ChunkStrategy< T > > > strategies, size_t min_size)
 
std::vector< std::vector< T > > apply (const std::vector< T > &data) const override
 

Private Member Functions

std::vector< std::vector< T > > process_chunk (const std::vector< T > &chunk, const std::shared_ptr< ChunkStrategy< T > > &strategy) const
 

Private Attributes

size_t min_size_
 
std::vector< std::shared_ptr< ChunkStrategy< T > > > strategies_
 

Detailed Description

template<typename T>
class chunk_processing::HierarchicalSubChunkStrategy< T >

Definition at line 136 of file sub_chunk_strategies.hpp.

Constructor & Destructor Documentation

◆ HierarchicalSubChunkStrategy()

template<typename T >
chunk_processing::HierarchicalSubChunkStrategy< T >::HierarchicalSubChunkStrategy ( std::vector< std::shared_ptr< ChunkStrategy< T > > >  strategies,
size_t  min_size 
)
inline

Definition at line 174 of file sub_chunk_strategies.hpp.

176 : min_size_(min_size) {
177 // Validate inputs
178 if (strategies.empty()) {
179 throw std::invalid_argument("Strategies vector cannot be empty");
180 }
181
182 // Deep copy strategies to ensure ownership
183 strategies_.reserve(strategies.size());
184 for (const auto& strategy : strategies) {
185 if (!strategy) {
186 throw std::invalid_argument("Strategy cannot be null");
187 }
188 strategies_.push_back(strategy);
189 }
190
191 if (min_size == 0) {
192 throw std::invalid_argument("Minimum size must be positive");
193 }
194 }
std::vector< std::shared_ptr< ChunkStrategy< T > > > strategies_

References chunk_processing::HierarchicalSubChunkStrategy< T >::strategies_.

Member Function Documentation

◆ apply()

template<typename T >
std::vector< std::vector< T > > chunk_processing::HierarchicalSubChunkStrategy< T >::apply ( const std::vector< T > &  data) const
inlineoverridevirtual

Implements chunk_processing::ChunkStrategy< T >.

Definition at line 196 of file sub_chunk_strategies.hpp.

196 {
197 if (data.empty()) {
198 return {};
199 }
200 if (data.size() <= min_size_) {
201 return {data};
202 }
203
204 try {
205 std::vector<std::vector<T>> current_chunks{data};
206
207 // Process each strategy level
208 for (const auto& strategy : strategies_) {
209 if (!strategy) {
210 throw std::runtime_error("Invalid strategy encountered");
211 }
212
213 std::vector<std::vector<T>> next_level;
214 next_level.reserve(current_chunks.size() *
215 2); // Reserve space to prevent reallocation
216
217 // Process each chunk at current level
218 for (const auto& chunk : current_chunks) {
219 if (chunk.empty()) {
220 continue;
221 }
222
223 auto sub_chunks = process_chunk(chunk, strategy);
224 next_level.insert(next_level.end(), std::make_move_iterator(sub_chunks.begin()),
225 std::make_move_iterator(sub_chunks.end()));
226 }
227
228 if (next_level.empty()) {
229 return current_chunks; // Return last valid chunking if next level failed
230 }
231
232 current_chunks = std::move(next_level);
233 }
234
235 return current_chunks;
236
237 } catch (const std::exception& e) {
238 throw std::runtime_error(std::string("Error in hierarchical strategy: ") + e.what());
239 }
240 }
std::vector< std::vector< T > > process_chunk(const std::vector< T > &chunk, const std::shared_ptr< ChunkStrategy< T > > &strategy) const

References chunk_processing::HierarchicalSubChunkStrategy< T >::min_size_, chunk_processing::HierarchicalSubChunkStrategy< T >::process_chunk(), and chunk_processing::HierarchicalSubChunkStrategy< T >::strategies_.

Referenced by demonstrate_multi_strategy_subchunking(), TEST_F(), and TEST_F().

◆ process_chunk()

template<typename T >
std::vector< std::vector< T > > chunk_processing::HierarchicalSubChunkStrategy< T >::process_chunk ( const std::vector< T > &  chunk,
const std::shared_ptr< ChunkStrategy< T > > &  strategy 
) const
inlineprivate

Definition at line 143 of file sub_chunk_strategies.hpp.

144 {
145 if (!strategy) {
146 throw std::runtime_error("Invalid strategy encountered");
147 }
148
149 if (chunk.size() <= min_size_) {
150 return {chunk};
151 }
152
153 try {
154 auto sub_chunks = strategy->apply(chunk);
155 if (sub_chunks.empty()) {
156 return {chunk};
157 }
158
159 // Validate sub-chunks
160 for (const auto& sub : sub_chunks) {
161 if (sub.empty()) {
162 return {chunk};
163 }
164 }
165
166 return sub_chunks;
167 } catch (const std::exception& e) {
168 // If strategy fails, return original chunk
169 return {chunk};
170 }
171 }

References chunk_processing::HierarchicalSubChunkStrategy< T >::min_size_.

Referenced by chunk_processing::HierarchicalSubChunkStrategy< T >::apply().

Member Data Documentation

◆ min_size_

◆ strategies_


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