//===- Formatters.cpp -----------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "llvm/DebugInfo/CodeView/Formatters.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/DebugInfo/CodeView/GUID.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>

using namespace llvm;
using namespace llvm::codeview;
using namespace llvm::codeview::detail;

GuidAdapter::GuidAdapter(StringRef Guid)
    : FormatAdapter(makeArrayRef(Guid.bytes_begin(), Guid.bytes_end())) {}

GuidAdapter::GuidAdapter(ArrayRef<uint8_t> Guid)
    : FormatAdapter(std::move(Guid)) {}

// From https://docs.microsoft.com/en-us/windows/win32/msi/guid documentation:
// The GUID data type is a text string representing a Class identifier (ID).
// All GUIDs must be authored in uppercase.
// The valid format for a GUID is {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} where
// X is a hex digit (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F).
//
// The individual string components must be padded to comply with the specific
// lengths of {8-4-4-4-12} characters.
// The llvm-yaml2obj tool checks that a GUID follow that format:
// - the total length to be 38 (including the curly braces.
// - there is a dash at the positions: 8, 13, 18 and 23.
void GuidAdapter::format(raw_ostream &Stream, StringRef Style) {
  assert(Item.size() == 16 && "Expected 16-byte GUID");
  struct MSGuid {
    support::ulittle32_t Data1;
    support::ulittle16_t Data2;
    support::ulittle16_t Data3;
    support::ubig64_t Data4;
  };
  const MSGuid *G = reinterpret_cast<const MSGuid *>(Item.data());
  Stream
      << '{' << format_hex_no_prefix(G->Data1, 8, /*Upper=*/true)
      << '-' << format_hex_no_prefix(G->Data2, 4, /*Upper=*/true)
      << '-' << format_hex_no_prefix(G->Data3, 4, /*Upper=*/true)
      << '-' << format_hex_no_prefix(G->Data4 >> 48, 4, /*Upper=*/true) << '-'
      << format_hex_no_prefix(G->Data4 & ((1ULL << 48) - 1), 12, /*Upper=*/true)
      << '}';
}

raw_ostream &llvm::codeview::operator<<(raw_ostream &OS, const GUID &Guid) {
  codeview::detail::GuidAdapter A(Guid.Guid);
  A.format(OS, "");
  return OS;
}
