blob: ded22dd769bede76ba6f54dc9ffede99f6b5b5ff [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- Strings.h ------------------------------------------------*- C++ -*-===//
2//
Andrew Walbran16937d02019-10-22 13:54:20 +01003// 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
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01006//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLD_STRINGS_H
10#define LLD_STRINGS_H
11
12#include "llvm/ADT/ArrayRef.h"
13#include "llvm/ADT/Optional.h"
14#include "llvm/ADT/StringRef.h"
15#include "llvm/Support/GlobPattern.h"
16#include <string>
17#include <vector>
18
19namespace lld {
20// Returns a demangled C++ symbol name. If Name is not a mangled
21// name, it returns Optional::None.
Andrew Walbran3d2c1972020-04-07 12:24:26 +010022llvm::Optional<std::string> demangleItanium(llvm::StringRef name);
23llvm::Optional<std::string> demangleMSVC(llvm::StringRef s);
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010024
Andrew Walbran3d2c1972020-04-07 12:24:26 +010025std::vector<uint8_t> parseHex(llvm::StringRef s);
26bool isValidCIdentifier(llvm::StringRef s);
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010027
Andrew Scullcdfcccc2018-10-05 20:58:37 +010028// Write the contents of the a buffer to a file
Andrew Walbran3d2c1972020-04-07 12:24:26 +010029void saveBuffer(llvm::StringRef buffer, const llvm::Twine &path);
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010030
31// This class represents multiple glob patterns.
32class StringMatcher {
33public:
34 StringMatcher() = default;
Andrew Walbran3d2c1972020-04-07 12:24:26 +010035 explicit StringMatcher(llvm::ArrayRef<llvm::StringRef> pat);
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010036
Andrew Walbran3d2c1972020-04-07 12:24:26 +010037 bool match(llvm::StringRef s) const;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010038
39private:
Andrew Walbran3d2c1972020-04-07 12:24:26 +010040 std::vector<llvm::GlobPattern> patterns;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010041};
42
Andrew Scullcdfcccc2018-10-05 20:58:37 +010043} // namespace lld
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010044
45#endif