/**
 * Copyright (c) 2025 Huawei Technologies Co., Ltd.
 * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
 * CANN Open Software License Agreement Version 2.0 (the "License").
 * Please refer to the License for details. You may not use this file except in compliance with the License.
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
 * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
 * See LICENSE in the root of the software repository for the full text of the License.
 */
#ifndef __CCE_RUNTIME_API_IMPL_CREATOR_C_HPP__
#define __CCE_RUNTIME_API_IMPL_CREATOR_C_HPP__

#include "api.hpp"

namespace cce {
namespace runtime {
class ApiMbuf;
class ApiEvent;
class ApiEsched;
class ApiSnapshot;
class ApiRtConfig;
class ApiDeviceTopology;
class ApiHostMemory;
class ApiKernelFunc;
class ApiKernelArgs;
class ApiIpcMemory;
class ApiVmm;

size_t GetApiImplSize();
Api* CreateImplAndGet();
bool IsImplMbufSupported();
ApiMbuf* CreateImplMbufAndGet();
void DestroyImplMbuf(ApiMbuf*& apiImplMbuf);
ApiSoma* CreateImplSomaAndGet();
ApiEvent* CreateImplEventAndGet();
bool IsImplKernelFuncSupported();
ApiKernelFunc* CreateImplKernelFuncAndGet();
void DestroyImplKernelFunc(ApiKernelFunc*& apiImplKernelFunc);
bool IsImplKernelArgsSupported();
ApiKernelArgs* CreateImplKernelArgsAndGet();
void DestroyImplKernelArgs(ApiKernelArgs*& apiImplKernelArgs);
bool IsImplEschedSupported();
ApiEsched* CreateImplEschedAndGet();
void DestroyImplEsched(ApiEsched*& apiImplEsched);
bool IsImplSnapshotSupported();
ApiSnapshot* CreateImplSnapshotAndGet();
void DestroyImplSnapshot(ApiSnapshot*& apiImplSnapshot);
bool IsImplRtConfigSupported();
ApiRtConfig* CreateImplRtConfigAndGet();
void DestroyImplRtConfig(ApiRtConfig*& apiImplRtConfig);
bool IsImplDeviceTopologySupported();
ApiDeviceTopology* CreateImplDeviceTopologyAndGet();
void DestroyImplDeviceTopology(ApiDeviceTopology*& apiImplDeviceTopology);
bool IsImplIpcMemorySupported();
ApiIpcMemory* CreateImplIpcMemoryAndGet();
void DestroyImplIpcMemory(ApiIpcMemory*& apiImplIpcMemory);
bool IsImplHostMemorySupported();
ApiHostMemory* CreateImplHostMemoryAndGet();
void DestroyImplHostMemory(ApiHostMemory*& apiImplHostMemory);
bool IsImplVmmSupported();
ApiVmm* CreateImplVmmAndGet();
void DestroyImplVmm(ApiVmm*& apiImplVmm);
} // namespace runtime
} // namespace cce

#endif // __CCE_RUNTIME_API_IMPL_CREATOR_C_HPP__