diff options
Diffstat (limited to 'include/lldb/Utility/StringList.h')
-rw-r--r-- | include/lldb/Utility/StringList.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/include/lldb/Utility/StringList.h b/include/lldb/Utility/StringList.h new file mode 100644 index 000000000000..2be9a6bd8346 --- /dev/null +++ b/include/lldb/Utility/StringList.h @@ -0,0 +1,139 @@ +//===-- StringList.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_StringList_h_ +#define liblldb_StringList_h_ + +#include "llvm/ADT/StringRef.h" + +#include <stddef.h> // for size_t +#include <string> +#include <vector> + +namespace lldb_private { +class Log; +} +namespace lldb_private { +class Stream; +} + +namespace lldb_private { + +class StringList { +public: + StringList(); + + StringList(const char *str); + + StringList(const char **strv, int strc); + + virtual ~StringList(); + + void AppendString(const std::string &s); + + void AppendString(std::string &&s); + + void AppendString(const char *str); + + void AppendString(const char *str, size_t str_len); + + void AppendString(llvm::StringRef str); + + void AppendList(const char **strv, int strc); + + void AppendList(StringList strings); + + size_t GetSize() const; + + void SetSize(size_t n) { m_strings.resize(n); } + + size_t GetMaxStringLength() const; + + std::string &operator[](size_t idx) { + // No bounds checking, verify "idx" is good prior to calling this function + return m_strings[idx]; + } + + const std::string &operator[](size_t idx) const { + // No bounds checking, verify "idx" is good prior to calling this function + return m_strings[idx]; + } + + void PopBack() { m_strings.pop_back(); } + const char *GetStringAtIndex(size_t idx) const; + + void Join(const char *separator, Stream &strm); + + void Clear(); + + void LongestCommonPrefix(std::string &common_prefix); + + void InsertStringAtIndex(size_t idx, const std::string &str); + + void InsertStringAtIndex(size_t idx, std::string &&str); + + void InsertStringAtIndex(size_t id, const char *str); + + void DeleteStringAtIndex(size_t id); + + void RemoveBlankLines(); + + size_t SplitIntoLines(const std::string &lines); + + size_t SplitIntoLines(const char *lines, size_t len); + + std::string CopyList(const char *item_preamble = nullptr, + const char *items_sep = "\n") const; + + StringList &operator<<(const char *str); + + StringList &operator<<(const std::string &s); + + StringList &operator<<(StringList strings); + + // Copy assignment for a vector of strings + StringList &operator=(const std::vector<std::string> &rhs); + + // This string list contains a list of valid auto completion + // strings, and the "s" is passed in. "matches" is filled in + // with zero or more string values that start with "s", and + // the first string to exactly match one of the string + // values in this collection, will have "exact_matches_idx" + // filled in to match the index, or "exact_matches_idx" will + // have SIZE_MAX + size_t AutoComplete(llvm::StringRef s, StringList &matches, + size_t &exact_matches_idx) const; + + // Dump the StringList to the given lldb_private::Log, `log`, one item per + // line. + // If given, `name` will be used to identify the start and end of the list in + // the output. + virtual void LogDump(Log *log, const char *name = nullptr); + + // Static helper to convert an iterable of strings to a StringList, and then + // dump it with the semantics of the `LogDump` method. + template <typename T> + static void LogDump(Log *log, T s_iterable, const char *name = nullptr) { + if (!log) + return; + // Make a copy of the iterable as a StringList + StringList l{}; + for (const auto &s : s_iterable) + l << s; + + l.LogDump(log, name); + } + +private: + std::vector<std::string> m_strings; +}; + +} // namespace lldb_private + +#endif // liblldb_StringList_h_ |