8 #ifndef INSIGHTS_STRCAT_H
9 #define INSIGHTS_STRCAT_H
11 #include "clang/AST/AST.h"
12 #include "llvm/ADT/StringExtras.h"
15 #include <type_traits>
27 return b ? std::string{
"true"} : std::string{
"false"};
32 inline std::string
ToString(
const llvm::APSInt& val)
34 if(1 == val.getBitWidth()) {
38 return llvm::toString(val, 10);
44 return arg.getZExtValue();
48 inline std::string
Normalize(
const llvm::APSInt& arg)
54 inline std::string
Normalize(
const llvm::APFloat& arg)
57 ::llvm::raw_string_ostream stream{str};
62 if(std::string::npos == str.find(
'.')) {
74 switch(arg.getKind()) {
75 case APValue::Int:
return Normalize(arg.getInt());
76 case APValue::Float:
return Normalize(arg.getFloat());
80 return std::string{
"unsupported APValue"};
84 inline std::string_view
Normalize(
const StringRef& arg)
90 static inline std::string
Normalize(
const CharUnits& arg)
92 return std::to_string(arg.getQuantity());
100 if constexpr(std::is_same_v<std::remove_cvref_t<T>,
bool>) {
103 }
else if constexpr(std::is_integral_v<T>) {
104 return std::to_string(arg);
113 void StrCat(std::string& ret,
const auto&... args)
120 inline std::string
StrCat(
const auto&... args)
void StrCat(std::string &ret, const auto &... args)
std::string ConvertToBoolString(bool b)
Convert a boolean value to a string representation of "true" or "false".
std::string ToString(const llvm::APSInt &val)
uint64_t Normalize(const llvm::APInt &arg)
decltype(auto) Normalize(const T &arg)
std::string StrCat(const auto &... args)