1 //===-- FileSpecList.h ------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 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 liblldb_FileSpecList_h_ 11 #define liblldb_FileSpecList_h_ 12 #if defined(__cplusplus) 13 14 #include "lldb/lldb-private.h" 15 #include "lldb/Host/FileSpec.h" 16 #include <vector> 17 18 namespace lldb_private { 19 20 //---------------------------------------------------------------------- 21 /// @class FileSpecList FileSpecList.h "lldb/Core/FileSpecList.h" 22 /// @brief A file collection class. 23 /// 24 /// A class that contains a mutable list of FileSpec objects. 25 //---------------------------------------------------------------------- 26 class FileSpecList 27 { 28 public: 29 //------------------------------------------------------------------ 30 /// Default constructor. 31 /// 32 /// Initialize this object with an empty file list. 33 //------------------------------------------------------------------ 34 FileSpecList (); 35 36 //------------------------------------------------------------------ 37 /// Copy constructor. 38 /// 39 /// Initialize this object with a copy of the file list from \a rhs. 40 /// 41 /// @param[in] rhs 42 /// A const reference to another file list object. 43 //------------------------------------------------------------------ 44 FileSpecList (const FileSpecList &rhs); 45 46 //------------------------------------------------------------------ 47 /// Destructor. 48 //------------------------------------------------------------------ 49 ~FileSpecList (); 50 51 //------------------------------------------------------------------ 52 /// Assignment operator. 53 /// 54 /// Replace the file list in this object with the file list from 55 /// \a rhs. 56 /// 57 /// @param[in] rhs 58 /// A file list object to copy. 59 /// 60 /// @return 61 /// A const reference to this object. 62 //------------------------------------------------------------------ 63 const FileSpecList& 64 operator= (const FileSpecList &rhs); 65 66 //------------------------------------------------------------------ 67 /// Append a FileSpec object to the list. 68 /// 69 /// Appends \a file to the end of the file list. 70 /// 71 /// @param[in] file 72 /// A new file to append to this file list. 73 //------------------------------------------------------------------ 74 void 75 Append (const FileSpec &file); 76 77 //------------------------------------------------------------------ 78 /// Append a FileSpec object if unique. 79 /// 80 /// Appends \a file to the end of the file list if it doesn't 81 /// already exist in the file list. 82 /// 83 /// @param[in] file 84 /// A new file to append to this file list. 85 /// 86 /// @return 87 /// \b true if the file was appended, \b false otherwise. 88 //------------------------------------------------------------------ 89 bool 90 AppendIfUnique (const FileSpec &file); 91 92 //------------------------------------------------------------------ 93 /// Clears the file list. 94 //------------------------------------------------------------------ 95 void 96 Clear (); 97 98 //------------------------------------------------------------------ 99 /// Dumps the file list to the supplied stream pointer "s". 100 /// 101 /// @param[in] s 102 /// The stream that will be used to dump the object description. 103 //------------------------------------------------------------------ 104 void 105 Dump (Stream *s, const char *separator_cstr = "\n") const; 106 107 //------------------------------------------------------------------ 108 /// Find a file index. 109 /// 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. 112 /// 113 /// @param[in] idx 114 /// An index into the file list. 115 /// 116 /// @param[in] file 117 /// The file specification to search for. 118 /// 119 /// @param[in] full 120 /// Should FileSpec::Equal be called with "full" true or false. 121 /// 122 /// @return 123 /// The index of the file that matches \a file if it is found, 124 /// else UINT32_MAX is returned. 125 //------------------------------------------------------------------ 126 size_t 127 FindFileIndex (size_t idx, const FileSpec &file, bool full) const; 128 129 //------------------------------------------------------------------ 130 /// Get file at index. 131 /// 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*(). 136 /// 137 /// @param[in] idx 138 /// An index into the file list. 139 /// 140 /// @return 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 143 /// returned. 144 //------------------------------------------------------------------ 145 const FileSpec & 146 GetFileSpecAtIndex (size_t idx) const; 147 148 //------------------------------------------------------------------ 149 /// Get file specification pointer at index. 150 /// 151 /// Gets a file from the file list. The file objects that are 152 /// returned can be tested using FileSpec::operator void*(). 153 /// 154 /// @param[in] idx 155 /// An index into the file list. 156 /// 157 /// @return 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 //------------------------------------------------------------------ 161 const FileSpec * 162 GetFileSpecPointerAtIndex (size_t idx) const; 163 164 //------------------------------------------------------------------ 165 /// Get the memory cost of this object. 166 /// 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. 170 /// 171 /// @return 172 /// The number of bytes that this object occupies in memory. 173 /// 174 /// @see ConstString::StaticMemorySize () 175 //------------------------------------------------------------------ 176 size_t 177 MemorySize () const; 178 179 bool 180 IsEmpty() const 181 { 182 return m_files.empty(); 183 } 184 185 //------------------------------------------------------------------ 186 /// Get the number of files in the file list. 187 /// 188 /// @return 189 /// The number of files in the file spec list. 190 //------------------------------------------------------------------ 191 size_t 192 GetSize () const; 193 194 bool 195 Insert (size_t idx, const FileSpec &file) 196 { 197 if (idx < m_files.size()) 198 { 199 m_files.insert(m_files.begin() + idx, file); 200 return true; 201 } 202 else if (idx == m_files.size()) 203 { 204 m_files.push_back(file); 205 return true; 206 } 207 return false; 208 } 209 210 bool 211 Replace (size_t idx, const FileSpec &file) 212 { 213 if (idx < m_files.size()) 214 { 215 m_files[idx] = file; 216 return true; 217 } 218 return false; 219 } 220 221 bool 222 Remove (size_t idx) 223 { 224 if (idx < m_files.size()) 225 { 226 m_files.erase(m_files.begin() + idx); 227 return true; 228 } 229 return false; 230 } 231 232 static size_t GetFilesMatchingPartialPath (const char *path, bool dir_okay, FileSpecList &matches); 233 234 protected: 235 typedef std::vector<FileSpec> collection; ///< The collection type for the file list. 236 collection m_files; ///< A collection of FileSpec objects. 237 }; 238 239 } // namespace lldb_private 240 241 242 #endif // #if defined(__cplusplus) 243 #endif // liblldb_FileSpecList_h_ 244