/**

 * 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.

 */

#include "api.hpp"

#include "api_esched.hpp"

#include "api_event.hpp"

#include "api_host_memory.hpp"

#include "api_kernel_func.hpp"

#include "api_kernel_args.hpp"

#include "api_ipc_memory.hpp"

#include "api_mbuf.hpp"

#include "api_snapshot.hpp"

#include "api_rt_config.hpp"

#include "api_device_topology.hpp"

#include "api_soma.hpp"

#include "api_vmm.hpp"

#include "thread_local_container.hpp"

#include "api_xpu.hpp"



namespace cce {

namespace runtime {

Api* Api::Instance(const uint32_t flags)

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    ThreadLocalContainer::SetEnvFlags(flags);

    return rtInstance->Api_();

}



ApiMbuf* ApiMbuf::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiMbuf_();

}



ApiSoma* ApiSoma::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiSoma_();

}



ApiEvent* ApiEvent::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiEvent_();

}



ApiKernelFunc* ApiKernelFunc::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiKernelFunc_();

}



ApiKernelArgs* ApiKernelArgs::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiKernelArgs_();

}



ApiEsched* ApiEsched::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiEsched_();

}



ApiSnapshot* ApiSnapshot::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiSnapshot_();

}



ApiRtConfig* ApiRtConfig::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiRtConfig_();

}



ApiDeviceTopology* ApiDeviceTopology::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiDeviceTopology_();

}



ApiIpcMemory* ApiIpcMemory::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiIpcMemory_();

}



ApiHostMemory* ApiHostMemory::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiHostMemory_();

}



ApiVmm* ApiVmm::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiVmm_();

}



ApiXpu* ApiXpu::Instance()

{

    const Runtime* const rtInstance = Runtime::Instance();

    if (unlikely(rtInstance == nullptr)) {

        RT_LOG(RT_LOG_ERROR, "Runtime::Instance == nullptr");

        return nullptr;

    }

    return rtInstance->ApiXpu_();

}



} // namespace runtime

} // namespace cce