1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 19:12:56 +02:00
llvm-mirror/lib/Support/ScopedPrinter.cpp
Zachary Turner cd93c0e109 [Support] Improve flexibility of binary blob formatter.
This makes it possible to indent a binary blob by a certain
number of bytes, and also makes some things more idiomatic.
Finally, it integrates this binary blob formatter into ScopedPrinter
which used to have its own implementation of this algorithm.

Differential Revision: https://reviews.llvm.org/D26477

llvm-svn: 286495
2016-11-10 20:16:45 +00:00

46 lines
1.1 KiB
C++

#include "llvm/Support/ScopedPrinter.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/Format.h"
#include <cctype>
using namespace llvm::support;
namespace llvm {
raw_ostream &operator<<(raw_ostream &OS, const HexNumber &Value) {
OS << "0x" << to_hexString(Value.Value);
return OS;
}
const std::string to_hexString(uint64_t Value, bool UpperCase) {
std::string number;
llvm::raw_string_ostream stream(number);
stream << format_hex_no_prefix(Value, 1, UpperCase);
return stream.str();
}
void ScopedPrinter::printBinaryImpl(StringRef Label, StringRef Str,
ArrayRef<uint8_t> Data, bool Block) {
if (Data.size() > 16)
Block = true;
if (Block) {
startLine() << Label;
if (!Str.empty())
OS << ": " << Str;
OS << " (\n";
if (!Data.empty())
OS << format_bytes_with_ascii(Data, 0, 16, 4, (IndentLevel + 1) * 2, true)
<< "\n";
startLine() << ")\n";
} else {
startLine() << Label << ":";
if (!Str.empty())
OS << " " << Str;
OS << " (" << format_bytes(Data, None, Data.size(), 1, 0, true) << ")\n";
}
}
} // namespace llvm