//===-- HistoryUnwind.h -----------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef liblldb_HistoryUnwind_h_
#define liblldb_HistoryUnwind_h_

// C Includes
// C++ Includes
#include <vector>

// Other libraries and framework includes
// Project includes
#include "lldb/lldb-private.h"
#include "lldb/Target/Unwind.h"

namespace lldb_private {

class HistoryUnwind : public lldb_private::Unwind
{
public:
    HistoryUnwind (Thread &thread, std::vector<lldb::addr_t> pcs, bool stop_id_is_valid);

    ~HistoryUnwind() override;

protected:
    void
    DoClear() override;

    lldb::RegisterContextSP
    DoCreateRegisterContextForFrame(StackFrame *frame) override;

    bool
    DoGetFrameInfoAtIndex(uint32_t frame_idx,
                          lldb::addr_t& cfa, 
                          lldb::addr_t& pc) override;
    uint32_t
    DoGetFrameCount() override;

private:

    std::vector<lldb::addr_t>   m_pcs;
    bool                        m_stop_id_is_valid;
};

} // namespace lldb_private

#endif // liblldb_HistoryUnwind_h_
