36#ifndef VIGRA_BLOCKIFY_HXX
37#define VIGRA_BLOCKIFY_HXX
39#include "multi_array.hxx"
44namespace blockify_detail
47template <
unsigned int CurrentDimensions>
51 template <
unsigned int N,
class T,
class S,
class Shape>
52 static void make(MultiArrayView<N, T, S>& source,
53 MultiArrayView<N, MultiArrayView<N, T, S> >& blocks,
54 Shape current_block_begin,
55 Shape current_block_end,
56 Shape current_block_pos,
59 typedef typename Shape::value_type size_type;
60 enum{ n = CurrentDimensions - 1};
62 size_type blocks_extend = blocks.shape(n);
64 vigra_assert(blocks_extend != 0,
"");
65 for(current_block_pos[n] = 0, current_block_begin[n] = 0, current_block_end[n] = block_shape[n];
66 current_block_pos[n] != blocks_extend - 1;
67 ++current_block_pos[n],
68 current_block_begin[n] += block_shape[n],
69 current_block_end[n] += block_shape[n])
71 blockify_impl<n>::make(source, blocks, current_block_begin, current_block_end, current_block_pos, block_shape);
73 current_block_end[n] = source.shape(n);
74 blockify_impl<n>::make(source, blocks, current_block_begin, current_block_end, current_block_pos, block_shape);
79struct blockify_impl<0>
81 template <
unsigned int N,
class T,
class S,
class Shape>
82 static void make(MultiArrayView<N, T, S>& source,
83 MultiArrayView<N, MultiArrayView<N, T, S> >& blocks,
84 Shape current_block_begin,
85 Shape current_block_end,
86 Shape current_block_pos,
89 blocks[current_block_pos] = source.subarray(current_block_begin, current_block_end);
95template <
unsigned int N,
class T,
class S>
99 using namespace blockify_detail;
103 for(
unsigned int n = 0; n != N; ++n)
105 blocks_shape[n] = source.shape(n) / block_shape[n];
106 if(blocks_shape[n] * block_shape[n] != source.shape(n))
110 if(source.size() == 0)
115 blockify_impl<N>::make(source, blocks, a, b, c, block_shape);
Base class for, and view to, MultiArray.
Definition multi_array.hxx:705
MultiArrayShape< actual_dimension >::type difference_type
Definition multi_array.hxx:739
Main MultiArray class containing the memory management.
Definition multi_array.hxx:2479