Coverage Report

Created: 2022-07-16 07:03

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/Target/PathMappingList.h
Line
Count
Source
1
//===-- PathMappingList.h ---------------------------------------*- 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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_TARGET_PATHMAPPINGLIST_H
10
#define LLDB_TARGET_PATHMAPPINGLIST_H
11
12
#include <map>
13
#include <vector>
14
#include "lldb/Utility/ConstString.h"
15
#include "lldb/Utility/Status.h"
16
17
namespace lldb_private {
18
19
class PathMappingList {
20
public:
21
  typedef void (*ChangedCallback)(const PathMappingList &path_list,
22
                                  void *baton);
23
24
  // Constructors and Destructors
25
  PathMappingList();
26
27
  PathMappingList(ChangedCallback callback, void *callback_baton);
28
29
  PathMappingList(const PathMappingList &rhs);
30
31
  ~PathMappingList();
32
33
  const PathMappingList &operator=(const PathMappingList &rhs);
34
35
  void Append(llvm::StringRef path, llvm::StringRef replacement, bool notify);
36
37
  void Append(const PathMappingList &rhs, bool notify);
38
39
  void Clear(bool notify);
40
41
  // By default, dump all pairs.
42
  void Dump(Stream *s, int pair_index = -1);
43
44
1.34k
  bool IsEmpty() const { return m_pairs.empty(); }
45
46
417k
  size_t GetSize() const { return m_pairs.size(); }
47
48
  bool GetPathsAtIndex(uint32_t idx, ConstString &path,
49
                       ConstString &new_path) const;
50
51
  void Insert(llvm::StringRef path, llvm::StringRef replacement,
52
              uint32_t insert_idx, bool notify);
53
54
  bool Remove(size_t index, bool notify);
55
56
  bool Remove(ConstString path, bool notify);
57
58
  bool Replace(llvm::StringRef path, llvm::StringRef replacement, bool notify);
59
60
  bool Replace(llvm::StringRef path, llvm::StringRef replacement,
61
               uint32_t index, bool notify);
62
  bool RemapPath(ConstString path, ConstString &new_path) const;
63
64
  /// Remaps a source file given \a path into \a new_path.
65
  ///
66
  /// Remaps \a path if any source remappings match. This function
67
  /// does NOT stat the file system so it can be used in tight loops
68
  /// where debug info is being parsed.
69
  ///
70
  /// \param[in] path
71
  ///     The original source file path to try and remap.
72
  ///
73
  /// \param[in] only_if_exists
74
  ///     If \b true, besides matching \p path with the remapping rules, this
75
  ///     tries to check with the filesystem that the remapped file exists. If
76
  ///     no valid file is found, \b None is returned. This might be expensive,
77
  ///     specially on a network.
78
  ///
79
  ///     If \b false, then the existence of the returned remapping is not
80
  ///     checked.
81
  ///
82
  /// \return
83
  ///     The remapped filespec that may or may not exist on disk.
84
  llvm::Optional<FileSpec> RemapPath(llvm::StringRef path,
85
                                     bool only_if_exists = false) const;
86
  bool RemapPath(const char *, std::string &) const = delete;
87
88
  bool ReverseRemapPath(const FileSpec &file, FileSpec &fixed) const;
89
90
  /// Finds a source file given a file spec using the path remappings.
91
  ///
92
  /// Tries to resolve \a orig_spec by checking the path remappings.
93
  /// It makes sure the file exists by checking with the file system,
94
  /// so this call can be expensive if the remappings are on a network
95
  /// or are even on the local file system, so use this function
96
  /// sparingly (not in a tight debug info parsing loop).
97
  ///
98
  /// \param[in] orig_spec
99
  ///     The original source file path to try and remap.
100
  ///
101
  /// \return
102
  ///     The newly remapped filespec that is guaranteed to exist.
103
  llvm::Optional<FileSpec> FindFile(const FileSpec &orig_spec) const;
104
105
  uint32_t FindIndexForPath(llvm::StringRef path) const;
106
107
16.3k
  uint32_t GetModificationID() const { return m_mod_id; }
108
109
protected:
110
  typedef std::pair<ConstString, ConstString> pair;
111
  typedef std::vector<pair> collection;
112
  typedef collection::iterator iterator;
113
  typedef collection::const_iterator const_iterator;
114
115
  iterator FindIteratorForPath(ConstString path);
116
117
  const_iterator FindIteratorForPath(ConstString path) const;
118
119
  collection m_pairs;
120
  ChangedCallback m_callback = nullptr;
121
  void *m_callback_baton = nullptr;
122
  uint32_t m_mod_id = 0; // Incremented anytime anything is added or removed.
123
};
124
125
} // namespace lldb_private
126
127
#endif // LLDB_TARGET_PATHMAPPINGLIST_H