blob: e17b257637812a639dd2df49212e8b6a8c8f9b08 [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- Strings.h ------------------------------------------------*- C++ -*-===//
2//
3// The LLVM Linker
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLD_STRINGS_H
11#define LLD_STRINGS_H
12
13#include "llvm/ADT/ArrayRef.h"
14#include "llvm/ADT/Optional.h"
15#include "llvm/ADT/StringRef.h"
16#include "llvm/Support/GlobPattern.h"
17#include <string>
18#include <vector>
19
20namespace lld {
21// Returns a demangled C++ symbol name. If Name is not a mangled
22// name, it returns Optional::None.
23llvm::Optional<std::string> demangleItanium(llvm::StringRef Name);
24llvm::Optional<std::string> demangleMSVC(llvm::StringRef S);
25
26std::vector<uint8_t> parseHex(llvm::StringRef S);
27bool isValidCIdentifier(llvm::StringRef S);
28
Andrew Scullcdfcccc2018-10-05 20:58:37 +010029// Write the contents of the a buffer to a file
30void saveBuffer(llvm::StringRef Buffer, const llvm::Twine &Path);
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010031
32// This class represents multiple glob patterns.
33class StringMatcher {
34public:
35 StringMatcher() = default;
36 explicit StringMatcher(llvm::ArrayRef<llvm::StringRef> Pat);
37
38 bool match(llvm::StringRef S) const;
39
40private:
41 std::vector<llvm::GlobPattern> Patterns;
42};
43
44inline llvm::ArrayRef<uint8_t> toArrayRef(llvm::StringRef S) {
45 return {reinterpret_cast<const uint8_t *>(S.data()), S.size()};
46}
Andrew Scullcdfcccc2018-10-05 20:58:37 +010047} // namespace lld
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010048
49#endif