1*5ce0f4a9SZachary Turner //===- Formatters.cpp -------------------------------------------*- C++ -*-===// 2*5ce0f4a9SZachary Turner // 3*5ce0f4a9SZachary Turner // The LLVM Compiler Infrastructure 4*5ce0f4a9SZachary Turner // 5*5ce0f4a9SZachary Turner // This file is distributed under the University of Illinois Open Source 6*5ce0f4a9SZachary Turner // License. See LICENSE.TXT for details. 7*5ce0f4a9SZachary Turner // 8*5ce0f4a9SZachary Turner //===----------------------------------------------------------------------===// 9*5ce0f4a9SZachary Turner 10*5ce0f4a9SZachary Turner #include "llvm/DebugInfo/CodeView/Formatters.h" 11*5ce0f4a9SZachary Turner 12*5ce0f4a9SZachary Turner using namespace llvm; 13*5ce0f4a9SZachary Turner using namespace llvm::codeview; 14*5ce0f4a9SZachary Turner using namespace llvm::codeview::detail; 15*5ce0f4a9SZachary Turner 16*5ce0f4a9SZachary Turner GuidAdapter::GuidAdapter(StringRef Guid) 17*5ce0f4a9SZachary Turner : FormatAdapter(makeArrayRef(Guid.bytes_begin(), Guid.bytes_end())) {} 18*5ce0f4a9SZachary Turner 19*5ce0f4a9SZachary Turner GuidAdapter::GuidAdapter(ArrayRef<uint8_t> Guid) 20*5ce0f4a9SZachary Turner : FormatAdapter(std::move(Guid)) {} 21*5ce0f4a9SZachary Turner 22*5ce0f4a9SZachary Turner void GuidAdapter::format(llvm::raw_ostream &Stream, StringRef Style) { 23*5ce0f4a9SZachary Turner static const char *Lookup = "0123456789ABCDEF"; 24*5ce0f4a9SZachary Turner 25*5ce0f4a9SZachary Turner assert(Item.size() == 16 && "Expected 16-byte GUID"); 26*5ce0f4a9SZachary Turner Stream << "{"; 27*5ce0f4a9SZachary Turner for (int i = 0; i < 16;) { 28*5ce0f4a9SZachary Turner uint8_t Byte = Item[i]; 29*5ce0f4a9SZachary Turner uint8_t HighNibble = (Byte >> 4) & 0xF; 30*5ce0f4a9SZachary Turner uint8_t LowNibble = Byte & 0xF; 31*5ce0f4a9SZachary Turner Stream << Lookup[HighNibble] << Lookup[LowNibble]; 32*5ce0f4a9SZachary Turner ++i; 33*5ce0f4a9SZachary Turner if (i >= 4 && i <= 10 && i % 2 == 0) 34*5ce0f4a9SZachary Turner Stream << "-"; 35*5ce0f4a9SZachary Turner } 36*5ce0f4a9SZachary Turner Stream << "}"; 37*5ce0f4a9SZachary Turner } 38