| 116 | } |
| 117 | |
| 118 | int LITE_tensor_slice( |
| 119 | const LiteTensor tensor, const size_t* start, const size_t* end, |
| 120 | const size_t* step, size_t size, LiteTensor* slice_tensor) { |
| 121 | LITE_CAPI_BEGIN(); |
| 122 | LITE_ASSERT( |
| 123 | tensor && start && end && slice_tensor, |
| 124 | "The tensor pass to LITE c_api is null"); |
| 125 | std::vector<size_t> starts, ends, steps; |
| 126 | for (size_t i = 0; i < size; i++) { |
| 127 | starts.push_back(start[i]); |
| 128 | ends.push_back(end[i]); |
| 129 | if (step) { |
| 130 | steps.push_back(step[i]); |
| 131 | } |
| 132 | } |
| 133 | auto ret_tensor = static_cast<lite::Tensor*>(tensor)->slice(starts, ends, steps); |
| 134 | { |
| 135 | LITE_LOCK_GUARD(mtx_tensor); |
| 136 | get_global_tensor_holder()[ret_tensor.get()] = ret_tensor; |
| 137 | } |
| 138 | *slice_tensor = ret_tensor.get(); |
| 139 | LITE_CAPI_END(); |
| 140 | } |
| 141 | |
| 142 | int LITE_tensor_fill_zero(LiteTensor tensor) { |
| 143 | LITE_CAPI_BEGIN(); |