brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 0d445c0 Raw
52 lines · cpp
1//===--- SymbolID.cpp --------------------------------------------*- C++-*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "SymbolID.h"10#include "support/Logger.h"11#include "llvm/ADT/StringExtras.h"12#include "llvm/Support/SHA1.h"13 14namespace clang {15namespace clangd {16 17SymbolID::SymbolID(llvm::StringRef USR) {18  auto Hash = llvm::SHA1::hash(llvm::arrayRefFromStringRef(USR));19  static_assert(sizeof(Hash) >= RawSize, "RawSize larger than SHA1");20  memcpy(HashValue.data(), Hash.data(), RawSize);21}22 23llvm::StringRef SymbolID::raw() const {24  return llvm::StringRef(reinterpret_cast<const char *>(HashValue.data()),25                         RawSize);26}27 28SymbolID SymbolID::fromRaw(llvm::StringRef Raw) {29  SymbolID ID;30  assert(Raw.size() == RawSize);31  memcpy(ID.HashValue.data(), Raw.data(), RawSize);32  return ID;33}34 35std::string SymbolID::str() const { return llvm::toHex(raw()); }36 37llvm::Expected<SymbolID> SymbolID::fromStr(llvm::StringRef Str) {38  if (Str.size() != RawSize * 2)39    return error("Bad ID length");40  for (char C : Str)41    if (!llvm::isHexDigit(C))42      return error("Bad hex ID");43  return fromRaw(llvm::fromHex(Str));44}45 46llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const SymbolID &ID) {47  return OS << llvm::toHex(ID.raw());48}49 50} // namespace clangd51} // namespace clang52