| // Copyright 2022 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef LIBHWSEC_MIDDLEWARE_FUNCTION_NAME_H_ | |
| #define LIBHWSEC_MIDDLEWARE_FUNCTION_NAME_H_ | |
| #include <deque> | |
| #include <string> | |
| #include <brillo/type_name_undecorate.h> | |
| #ifndef BUILD_LIBHWSEC | |
| #error "Don't include this file outside libhwsec!" | |
| #endif | |
| // This function helper can help us get the function name form the function | |
| // type. | |
| // | |
| // Example usage: | |
| // bool MagicFunction() { | |
| // return GetFuncName<&MagicFunction>() == "MagicFunction"; | |
| // } // return true; | |
| namespace hwsec { | |
| template <auto Func> | |
| struct FuncWrapper {}; | |
| // Input: hwsec::FuncWrapper<&hwsec::State::IsReady<...>> | |
| // Output: hwsec::State::IsReady | |
| std::string ExtractFuncName(const std::string& func_name); | |
| // Input: hwsec::State::IsReady | |
| // Output: State.IsReady | |
| std::string SimplifyFuncName(const std::string& func_name); | |
| template <auto Func> | |
| inline std::string GetFuncName() { | |
| return ExtractFuncName(brillo::GetUndecoratedTypeName<FuncWrapper<Func>>()); | |
| } | |
| } // namespace hwsec | |
| #endif // LIBHWSEC_MIDDLEWARE_FUNCTION_NAME_H_ |