diff options
Diffstat (limited to 'src/c/AclTensor.cpp')
-rw-r--r-- | src/c/AclTensor.cpp | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/src/c/AclTensor.cpp b/src/c/AclTensor.cpp index 0d884b1ec3..8f6ce45628 100644 --- a/src/c/AclTensor.cpp +++ b/src/c/AclTensor.cpp @@ -22,11 +22,13 @@ * SOFTWARE. */ #include "arm_compute/AclEntrypoints.h" -#include "src/common/ITensor.h" +#include "arm_compute/AclUtils.h" +#include "src/common/ITensorV2.h" #include "src/common/utils/Macros.h" namespace { +using namespace arm_compute; /**< Maximum allowed dimensions by Compute Library */ constexpr int32_t max_allowed_dims = 6; @@ -55,6 +57,12 @@ bool is_desc_valid(const AclTensorDescriptor &desc) } return true; } + +StatusCode convert_and_validate_tensor(AclTensor tensor, ITensorV2 **internal_tensor) +{ + *internal_tensor = get_internal(tensor); + return detail::validate_internal_tensor(*internal_tensor); +} } // namespace extern "C" AclStatus AclCreateTensor(AclTensor *external_tensor, @@ -146,3 +154,37 @@ extern "C" AclStatus AclDestroyTensor(AclTensor external_tensor) return AclSuccess; } + +extern "C" AclStatus AclGetTensorSize(AclTensor tensor, uint64_t *size) +{ + using namespace arm_compute; + + if(size == nullptr) + { + return AclStatus::AclInvalidArgument; + } + + ITensorV2 *internal_tensor{ nullptr }; + auto status = convert_and_validate_tensor(tensor, &internal_tensor); + ARM_COMPUTE_RETURN_CENUM_ON_FAILURE(status); + + *size = internal_tensor->get_size(); + return utils::as_cenum<AclStatus>(status); +} + +extern "C" AclStatus AclGetTensorDescriptor(AclTensor tensor, AclTensorDescriptor *desc) +{ + using namespace arm_compute; + + if(desc == nullptr) + { + return AclStatus::AclInvalidArgument; + } + + ITensorV2 *internal_tensor{ nullptr }; + const auto status = convert_and_validate_tensor(tensor, &internal_tensor); + ARM_COMPUTE_RETURN_CENUM_ON_FAILURE(status); + + *desc = internal_tensor->get_descriptor(); + return utils::as_cenum<AclStatus>(status); +}
\ No newline at end of file |