/*! * Copyright (c) 2018 by Contributors * \file c_runtime_api.cc * \brief DGL C API common implementations */ #include "c_api_common.h" using tvm::runtime::TVMArgs; using tvm::runtime::TVMArgValue; using tvm::runtime::TVMRetValue; using tvm::runtime::PackedFunc; using tvm::runtime::NDArray; namespace dgl { DLManagedTensor* CreateTmpDLManagedTensor(const TVMArgValue& arg) { const DLTensor* dl_tensor = arg; DLManagedTensor* ret = new DLManagedTensor(); ret->deleter = [] (DLManagedTensor* self) { delete self; }; ret->manager_ctx = nullptr; ret->dl_tensor = *dl_tensor; return ret; } PackedFunc ConvertNDArrayVectorToPackedFunc(const std::vector& vec) { auto body = [vec](TVMArgs args, TVMRetValue* rv) { size_t which = args[0]; if (which >= vec.size()) { LOG(FATAL) << "invalid choice"; } else { *rv = std::move(vec[which]); } }; return PackedFunc(body); } } // namespace dgl