1 //===-- FileSpecList.h ------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_FileSpecList_h_
11 #define liblldb_FileSpecList_h_
12 #if defined(__cplusplus)
14 #include "lldb/lldb-private.h"
15 #include "lldb/Host/FileSpec.h"
18 namespace lldb_private {
20 //----------------------------------------------------------------------
21 /// @class FileSpecList FileSpecList.h "lldb/Core/FileSpecList.h"
22 /// @brief A file collection class.
24 /// A class that contains a mutable list of FileSpec objects.
25 //----------------------------------------------------------------------
29 //------------------------------------------------------------------
30 /// Default constructor.
32 /// Initialize this object with an empty file list.
33 //------------------------------------------------------------------
36 //------------------------------------------------------------------
39 /// Initialize this object with a copy of the file list from \a rhs.
42 /// A const reference to another file list object.
43 //------------------------------------------------------------------
44 FileSpecList (const FileSpecList &rhs);
46 //------------------------------------------------------------------
48 //------------------------------------------------------------------
51 //------------------------------------------------------------------
52 /// Assignment operator.
54 /// Replace the file list in this object with the file list from
58 /// A file list object to copy.
61 /// A const reference to this object.
62 //------------------------------------------------------------------
64 operator= (const FileSpecList &rhs);
66 //------------------------------------------------------------------
67 /// Append a FileSpec object to the list.
69 /// Appends \a file to the end of the file list.
72 /// A new file to append to this file list.
73 //------------------------------------------------------------------
75 Append (const FileSpec &file);
77 //------------------------------------------------------------------
78 /// Append a FileSpec object if unique.
80 /// Appends \a file to the end of the file list if it doesn't
81 /// already exist in the file list.
84 /// A new file to append to this file list.
87 /// \b true if the file was appended, \b false otherwise.
88 //------------------------------------------------------------------
90 AppendIfUnique (const FileSpec &file);
92 //------------------------------------------------------------------
93 /// Clears the file list.
94 //------------------------------------------------------------------
98 //------------------------------------------------------------------
99 /// Dumps the file list to the supplied stream pointer "s".
102 /// The stream that will be used to dump the object description.
103 //------------------------------------------------------------------
105 Dump (Stream *s, const char *separator_cstr = "\n") const;
107 //------------------------------------------------------------------
108 /// Find a file index.
110 /// Find the index of the file in the file spec list that matches
111 /// \a file starting \a idx entries into the file spec list.
114 /// An index into the file list.
117 /// The file specification to search for.
120 /// Should FileSpec::Equal be called with "full" true or false.
123 /// The index of the file that matches \a file if it is found,
124 /// else UINT32_MAX is returned.
125 //------------------------------------------------------------------
127 FindFileIndex (size_t idx, const FileSpec &file, bool full) const;
129 //------------------------------------------------------------------
130 /// Get file at index.
132 /// Gets a file from the file list. If \a idx is not a valid index,
133 /// an empty FileSpec object will be returned. The file objects
134 /// that are returned can be tested using
135 /// FileSpec::operator void*().
138 /// An index into the file list.
141 /// A copy of the FileSpec object at index \a idx. If \a idx
142 /// is out of range, then an empty FileSpec object will be
144 //------------------------------------------------------------------
146 GetFileSpecAtIndex (size_t idx) const;
148 //------------------------------------------------------------------
149 /// Get file specification pointer at index.
151 /// Gets a file from the file list. The file objects that are
152 /// returned can be tested using FileSpec::operator void*().
155 /// An index into the file list.
158 /// A pointer to a contained FileSpec object at index \a idx.
159 /// If \a idx is out of range, then an NULL is returned.
160 //------------------------------------------------------------------
162 GetFileSpecPointerAtIndex (size_t idx) const;
164 //------------------------------------------------------------------
165 /// Get the memory cost of this object.
167 /// Return the size in bytes that this object takes in memory. This
168 /// returns the size in bytes of this object, not any shared string
169 /// values it may refer to.
172 /// The number of bytes that this object occupies in memory.
174 /// @see ConstString::StaticMemorySize ()
175 //------------------------------------------------------------------
182 return m_files.empty();
185 //------------------------------------------------------------------
186 /// Get the number of files in the file list.
189 /// The number of files in the file spec list.
190 //------------------------------------------------------------------
195 Insert (size_t idx, const FileSpec &file)
197 if (idx < m_files.size())
199 m_files.insert(m_files.begin() + idx, file);
202 else if (idx == m_files.size())
204 m_files.push_back(file);
211 Replace (size_t idx, const FileSpec &file)
213 if (idx < m_files.size())
224 if (idx < m_files.size())
226 m_files.erase(m_files.begin() + idx);
232 static size_t GetFilesMatchingPartialPath (const char *path, bool dir_okay, FileSpecList &matches);
235 typedef std::vector<FileSpec> collection; ///< The collection type for the file list.
236 collection m_files; ///< A collection of FileSpec objects.
239 } // namespace lldb_private
242 #endif // #if defined(__cplusplus)
243 #endif // liblldb_FileSpecList_h_