1 //===--- SymbolID.cpp --------------------------------------------*- C++-*-===//
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-exception
7 //===----------------------------------------------------------------------===//
10 #include "support/Logger.h"
11 #include "llvm/Support/SHA1.h"
16 SymbolID::SymbolID(llvm::StringRef USR
) {
17 auto Hash
= llvm::SHA1::hash(llvm::arrayRefFromStringRef(USR
));
18 static_assert(sizeof(Hash
) >= RawSize
, "RawSize larger than SHA1");
19 memcpy(HashValue
.data(), Hash
.data(), RawSize
);
22 llvm::StringRef
SymbolID::raw() const {
23 return llvm::StringRef(reinterpret_cast<const char *>(HashValue
.data()),
27 SymbolID
SymbolID::fromRaw(llvm::StringRef Raw
) {
29 assert(Raw
.size() == RawSize
);
30 memcpy(ID
.HashValue
.data(), Raw
.data(), RawSize
);
34 std::string
SymbolID::str() const { return llvm::toHex(raw()); }
36 llvm::Expected
<SymbolID
> SymbolID::fromStr(llvm::StringRef Str
) {
37 if (Str
.size() != RawSize
* 2)
38 return error("Bad ID length");
40 if (!llvm::isHexDigit(C
))
41 return error("Bad hex ID");
42 return fromRaw(llvm::fromHex(Str
));
45 llvm::raw_ostream
&operator<<(llvm::raw_ostream
&OS
, const SymbolID
&ID
) {
46 return OS
<< llvm::toHex(ID
.raw());