1//===-- CommandHistory.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_CommandHistory_h_
11#define liblldb_CommandHistory_h_
12
13// C Includes
14// C++ Includes
15#include <string>
16#include <vector>
17
18// Other libraries and framework includes
19// Project includes
20#include "lldb/lldb-private.h"
21#include "lldb/Core/Stream.h"
22#include "lldb/Host/Mutex.h"
23
24namespace lldb_private {
25
26class CommandHistory
27{
28public:
29    CommandHistory ();
30
31    ~CommandHistory ();
32
33    size_t
34    GetSize () const;
35
36    bool
37    IsEmpty () const;
38
39    const char*
40    FindString (const char* input_str) const;
41
42    const char*
43    GetStringAtIndex (size_t idx) const;
44
45    const char*
46    operator [] (size_t idx) const;
47
48    const char*
49    GetRecentmostString () const;
50
51    void
52    AppendString (const std::string& str,
53                  bool reject_if_dupe = true);
54
55    void
56    Clear ();
57
58    void
59    Dump (Stream& stream,
60          size_t start_idx = 0,
61          size_t stop_idx = SIZE_MAX) const;
62
63    static const char g_repeat_char = '!';
64
65private:
66    DISALLOW_COPY_AND_ASSIGN(CommandHistory);
67
68    typedef std::vector<std::string> History;
69    mutable Mutex m_mutex;
70    History m_history;
71};
72
73} // namespace lldb_private
74
75#endif  // liblldb_CommandHistory_h_
76