20#ifndef LLVM_SUPPORT_INTERLEAVED_RANGE_H
21#define LLVM_SUPPORT_INTERLEAVED_RANGE_H
35 const Range &TheRange;
43 : TheRange(R), Separator(Separator), Prefix(Prefix), Suffix(Suffix) {}
45 template <
typename OStream>
47 if (!Interleaved.Prefix.
empty())
48 OS << Interleaved.Prefix;
50 if (!Interleaved.Suffix.
empty())
51 OS << Interleaved.Suffix;
55 std::string
str()
const {
63 operator std::string()
const {
return str(); }
75template <
typename Range>
79 return {R, Separator, Prefix, Suffix};
91template <
typename Range>
94 return {R, Separator,
"[",
"]"};
ConstantRange Range(APInt(BitWidth, Low), APInt(BitWidth, High))
Format object class for interleaved ranges.
InterleavedRange(const Range &R, StringRef Separator, StringRef Prefix, StringRef Suffix)
friend OStream & operator<<(OStream &OS, const InterleavedRange &Interleaved)
StringRef - Represent a constant reference to a string, i.e.
constexpr bool empty() const
empty - Check if the string is empty.
A raw_ostream that writes to an std::string.
This is an optimization pass for GlobalISel generic memory operations.
void interleave(ForwardIterator begin, ForwardIterator end, UnaryFunctor each_fn, NullaryFunctor between_fn)
An STL-style algorithm similar to std::for_each that applies a second functor between every pair of e...
InterleavedRange< Range > interleaved(const Range &R, StringRef Separator=", ", StringRef Prefix="", StringRef Suffix="")
Output range R as a sequence of interleaved elements.
InterleavedRange< Range > interleaved_array(const Range &R, StringRef Separator=", ")
Output range R as an array of interleaved elements.