| 245 | } |
| 246 | |
| 247 | std::tuple<Strides, size_t, size_t> TensorInfo::calculate_padding_requirements(const PaddingSize &padding) |
| 248 | { |
| 249 | // Calculate resulting stride for the X, Y and Z dimension |
| 250 | const size_t stride_x = element_size(); |
| 251 | const size_t stride_y = (padding.left + _tensor_shape[0] + padding.right) * stride_x; |
| 252 | const size_t stride_z = (padding.top + _tensor_shape[1] + padding.bottom) * stride_y; |
| 253 | |
| 254 | Strides required_strides; |
| 255 | size_t required_total_size = 0; |
| 256 | const size_t required_offset_first_element = padding.left * stride_x + padding.top * stride_y; |
| 257 | |
| 258 | switch (_tensor_shape.num_dimensions()) |
| 259 | { |
| 260 | case 0: |
| 261 | { |
| 262 | if (_tensor_shape.total_size() > 0) |
| 263 | { |
| 264 | required_strides = Strides(stride_x, stride_x); |
| 265 | required_total_size = stride_z; |
| 266 | } |
| 267 | break; |
| 268 | } |
| 269 | case 1: |
| 270 | required_strides = compute_strides(*this, stride_x, stride_y); |
| 271 | required_total_size = stride_z; |
| 272 | break; |
| 273 | case 2: |
| 274 | required_strides = compute_strides(*this, stride_x, stride_y); |
| 275 | required_total_size = stride_z; |
| 276 | break; |
| 277 | default: |
| 278 | { |
| 279 | required_strides = compute_strides(*this, stride_x, stride_y, stride_z); |
| 280 | |
| 281 | const unsigned int idx_last_dimension = _tensor_shape.num_dimensions() - 1; |
| 282 | |
| 283 | required_total_size = |
| 284 | static_cast<size_t>(_tensor_shape[idx_last_dimension]) * required_strides[idx_last_dimension]; |
| 285 | break; |
| 286 | } |
| 287 | } |
| 288 | |
| 289 | return std::make_tuple(required_strides, required_offset_first_element, required_total_size); |
| 290 | } |
| 291 | |
| 292 | ITensorInfo &TensorInfo::set_lock_paddings(bool flag) |
| 293 | { |
nothing calls this directly
no test coverage detected