* 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 CATLASS_DETAIL_CALLBACK_HPP
#define CATLASS_DETAIL_CALLBACK_HPP
#include "catlass/detail/macros.hpp"
struct Callback {
void const* func{nullptr};
void (*caller)(void const*){nullptr};
Callback() = default;
CATLASS_DEVICE
void operator()() const
{
if (func) {
caller(func);
}
}
CATLASS_DEVICE
operator bool() const
{
return func != nullptr;
}
};
template <typename Func>
CATLASS_DEVICE void FuncWrapper(void const* func)
{
(*static_cast<Func const*>(func))();
}
template <typename Func>
CATLASS_DEVICE Callback MakeCallback(Func* func)
{
Callback callback;
callback.func = func;
callback.caller = &FuncWrapper<Func>;
return callback;
}
#endif