mirror of
https://github.com/opnsense/src.git
synced 2026-02-28 04:10:49 -05:00
This corresponds with the branchpoint for the 3.6 release. A number of files not required for the FreeBSD build have been removed. Sponsored by: DARPA, AFRL
246 lines
7.9 KiB
C++
246 lines
7.9 KiB
C++
//===-- FileSpecList.h ------------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef liblldb_FileSpecList_h_
|
|
#define liblldb_FileSpecList_h_
|
|
#if defined(__cplusplus)
|
|
|
|
#include "lldb/lldb-private.h"
|
|
#include "lldb/Host/FileSpec.h"
|
|
#include <vector>
|
|
|
|
namespace lldb_private {
|
|
|
|
//----------------------------------------------------------------------
|
|
/// @class FileSpecList FileSpecList.h "lldb/Core/FileSpecList.h"
|
|
/// @brief A file collection class.
|
|
///
|
|
/// A class that contains a mutable list of FileSpec objects.
|
|
//----------------------------------------------------------------------
|
|
class FileSpecList
|
|
{
|
|
public:
|
|
//------------------------------------------------------------------
|
|
/// Default constructor.
|
|
///
|
|
/// Initialize this object with an empty file list.
|
|
//------------------------------------------------------------------
|
|
FileSpecList ();
|
|
|
|
//------------------------------------------------------------------
|
|
/// Copy constructor.
|
|
///
|
|
/// Initialize this object with a copy of the file list from \a rhs.
|
|
///
|
|
/// @param[in] rhs
|
|
/// A const reference to another file list object.
|
|
//------------------------------------------------------------------
|
|
FileSpecList (const FileSpecList &rhs);
|
|
|
|
//------------------------------------------------------------------
|
|
/// Destructor.
|
|
//------------------------------------------------------------------
|
|
~FileSpecList ();
|
|
|
|
//------------------------------------------------------------------
|
|
/// Assignment operator.
|
|
///
|
|
/// Replace the file list in this object with the file list from
|
|
/// \a rhs.
|
|
///
|
|
/// @param[in] rhs
|
|
/// A file list object to copy.
|
|
///
|
|
/// @return
|
|
/// A const reference to this object.
|
|
//------------------------------------------------------------------
|
|
const FileSpecList&
|
|
operator= (const FileSpecList &rhs);
|
|
|
|
//------------------------------------------------------------------
|
|
/// Append a FileSpec object to the list.
|
|
///
|
|
/// Appends \a file to the end of the file list.
|
|
///
|
|
/// @param[in] file
|
|
/// A new file to append to this file list.
|
|
//------------------------------------------------------------------
|
|
void
|
|
Append (const FileSpec &file);
|
|
|
|
//------------------------------------------------------------------
|
|
/// Append a FileSpec object if unique.
|
|
///
|
|
/// Appends \a file to the end of the file list if it doesn't
|
|
/// already exist in the file list.
|
|
///
|
|
/// @param[in] file
|
|
/// A new file to append to this file list.
|
|
///
|
|
/// @return
|
|
/// \b true if the file was appended, \b false otherwise.
|
|
//------------------------------------------------------------------
|
|
bool
|
|
AppendIfUnique (const FileSpec &file);
|
|
|
|
//------------------------------------------------------------------
|
|
/// Clears the file list.
|
|
//------------------------------------------------------------------
|
|
void
|
|
Clear ();
|
|
|
|
//------------------------------------------------------------------
|
|
/// Dumps the file list to the supplied stream pointer "s".
|
|
///
|
|
/// @param[in] s
|
|
/// The stream that will be used to dump the object description.
|
|
//------------------------------------------------------------------
|
|
void
|
|
Dump (Stream *s, const char *separator_cstr = "\n") const;
|
|
|
|
//------------------------------------------------------------------
|
|
/// Find a file index.
|
|
///
|
|
/// Find the index of the file in the file spec list that matches
|
|
/// \a file starting \a idx entries into the file spec list.
|
|
///
|
|
/// @param[in] idx
|
|
/// An index into the file list.
|
|
///
|
|
/// @param[in] file
|
|
/// The file specification to search for.
|
|
///
|
|
/// @param[in] full
|
|
/// Should FileSpec::Equal be called with "full" true or false.
|
|
///
|
|
/// @param[in] remove_backup_dots
|
|
/// Should FileSpec::Equal be called with "remove_backup_dots" true or false.
|
|
///
|
|
/// @return
|
|
/// The index of the file that matches \a file if it is found,
|
|
/// else UINT32_MAX is returned.
|
|
//------------------------------------------------------------------
|
|
size_t
|
|
FindFileIndex (size_t idx, const FileSpec &file, bool full, bool remove_backup_dots = false) const;
|
|
|
|
//------------------------------------------------------------------
|
|
/// Get file at index.
|
|
///
|
|
/// Gets a file from the file list. If \a idx is not a valid index,
|
|
/// an empty FileSpec object will be returned. The file objects
|
|
/// that are returned can be tested using
|
|
/// FileSpec::operator void*().
|
|
///
|
|
/// @param[in] idx
|
|
/// An index into the file list.
|
|
///
|
|
/// @return
|
|
/// A copy of the FileSpec object at index \a idx. If \a idx
|
|
/// is out of range, then an empty FileSpec object will be
|
|
/// returned.
|
|
//------------------------------------------------------------------
|
|
const FileSpec &
|
|
GetFileSpecAtIndex (size_t idx) const;
|
|
|
|
//------------------------------------------------------------------
|
|
/// Get file specification pointer at index.
|
|
///
|
|
/// Gets a file from the file list. The file objects that are
|
|
/// returned can be tested using FileSpec::operator void*().
|
|
///
|
|
/// @param[in] idx
|
|
/// An index into the file list.
|
|
///
|
|
/// @return
|
|
/// A pointer to a contained FileSpec object at index \a idx.
|
|
/// If \a idx is out of range, then an NULL is returned.
|
|
//------------------------------------------------------------------
|
|
const FileSpec *
|
|
GetFileSpecPointerAtIndex (size_t idx) const;
|
|
|
|
//------------------------------------------------------------------
|
|
/// Get the memory cost of this object.
|
|
///
|
|
/// Return the size in bytes that this object takes in memory. This
|
|
/// returns the size in bytes of this object, not any shared string
|
|
/// values it may refer to.
|
|
///
|
|
/// @return
|
|
/// The number of bytes that this object occupies in memory.
|
|
///
|
|
/// @see ConstString::StaticMemorySize ()
|
|
//------------------------------------------------------------------
|
|
size_t
|
|
MemorySize () const;
|
|
|
|
bool
|
|
IsEmpty() const
|
|
{
|
|
return m_files.empty();
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
/// Get the number of files in the file list.
|
|
///
|
|
/// @return
|
|
/// The number of files in the file spec list.
|
|
//------------------------------------------------------------------
|
|
size_t
|
|
GetSize () const;
|
|
|
|
bool
|
|
Insert (size_t idx, const FileSpec &file)
|
|
{
|
|
if (idx < m_files.size())
|
|
{
|
|
m_files.insert(m_files.begin() + idx, file);
|
|
return true;
|
|
}
|
|
else if (idx == m_files.size())
|
|
{
|
|
m_files.push_back(file);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool
|
|
Replace (size_t idx, const FileSpec &file)
|
|
{
|
|
if (idx < m_files.size())
|
|
{
|
|
m_files[idx] = file;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool
|
|
Remove (size_t idx)
|
|
{
|
|
if (idx < m_files.size())
|
|
{
|
|
m_files.erase(m_files.begin() + idx);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
static size_t GetFilesMatchingPartialPath (const char *path, bool dir_okay, FileSpecList &matches);
|
|
|
|
protected:
|
|
typedef std::vector<FileSpec> collection; ///< The collection type for the file list.
|
|
collection m_files; ///< A collection of FileSpec objects.
|
|
};
|
|
|
|
} // namespace lldb_private
|
|
|
|
|
|
#endif // #if defined(__cplusplus)
|
|
#endif // liblldb_FileSpecList_h_
|