15#ifndef MLIR_TABLEGEN_FORMAT_H_
16#define MLIR_TABLEGEN_FORMAT_H_
19#include "llvm/ADT/DenseMap.h"
20#include "llvm/ADT/StringMap.h"
21#include "llvm/Support/FormatVariadic.h"
63 std::optional<StringRef>
getSubstFor(StringRef placeholder)
const;
71 static inline PHKind getEmptyKey() {
72 return static_cast<PHKind>(CharInfo::getEmptyKey());
74 static unsigned getHashValue(
const PHKind &val) {
75 return CharInfo::getHashValue(
static_cast<char>(val));
78 static bool isEqual(
const PHKind &
lhs,
const PHKind &
rhs) {
83 llvm::SmallDenseMap<PHKind, std::string, 4, PHKindInfo> builtinSubstMap;
84 llvm::StringMap<std::string> customSubstMap;
120 static std::pair<FmtReplacement, StringRef> splitFmtSegment(StringRef
fmt);
121 static std::vector<FmtReplacement> parseFormatString(StringRef
fmt);
132 template <
typename... Ts>
133 std::vector<llvm::support::detail::format_adapter *>
135 return std::vector<llvm::support::detail::format_adapter *>{&items...};
141 std::vector<llvm::support::detail::format_adapter *>
adapters;
155 void format(llvm::raw_ostream &s)
const;
159 llvm::raw_string_ostream s(
result);
164 template <
unsigned N>
167 llvm::raw_svector_ostream s(
result);
172 template <
unsigned N>
177 operator std::string()
const {
return str(); }
180template <
typename Tuple>
190 parameters(std::move(params)) {
191 adapters.reserve(std::tuple_size<Tuple>::value);
198 :
FmtObjectBase(std::move(that)), parameters(std::move(that.parameters)) {
199 adapters.reserve(that.adapters.size());
207 std::declval<std::string>()));
258template <
typename... Ts>
261 decltype(std::make_tuple(llvm::support::detail::build_format_adapter(
262 std::forward<Ts>(vals))...))> {
263 using ParamTuple =
decltype(std::make_tuple(
264 llvm::support::detail::build_format_adapter(std::forward<Ts>(vals))...));
267 std::make_tuple(llvm::support::detail::build_format_adapter(
268 std::forward<Ts>(vals))...));
Format context containing substitutions for special placeholders.
FmtContext & withBuilder(Twine subst)
static PHKind getPlaceHolderKind(StringRef str)
std::optional< StringRef > getSubstFor(PHKind placeholder) const
FmtContext & withSelf(Twine subst)
FmtContext & addSubst(StringRef placeholder, const Twine &subst)
std::vector< llvm::support::detail::format_adapter * > adapters
FmtObjectBase(StringRef fmt, const FmtContext *ctx, size_t numParams)
void format(llvm::raw_ostream &s) const
const FmtContext * context
FmtObjectBase(FmtObjectBase &&that)
std::vector< FmtReplacement > replacements
FmtObjectBase(const FmtObjectBase &that)=delete
SmallString< N > sstr() const
FmtObject(FmtObject const &that)=delete
FmtObject(StringRef fmt, const FmtContext *ctx, Tuple &¶ms)
FmtObject(FmtObject &&that)
FmtStrVecObject(StringRef fmt, const FmtContext *ctx, ArrayRef< std::string > params)
decltype(llvm::support::detail::build_format_adapter( std::declval< std::string >())) StrFormatAdapter
FmtStrVecObject(FmtStrVecObject const &that)=delete
auto tgfmt(StringRef fmt, const FmtContext *ctx, Ts &&...vals) -> FmtObject< decltype(std::make_tuple(llvm::support::detail::build_format_adapter(std::forward< Ts >(vals))...))>
Formats text by substituting placeholders in format string with replacement parameters.
Include the generated interface declarations.
llvm::DenseMapInfo< T, Enable > DenseMapInfo
std::vector< llvm::support::detail::format_adapter * > operator()(Ts &...items)
FmtReplacement(StringRef literal)
FmtReplacement(StringRef spec, size_t index)
static constexpr size_t kUnset
FmtContext::PHKind placeholder
FmtReplacement(StringRef spec, FmtContext::PHKind placeholder)
FmtReplacement(StringRef spec, size_t index, size_t end)