diff options
Diffstat (limited to 'contrib/llvm/tools/lldb/source/API/SBInputReader.cpp')
| -rw-r--r-- | contrib/llvm/tools/lldb/source/API/SBInputReader.cpp | 216 | 
1 files changed, 216 insertions, 0 deletions
diff --git a/contrib/llvm/tools/lldb/source/API/SBInputReader.cpp b/contrib/llvm/tools/lldb/source/API/SBInputReader.cpp new file mode 100644 index 000000000000..82b75c869f08 --- /dev/null +++ b/contrib/llvm/tools/lldb/source/API/SBInputReader.cpp @@ -0,0 +1,216 @@ +//===-- SBInputReader.cpp ---------------------------------------*- C++ -*-===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + +#include "lldb/lldb-enumerations.h" + +#include "lldb/API/SBDebugger.h" +#include "lldb/API/SBError.h" +#include "lldb/API/SBInputReader.h" +#include "lldb/API/SBStream.h" +#include "lldb/API/SBStringList.h" +#include "lldb/Core/InputReader.h" +#include "lldb/Core/Log.h" + + +using namespace lldb; +using namespace lldb_private; + +SBInputReader::SBInputReader ()  : +    m_opaque_sp (), +    m_callback_function (NULL), +    m_callback_baton (NULL) + +{ +} + +SBInputReader::SBInputReader (const lldb::InputReaderSP &reader_sp) : +    m_opaque_sp (reader_sp) +{ +    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + +    if (log) +        log->Printf ("SBInputReader::SBInputReader (reader_sp=%p) => SBInputReader(%p)", reader_sp.get(),  +                     m_opaque_sp.get()); +} + +SBInputReader::SBInputReader (const SBInputReader &rhs) : +    m_opaque_sp (rhs.m_opaque_sp) +{ +    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + +    if (log) +        log->Printf("SBInputReader::SBInputReader (rhs.sp=%p) => SBInputReader(%p)",  +                    rhs.m_opaque_sp.get(), m_opaque_sp.get()); +} + +SBInputReader::~SBInputReader () +{ +} + +size_t +SBInputReader::PrivateCallback  +( +    void *baton,  +    InputReader &reader,  +    lldb::InputReaderAction notification, +    const char *bytes,  +    size_t bytes_len +) +{ +    SBInputReader *sb_reader = (SBInputReader *)baton; +    return sb_reader->m_callback_function (sb_reader->m_callback_baton,  +                                           sb_reader,  +                                           notification, +                                           bytes, +                                           bytes_len); +} + +SBError +SBInputReader::Initialize  +( +    SBDebugger &debugger, +    Callback callback_function, +    void *callback_baton, +    lldb::InputReaderGranularity granularity, +    const char *end_token, +    const char *prompt, +    bool echo +) +{ +    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + +    if (log) +        log->Printf("SBInputReader(%p)::Initialize (SBDebugger(%p), callback_function=%p, callback_baton=%p, " +                    "granularity=%s, end_token=\"%s\", prompt=\"%s\", echo=%i)",  +                    m_opaque_sp.get(),  +                    debugger.get(),  +                    callback_function, +                    callback_baton,  +                    InputReader::GranularityAsCString (granularity), end_token, prompt,  +                    echo); + +    SBError sb_error; +    m_opaque_sp.reset (new InputReader (debugger.ref())); +     +    m_callback_function = callback_function; +    m_callback_baton = callback_baton; + +    if (m_opaque_sp) +    { +        sb_error.SetError (m_opaque_sp->Initialize (SBInputReader::PrivateCallback, +                                                    this, +                                                    granularity, +                                                    end_token, +                                                    prompt, +                                                    echo)); +    } + +    if (sb_error.Fail()) +    { +        m_opaque_sp.reset (); +        m_callback_function = NULL; +        m_callback_baton = NULL; +    } + +    if (log) +    { +        SBStream sstr; +        sb_error.GetDescription (sstr); +        log->Printf ("SBInputReader(%p)::Initialize (...) => SBError(%p): %s", m_opaque_sp.get(), +                     sb_error.get(), sstr.GetData()); +    } + +    return sb_error; +} + +bool +SBInputReader::IsValid () const +{ +    return (m_opaque_sp.get() != NULL); +} + +const SBInputReader & +SBInputReader::operator = (const SBInputReader &rhs) +{ +    if (this != &rhs) +        m_opaque_sp = rhs.m_opaque_sp; +    return *this; +} + +InputReader * +SBInputReader::operator->() const +{ +    return m_opaque_sp.get(); +} + +lldb::InputReaderSP & +SBInputReader::operator *() +{ +    return m_opaque_sp; +} + +const lldb::InputReaderSP & +SBInputReader::operator *() const +{ +    return m_opaque_sp; +} + +InputReader * +SBInputReader::get() const +{ +    return m_opaque_sp.get(); +} + +InputReader & +SBInputReader::ref() const +{ +    assert (m_opaque_sp.get()); +    return *m_opaque_sp; +} + +bool +SBInputReader::IsDone () const +{ +    if (m_opaque_sp) +        return m_opaque_sp->IsDone(); +    else +        return true; +} + +void +SBInputReader::SetIsDone (bool value) +{ +    if (m_opaque_sp) +        m_opaque_sp->SetIsDone (value); +} + +bool +SBInputReader::IsActive () const +{ +    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + +    bool ret_value = false; +    if (m_opaque_sp) +        ret_value = m_opaque_sp->IsActive(); +     +    if (log) +        log->Printf ("SBInputReader(%p)::IsActive () => %i", m_opaque_sp.get(), ret_value); + +    return ret_value; +} + +InputReaderGranularity +SBInputReader::GetGranularity () +{ +    if (m_opaque_sp) +        return m_opaque_sp->GetGranularity(); +    else +        return eInputReaderGranularityInvalid; +}  | 
