| 2624 | // dimensions given in axis. |
| 2625 | template <typename In, typename Out> |
| 2626 | inline bool Reduce(const In* input_data, const int* input_dims, |
| 2627 | const int* output_dims, const int input_num_dims, |
| 2628 | const int output_num_dims, const int* axis, |
| 2629 | const int num_axis, int* input_iter, |
| 2630 | Out reducer(const Out current, const In in), |
| 2631 | Out* output_data) { |
| 2632 | // Reset input iterator. |
| 2633 | for (int idx = 0; idx < input_num_dims; ++idx) { |
| 2634 | input_iter[idx] = 0; |
| 2635 | } |
| 2636 | // Iterate through input_data. |
| 2637 | do { |
| 2638 | size_t input_offset = |
| 2639 | ReducedOutputOffset(input_num_dims, input_dims, input_iter, 0, nullptr); |
| 2640 | size_t output_offset = ReducedOutputOffset(input_num_dims, input_dims, |
| 2641 | input_iter, num_axis, axis); |
| 2642 | output_data[output_offset] = |
| 2643 | reducer(output_data[output_offset], input_data[input_offset]); |
| 2644 | } while (NextIndex(input_num_dims, input_dims, input_iter)); |
| 2645 | return true; |
| 2646 | } |
| 2647 | |
| 2648 | inline bool ResolveAxis(const int num_dims, const int* axis, |
| 2649 | const int64_t num_axis, int* out_axis, |
nothing calls this directly
no test coverage detected