#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/DataTypes.h"
+#include <functional>
#include <system_error>
namespace llvm {
class format_object_base;
class FormattedString;
class FormattedNumber;
+class raw_ostream;
template <typename T> class SmallVectorImpl;
namespace sys {
}
}
+/// Type of function that prints to raw_ostream.
+///
+/// Typical usage:
+/// Printable PrintFoo(Foo x) {
+/// return [] (raw_ostream &os) { os << /* ... */; };
+/// }
+/// os << "Foo: " << PrintFoo(foo) << '\n';
+typedef std::function<void(raw_ostream&)> Printable;
+
/// This class implements an extremely fast bulk output stream that can *only*
/// output to a stream. It does not support seeking, reopening, rewinding, line
/// buffered disciplines etc. It is a simple buffer that outputs
raw_ostream &operator<<(double N);
+ /// IO manipulator, \see Printable.
+ raw_ostream &operator<<(Printable P);
+
/// Output \p N in hexadecimal, without any prefix or padding.
raw_ostream &write_hex(unsigned long long N);