35 auto const block_dim = stop - start;
39 std::vector<typename Container::value_type> out_array(size);
42 for (
int x = 0; x < block_dim[0]; ++x) {
43 for (
int y = 0; y < block_dim[1]; ++y) {
44 for (
int z = 0; z < block_dim[2]; ++z) {
47 x + start[0], y + start[1], z + start[2], dimensions, memory_order);
49 auto const out_index =
53 out_array[out_index] = in_array[in_index];
70 auto const cropped_xy_stride = cropped_dim[1] * cropped_dim[2];
71 auto const padded_xy_stride = padded_dim[1] * padded_dim[2];
74 std::vector<typename T::value_type> padded_array(
75 padded_dim[0] * padded_dim[1] * padded_dim[2]);
78 auto const padded_start_x = pad_left[0] * padded_xy_stride;
79 auto const padded_start_y = pad_left[1] * padded_dim[2] + pad_left[2];
82 for (
int x = 0; x < cropped_dim[0]; ++x) {
83 auto const cropped_x_offset = x * cropped_xy_stride;
84 auto const padded_x_offset = padded_start_x + x * padded_xy_stride;
86 for (
int y = 0; y < cropped_dim[1]; ++y) {
87 auto const cropped_y_offset = cropped_x_offset + y * cropped_dim[2];
88 auto const padded_y_offset =
89 padded_x_offset + y * padded_dim[2] + padded_start_y;
92 for (
int i = 0; i < cropped_dim[2]; i++) {
93 padded_array[padded_y_offset + i] =
94 cropped_array[cropped_y_offset + i].real();
auto extract_block(Container const &in_array, Utils::Vector3i const &dimensions, Utils::Vector3i const &start, Utils::Vector3i const &stop, Utils::MemoryOrder memory_order, Utils::MemoryOrder output_memory_order)
int get_linear_index(int a, int b, int c, const Vector3i &adim, MemoryOrder memory_order=MemoryOrder::COLUMN_MAJOR)
get the linear index from the position (a,b,c) in a 3D grid of dimensions adim.