1254721Semaste//===-- StringList.h --------------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#ifndef liblldb_StringList_h_
11254721Semaste#define liblldb_StringList_h_
12254721Semaste
13254721Semaste#include <stdint.h>
14254721Semaste
15254721Semaste#include "lldb/Core/STLUtils.h"
16254721Semaste#include "lldb/lldb-forward.h"
17254721Semaste
18254721Semastenamespace lldb_private {
19254721Semaste
20254721Semasteclass StringList
21254721Semaste{
22254721Semastepublic:
23254721Semaste
24254721Semaste    StringList ();
25254721Semaste
26254721Semaste    StringList (const char *str);
27254721Semaste
28254721Semaste    StringList (const char **strv, int strc);
29254721Semaste
30254721Semaste    virtual
31254721Semaste    ~StringList ();
32254721Semaste
33254721Semaste    void
34254721Semaste    AppendString (const std::string &s);
35254721Semaste
36254721Semaste    void
37269024Semaste    AppendString (std::string &&s);
38269024Semaste
39269024Semaste    void
40254721Semaste    AppendString (const char *str);
41254721Semaste
42254721Semaste    void
43254721Semaste    AppendString (const char *str, size_t str_len);
44254721Semaste
45254721Semaste    void
46254721Semaste    AppendList (const char ** strv, int strc);
47254721Semaste
48254721Semaste    void
49254721Semaste    AppendList (StringList strings);
50254721Semaste
51254721Semaste    bool
52254721Semaste    ReadFileLines (FileSpec &input_file);
53254721Semaste
54254721Semaste    size_t
55254721Semaste    GetSize () const;
56254721Semaste
57269024Semaste    void
58269024Semaste    SetSize (size_t n)
59269024Semaste    {
60269024Semaste        m_strings.resize(n);
61269024Semaste    }
62269024Semaste
63269024Semaste    size_t
64269024Semaste    GetMaxStringLength () const;
65269024Semaste
66269024Semaste    std::string &
67269024Semaste    operator [](size_t idx)
68269024Semaste    {
69269024Semaste        // No bounds checking, verify "idx" is good prior to calling this function
70269024Semaste        return m_strings[idx];
71269024Semaste    }
72269024Semaste
73269024Semaste    const std::string &
74269024Semaste    operator [](size_t idx) const
75269024Semaste    {
76269024Semaste        // No bounds checking, verify "idx" is good prior to calling this function
77269024Semaste        return m_strings[idx];
78269024Semaste    }
79269024Semaste
80269024Semaste    void
81269024Semaste    PopBack ()
82269024Semaste    {
83269024Semaste        m_strings.pop_back();
84269024Semaste    }
85254721Semaste    const char *
86254721Semaste    GetStringAtIndex (size_t idx) const;
87254721Semaste
88254721Semaste    void
89254721Semaste    Join (const char *separator, Stream &strm);
90254721Semaste
91254721Semaste    void
92254721Semaste    Clear ();
93254721Semaste
94254721Semaste    void
95254721Semaste    LongestCommonPrefix (std::string &common_prefix);
96254721Semaste
97254721Semaste    void
98269024Semaste    InsertStringAtIndex (size_t idx, const std::string &str);
99269024Semaste
100269024Semaste    void
101269024Semaste    InsertStringAtIndex (size_t idx, std::string &&str);
102269024Semaste
103269024Semaste    void
104254721Semaste    InsertStringAtIndex (size_t id, const char *str);
105254721Semaste
106254721Semaste    void
107254721Semaste    DeleteStringAtIndex (size_t id);
108254721Semaste
109254721Semaste    void
110254721Semaste    RemoveBlankLines ();
111254721Semaste
112254721Semaste    size_t
113269024Semaste    SplitIntoLines (const std::string &lines);
114269024Semaste
115269024Semaste    size_t
116254721Semaste    SplitIntoLines (const char *lines, size_t len);
117254721Semaste
118254721Semaste    std::string
119254721Semaste    CopyList(const char* item_preamble = NULL,
120269024Semaste             const char* items_sep = "\n") const;
121254721Semaste
122254721Semaste    StringList&
123254721Semaste    operator << (const char* str);
124254721Semaste
125254721Semaste    StringList&
126254721Semaste    operator << (StringList strings);
127254721Semaste
128254721Semaste    // This string list contains a list of valid auto completion
129254721Semaste    // strings, and the "s" is passed in. "matches" is filled in
130254721Semaste    // with zero or more string values that start with "s", and
131254721Semaste    // the first string to exactly match one of the string
132254721Semaste    // values in this collection, will have "exact_matches_idx"
133254721Semaste    // filled in to match the index, or "exact_matches_idx" will
134254721Semaste    // have SIZE_MAX
135254721Semaste    size_t
136254721Semaste    AutoComplete (const char *s,
137254721Semaste                  StringList &matches,
138254721Semaste                  size_t &exact_matches_idx) const;
139254721Semaste
140254721Semasteprivate:
141254721Semaste
142254721Semaste    STLStringArray m_strings;
143254721Semaste};
144254721Semaste
145254721Semaste} // namespace lldb_private
146254721Semaste
147254721Semaste#endif // liblldb_StringList_h_
148