#ifndef TRITON_TVM_FFI_META_H_ #define TRITON_TVM_FFI_META_H_ #include namespace triton_tvm_ffi { template struct FillMetaImpl { static inline void apply(tvm::ffi::Map &meta, tvm::ffi::Array::iterator &argsBegin, const tvm::ffi::Array::iterator &argsEnd, const tvm::ffi::Map &kwargs); }; template <> struct FillMetaImpl<> { static inline void apply(tvm::ffi::Map &meta, tvm::ffi::Array::iterator &argsBegin, const tvm::ffi::Array::iterator &argsEnd, const tvm::ffi::Map &kwargs) {} }; template struct FillMetaImpl { static inline void apply(tvm::ffi::Map &meta, tvm::ffi::Array::iterator &argsBegin, const tvm::ffi::Array::iterator &argsEnd, const tvm::ffi::Map &kwargs) { if (argsBegin != argsEnd) { meta.Set(K, *argsBegin++); } else if (auto val = kwargs.Get(K)) { meta.Set(K, *val); } FillMetaImpl::apply(meta, argsBegin, argsEnd, kwargs); } }; template struct FillMeta { static inline void apply(tvm::ffi::Map &meta, const tvm::ffi::Array &args, const tvm::ffi::Map &kwargs) { tvm::ffi::Array::iterator argsBegin = args.begin(); tvm::ffi::Array::iterator argsEnd = args.end(); FillMetaImpl::apply(meta, argsBegin, argsEnd, kwargs); } }; } // namespace triton_tvm_ffi #endif