ValueObjectConstResultImpl.h revision dfafa141aa9d0dd0596bf08b3f941be8c308316d
1//===-- ValueObjectConstResultImpl.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_ValueObjectConstResultImpl_h_
11#define liblldb_ValueObjectConstResultImpl_h_
12
13// C Includes
14// C++ Includes
15// Other libraries and framework includes
16// Project includes
17#include "lldb/Core/ValueObject.h"
18
19namespace lldb_private {
20
21//----------------------------------------------------------------------
22// A class wrapping common implementation details for operations in
23// ValueObjectConstResult ( & Child ) that may need to jump from the host
24// memory space into the target's memory space
25//----------------------------------------------------------------------
26class ValueObjectConstResultImpl
27{
28public:
29
30    ValueObjectConstResultImpl (ValueObject* valobj,
31                                lldb::addr_t live_address = LLDB_INVALID_ADDRESS);
32
33    virtual
34    ~ValueObjectConstResultImpl()
35    {
36    }
37
38    lldb::ValueObjectSP
39    Dereference (Error &error);
40
41    ValueObject *
42    CreateChildAtIndex (uint32_t idx, bool synthetic_array_member, int32_t synthetic_index);
43
44    lldb::ValueObjectSP
45    GetSyntheticChildAtOffset (uint32_t offset, const ClangASTType& type, bool can_create);
46
47    lldb::ValueObjectSP
48    AddressOf (Error &error);
49
50    bool
51    NeedsDerefOnTarget()
52    {
53        m_impl_backend->UpdateValueIfNeeded(false);
54        return (m_impl_backend->GetValue().GetValueType() == Value::eValueTypeHostAddress);
55    }
56
57    lldb::addr_t
58    GetLiveAddress()
59    {
60        return m_live_address;
61    }
62
63    void
64    SetLiveAddress(lldb::addr_t addr = LLDB_INVALID_ADDRESS,
65                   AddressType address_type = eAddressTypeLoad)
66    {
67        m_live_address = addr;
68        m_live_address_type = address_type;
69    }
70
71    lldb::ValueObjectSP
72    DerefOnTarget();
73
74    virtual lldb::addr_t
75    GetAddressOf (bool scalar_is_load_address = true,
76                  AddressType *address_type = NULL);
77
78    virtual size_t
79    GetPointeeData (DataExtractor& data,
80                    uint32_t item_idx = 0,
81					uint32_t item_count = 1);
82
83private:
84
85    ValueObject *m_impl_backend;
86    lldb::addr_t m_live_address;
87    AddressType m_live_address_type;
88    lldb::ValueObjectSP m_load_addr_backend;
89    lldb::ValueObjectSP m_address_of_backend;
90
91    DISALLOW_COPY_AND_ASSIGN (ValueObjectConstResultImpl);
92};
93
94} // namespace lldb_private
95
96#endif  // liblldb_ValueObjectConstResultImpl_h_
97