| 34 | namespace arm_compute |
| 35 | { |
| 36 | void ITensor::copy_from(const ITensor &src) |
| 37 | { |
| 38 | if (&src == this) |
| 39 | { |
| 40 | return; |
| 41 | } |
| 42 | |
| 43 | const ITensorInfo *src_info = src.info(); |
| 44 | ITensorInfo *dst_info = this->info(); |
| 45 | |
| 46 | ARM_COMPUTE_ERROR_ON(src_info->num_dimensions() > dst_info->num_dimensions()); |
| 47 | ARM_COMPUTE_ERROR_ON(src_info->num_channels() != dst_info->num_channels()); |
| 48 | ARM_COMPUTE_ERROR_ON(src_info->element_size() != dst_info->element_size()); |
| 49 | |
| 50 | for (size_t d = 0; d < src_info->num_dimensions(); d++) |
| 51 | { |
| 52 | ARM_COMPUTE_ERROR_ON(src_info->dimension(d) > dst_info->dimension(d)); |
| 53 | } |
| 54 | |
| 55 | // Copy information about valid region |
| 56 | dst_info->set_valid_region(src_info->valid_region()); |
| 57 | |
| 58 | Window win_src; |
| 59 | win_src.use_tensor_dimensions(src_info->tensor_shape(), Window::DimY); |
| 60 | Window win_dst; |
| 61 | win_dst.use_tensor_dimensions(dst_info->tensor_shape(), Window::DimY); |
| 62 | |
| 63 | Iterator src_it(&src, win_src); |
| 64 | Iterator dst_it(this, win_dst); |
| 65 | |
| 66 | const size_t line_size = src_info->element_size() * src_info->dimension(0); |
| 67 | |
| 68 | execute_window_loop( |
| 69 | win_src, [&](const Coordinates &) { memcpy(dst_it.ptr(), src_it.ptr(), line_size); }, src_it, dst_it); |
| 70 | } |
| 71 | |
| 72 | #ifdef ARM_COMPUTE_ASSERTS_ENABLED |
| 73 | void ITensor::print(std::ostream &s, IOFormatInfo io_fmt) const |
nothing calls this directly
no test coverage detected