blob: 4d1c7b91e8e9b2aeb28cd99b32616506844b0d24 [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
Greg Clayton63094e02010-06-23 01:19:29 +000013#include "lldb/API/SBDebugger.h"
Chris Lattner24943d22010-06-08 16:52:24 +000014#include "lldb/API/SBError.h"
Greg Clayton63094e02010-06-23 01:19:29 +000015#include "lldb/API/SBInputReader.h"
Chris Lattner24943d22010-06-08 16:52:24 +000016#include "lldb/API/SBStringList.h"
17#include "lldb/Core/InputReader.h"
18
19
20using namespace lldb;
21using namespace lldb_private;
22
23SBInputReader::SBInputReader () :
Greg Clayton63094e02010-06-23 01:19:29 +000024 m_opaque_sp (),
Chris Lattner24943d22010-06-08 16:52:24 +000025 m_callback_function (NULL),
26 m_callback_baton (NULL)
27
28{
29}
30
31SBInputReader::SBInputReader (const lldb::InputReaderSP &reader_sp) :
Greg Clayton63094e02010-06-23 01:19:29 +000032 m_opaque_sp (reader_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000033{
34}
35
36SBInputReader::SBInputReader (const SBInputReader &rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000037 m_opaque_sp (rhs.m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000038{
39}
40
41SBInputReader::~SBInputReader ()
42{
43}
44
45size_t
46SBInputReader::PrivateCallback
47(
48 void *baton,
Greg Clayton63094e02010-06-23 01:19:29 +000049 InputReader &reader,
Chris Lattner24943d22010-06-08 16:52:24 +000050 lldb::InputReaderAction notification,
51 const char *bytes,
52 size_t bytes_len
53)
54{
55 SBInputReader *sb_reader = (SBInputReader *)baton;
56 return sb_reader->m_callback_function (sb_reader->m_callback_baton,
57 sb_reader,
58 notification,
59 bytes,
60 bytes_len);
61}
62
63SBError
64SBInputReader::Initialize
65(
Greg Clayton63094e02010-06-23 01:19:29 +000066 SBDebugger &debugger,
Chris Lattner24943d22010-06-08 16:52:24 +000067 Callback callback_function,
68 void *callback_baton,
69 lldb::InputReaderGranularity granularity,
70 const char *end_token,
71 const char *prompt,
72 bool echo
73)
74{
75 SBError sb_error;
Greg Clayton63094e02010-06-23 01:19:29 +000076 m_opaque_sp.reset (new InputReader (debugger.ref()));
Chris Lattner24943d22010-06-08 16:52:24 +000077
78 m_callback_function = callback_function;
79 m_callback_baton = callback_baton;
80
Greg Clayton63094e02010-06-23 01:19:29 +000081 if (m_opaque_sp)
Chris Lattner24943d22010-06-08 16:52:24 +000082 {
Greg Clayton63094e02010-06-23 01:19:29 +000083 sb_error.SetError (m_opaque_sp->Initialize (SBInputReader::PrivateCallback,
Chris Lattner24943d22010-06-08 16:52:24 +000084 this,
85 granularity,
86 end_token,
87 prompt,
88 echo));
89 }
90
91 if (sb_error.Fail())
92 {
Greg Clayton63094e02010-06-23 01:19:29 +000093 m_opaque_sp.reset ();
Chris Lattner24943d22010-06-08 16:52:24 +000094 m_callback_function = NULL;
95 m_callback_baton = NULL;
96 }
97
98 return sb_error;
99}
100
101bool
102SBInputReader::IsValid () const
103{
Greg Clayton63094e02010-06-23 01:19:29 +0000104 return (m_opaque_sp.get() != NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000105}
106
107const SBInputReader &
108SBInputReader::operator = (const SBInputReader &rhs)
109{
110 if (this != &rhs)
Greg Clayton63094e02010-06-23 01:19:29 +0000111 m_opaque_sp = rhs.m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000112 return *this;
113}
114
Greg Clayton63094e02010-06-23 01:19:29 +0000115InputReader *
Chris Lattner24943d22010-06-08 16:52:24 +0000116SBInputReader::operator->() const
117{
Greg Clayton63094e02010-06-23 01:19:29 +0000118 return m_opaque_sp.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000119}
120
121lldb::InputReaderSP &
122SBInputReader::operator *()
123{
Greg Clayton63094e02010-06-23 01:19:29 +0000124 return m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000125}
126
127const lldb::InputReaderSP &
128SBInputReader::operator *() const
129{
Greg Clayton63094e02010-06-23 01:19:29 +0000130 return m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000131}
132
Greg Clayton63094e02010-06-23 01:19:29 +0000133InputReader *
Chris Lattner24943d22010-06-08 16:52:24 +0000134SBInputReader::get() const
135{
Greg Clayton63094e02010-06-23 01:19:29 +0000136 return m_opaque_sp.get();
137}
138
139InputReader &
140SBInputReader::ref() const
141{
142 assert (m_opaque_sp.get());
143 return *m_opaque_sp;
Chris Lattner24943d22010-06-08 16:52:24 +0000144}
145
146bool
147SBInputReader::IsDone () const
148{
Greg Clayton63094e02010-06-23 01:19:29 +0000149 if (m_opaque_sp)
150 return m_opaque_sp->IsDone();
Chris Lattner24943d22010-06-08 16:52:24 +0000151 else
152 return true;
153}
154
155void
156SBInputReader::SetIsDone (bool value)
157{
Greg Clayton63094e02010-06-23 01:19:29 +0000158 if (m_opaque_sp)
159 m_opaque_sp->SetIsDone (value);
Chris Lattner24943d22010-06-08 16:52:24 +0000160}
161
162bool
163SBInputReader::IsActive () const
164{
Greg Clayton63094e02010-06-23 01:19:29 +0000165 if (m_opaque_sp)
166 return m_opaque_sp->IsActive();
Chris Lattner24943d22010-06-08 16:52:24 +0000167 else
168 return false;
169}
170
171InputReaderGranularity
172SBInputReader::GetGranularity ()
173{
Greg Clayton63094e02010-06-23 01:19:29 +0000174 if (m_opaque_sp)
175 return m_opaque_sp->GetGranularity();
Chris Lattner24943d22010-06-08 16:52:24 +0000176 else
177 return eInputReaderGranularityInvalid;
178}