blob: 022d73207ad24627ca19ed8b1904dad9d6b0614c [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBInputReader.cpp ---------------------------------------*- 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
11#include "lldb/lldb-enumerations.h"
12
13#include "lldb/API/SBInputReader.h"
14#include "lldb/API/SBError.h"
15#include "lldb/API/SBStringList.h"
16#include "lldb/Core/InputReader.h"
17
18
19using namespace lldb;
20using namespace lldb_private;
21
22SBInputReader::SBInputReader () :
23 m_reader_sp (),
24 m_callback_function (NULL),
25 m_callback_baton (NULL)
26
27{
28}
29
30SBInputReader::SBInputReader (const lldb::InputReaderSP &reader_sp) :
31 m_reader_sp (reader_sp)
32{
33}
34
35SBInputReader::SBInputReader (const SBInputReader &rhs) :
36 m_reader_sp (rhs.m_reader_sp)
37{
38}
39
40SBInputReader::~SBInputReader ()
41{
42}
43
44size_t
45SBInputReader::PrivateCallback
46(
47 void *baton,
48 InputReader *reader,
49 lldb::InputReaderAction notification,
50 const char *bytes,
51 size_t bytes_len
52)
53{
54 SBInputReader *sb_reader = (SBInputReader *)baton;
55 return sb_reader->m_callback_function (sb_reader->m_callback_baton,
56 sb_reader,
57 notification,
58 bytes,
59 bytes_len);
60}
61
62SBError
63SBInputReader::Initialize
64(
65 Callback callback_function,
66 void *callback_baton,
67 lldb::InputReaderGranularity granularity,
68 const char *end_token,
69 const char *prompt,
70 bool echo
71)
72{
73 SBError sb_error;
74 m_reader_sp.reset (new InputReader ());
75
76 m_callback_function = callback_function;
77 m_callback_baton = callback_baton;
78
79 if (m_reader_sp)
80 {
81 sb_error.SetError (m_reader_sp->Initialize (SBInputReader::PrivateCallback,
82 this,
83 granularity,
84 end_token,
85 prompt,
86 echo));
87 }
88
89 if (sb_error.Fail())
90 {
91 m_reader_sp.reset ();
92 m_callback_function = NULL;
93 m_callback_baton = NULL;
94 }
95
96 return sb_error;
97}
98
99bool
100SBInputReader::IsValid () const
101{
102 return (m_reader_sp.get() != NULL);
103}
104
105const SBInputReader &
106SBInputReader::operator = (const SBInputReader &rhs)
107{
108 if (this != &rhs)
109 m_reader_sp = rhs.m_reader_sp;
110 return *this;
111}
112
113lldb_private::InputReader *
114SBInputReader::operator->() const
115{
116 return m_reader_sp.get();
117}
118
119lldb::InputReaderSP &
120SBInputReader::operator *()
121{
122 return m_reader_sp;
123}
124
125const lldb::InputReaderSP &
126SBInputReader::operator *() const
127{
128 return m_reader_sp;
129}
130
131lldb_private::InputReader *
132SBInputReader::get() const
133{
134 return m_reader_sp.get();
135}
136
137bool
138SBInputReader::IsDone () const
139{
140 if (m_reader_sp)
141 return m_reader_sp->IsDone();
142 else
143 return true;
144}
145
146void
147SBInputReader::SetIsDone (bool value)
148{
149 if (m_reader_sp)
150 m_reader_sp->SetIsDone (value);
151}
152
153bool
154SBInputReader::IsActive () const
155{
156 if (m_reader_sp)
157 return m_reader_sp->IsActive();
158 else
159 return false;
160}
161
162InputReaderGranularity
163SBInputReader::GetGranularity ()
164{
165 if (m_reader_sp)
166 return m_reader_sp->GetGranularity();
167 else
168 return eInputReaderGranularityInvalid;
169}