1*4fcfc199SEugene Zelenko //===- Formatters.cpp -----------------------------------------------------===// 25ce0f4a9SZachary Turner // 35ce0f4a9SZachary Turner // The LLVM Compiler Infrastructure 45ce0f4a9SZachary Turner // 55ce0f4a9SZachary Turner // This file is distributed under the University of Illinois Open Source 65ce0f4a9SZachary Turner // License. See LICENSE.TXT for details. 75ce0f4a9SZachary Turner // 85ce0f4a9SZachary Turner //===----------------------------------------------------------------------===// 95ce0f4a9SZachary Turner 105ce0f4a9SZachary Turner #include "llvm/DebugInfo/CodeView/Formatters.h" 11*4fcfc199SEugene Zelenko #include "llvm/ADT/ArrayRef.h" 12*4fcfc199SEugene Zelenko #include "llvm/Support/raw_ostream.h" 13*4fcfc199SEugene Zelenko #include <algorithm> 14*4fcfc199SEugene Zelenko #include <cassert> 155ce0f4a9SZachary Turner 165ce0f4a9SZachary Turner using namespace llvm; 175ce0f4a9SZachary Turner using namespace llvm::codeview; 185ce0f4a9SZachary Turner using namespace llvm::codeview::detail; 195ce0f4a9SZachary Turner 205ce0f4a9SZachary Turner GuidAdapter::GuidAdapter(StringRef Guid) 215ce0f4a9SZachary Turner : FormatAdapter(makeArrayRef(Guid.bytes_begin(), Guid.bytes_end())) {} 225ce0f4a9SZachary Turner 235ce0f4a9SZachary Turner GuidAdapter::GuidAdapter(ArrayRef<uint8_t> Guid) 245ce0f4a9SZachary Turner : FormatAdapter(std::move(Guid)) {} 255ce0f4a9SZachary Turner 26*4fcfc199SEugene Zelenko void GuidAdapter::format(raw_ostream &Stream, StringRef Style) { 275ce0f4a9SZachary Turner static const char *Lookup = "0123456789ABCDEF"; 285ce0f4a9SZachary Turner 295ce0f4a9SZachary Turner assert(Item.size() == 16 && "Expected 16-byte GUID"); 305ce0f4a9SZachary Turner Stream << "{"; 315ce0f4a9SZachary Turner for (int i = 0; i < 16;) { 325ce0f4a9SZachary Turner uint8_t Byte = Item[i]; 335ce0f4a9SZachary Turner uint8_t HighNibble = (Byte >> 4) & 0xF; 345ce0f4a9SZachary Turner uint8_t LowNibble = Byte & 0xF; 355ce0f4a9SZachary Turner Stream << Lookup[HighNibble] << Lookup[LowNibble]; 365ce0f4a9SZachary Turner ++i; 375ce0f4a9SZachary Turner if (i >= 4 && i <= 10 && i % 2 == 0) 385ce0f4a9SZachary Turner Stream << "-"; 395ce0f4a9SZachary Turner } 405ce0f4a9SZachary Turner Stream << "}"; 415ce0f4a9SZachary Turner } 42