mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-30 15:10:33 +00:00
48fbf5cc1a
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286495 91177308-0d34-0410-b5e6-96231b3b80d8
46 lines
1.1 KiB
C++
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
|