1d7f3f118SEugene Zelenko //===-- ValueObjectConstResultImpl.h ----------------------------*- C++ -*-===//
29128ee2fSEnrico Granata //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
69128ee2fSEnrico Granata //
79128ee2fSEnrico Granata //===----------------------------------------------------------------------===//
89128ee2fSEnrico Granata 
9cdc514e4SJonas Devlieghere #ifndef LLDB_CORE_VALUEOBJECTCONSTRESULTIMPL_H
10cdc514e4SJonas Devlieghere #define LLDB_CORE_VALUEOBJECTCONSTRESULTIMPL_H
119128ee2fSEnrico Granata 
12672d2c12SJonas Devlieghere #include "lldb/Utility/ConstString.h"
13672d2c12SJonas Devlieghere #include "lldb/lldb-defines.h"
14672d2c12SJonas Devlieghere #include "lldb/lldb-forward.h"
15672d2c12SJonas Devlieghere #include "lldb/lldb-private-enumerations.h"
16672d2c12SJonas Devlieghere #include "lldb/lldb-types.h"
172f3df613SZachary Turner 
18*76e47d48SRaphael Isemann #include <cstddef>
19*76e47d48SRaphael Isemann #include <cstdint>
202f3df613SZachary Turner namespace lldb_private {
212f3df613SZachary Turner class CompilerType;
222f3df613SZachary Turner class DataExtractor;
2397206d57SZachary Turner class Status;
242f3df613SZachary Turner class ValueObject;
252f3df613SZachary Turner }
269128ee2fSEnrico Granata 
279128ee2fSEnrico Granata namespace lldb_private {
289128ee2fSEnrico Granata 
29bda83ba0SRaphael Isemann /// A class wrapping common implementation details for operations in
30bda83ba0SRaphael Isemann /// ValueObjectConstResult ( & Child ) that may need to jump from the host
31bda83ba0SRaphael Isemann /// memory space into the target's memory space.
32b9c1b51eSKate Stone class ValueObjectConstResultImpl {
339128ee2fSEnrico Granata public:
349128ee2fSEnrico Granata   ValueObjectConstResultImpl(ValueObject *valobj,
359128ee2fSEnrico Granata                              lldb::addr_t live_address = LLDB_INVALID_ADDRESS);
369128ee2fSEnrico Granata 
37b9c1b51eSKate Stone   virtual ~ValueObjectConstResultImpl() = default;
38b9c1b51eSKate Stone 
3997206d57SZachary Turner   lldb::ValueObjectSP Dereference(Status &error);
40b9c1b51eSKate Stone 
41b9c1b51eSKate Stone   ValueObject *CreateChildAtIndex(size_t idx, bool synthetic_array_member,
42b9c1b51eSKate Stone                                   int32_t synthetic_index);
439128ee2fSEnrico Granata 
449128ee2fSEnrico Granata   lldb::ValueObjectSP
45b9c1b51eSKate Stone   GetSyntheticChildAtOffset(uint32_t offset, const CompilerType &type,
46936499aeSEnrico Granata                             bool can_create,
47936499aeSEnrico Granata                             ConstString name_const_str = ConstString());
489128ee2fSEnrico Granata 
4997206d57SZachary Turner   lldb::ValueObjectSP AddressOf(Status &error);
509128ee2fSEnrico Granata 
GetLiveAddress()51b9c1b51eSKate Stone   lldb::addr_t GetLiveAddress() { return m_live_address; }
52f8877efcSSiva Chandra 
53b9c1b51eSKate Stone   lldb::ValueObjectSP Cast(const CompilerType &compiler_type);
549128ee2fSEnrico Granata 
55b9c1b51eSKate Stone   void SetLiveAddress(lldb::addr_t addr = LLDB_INVALID_ADDRESS,
56b9c1b51eSKate Stone                       AddressType address_type = eAddressTypeLoad) {
579128ee2fSEnrico Granata     m_live_address = addr;
58b456b792SJohnny Chen     m_live_address_type = address_type;
599128ee2fSEnrico Granata   }
609128ee2fSEnrico Granata 
61b9c1b51eSKate Stone   virtual lldb::addr_t GetAddressOf(bool scalar_is_load_address = true,
62d7f3f118SEugene Zelenko                                     AddressType *address_type = nullptr);
63b456b792SJohnny Chen 
64b9c1b51eSKate Stone   virtual size_t GetPointeeData(DataExtractor &data, uint32_t item_idx = 0,
659128ee2fSEnrico Granata                                 uint32_t item_count = 1);
669128ee2fSEnrico Granata 
679128ee2fSEnrico Granata private:
689128ee2fSEnrico Granata   ValueObject *m_impl_backend;
699128ee2fSEnrico Granata   lldb::addr_t m_live_address;
70b456b792SJohnny Chen   AddressType m_live_address_type;
719128ee2fSEnrico Granata   lldb::ValueObjectSP m_address_of_backend;
729128ee2fSEnrico Granata 
73eaebcbc6SKonrad Kleine   ValueObjectConstResultImpl(const ValueObjectConstResultImpl &) = delete;
74eaebcbc6SKonrad Kleine   const ValueObjectConstResultImpl &
75eaebcbc6SKonrad Kleine   operator=(const ValueObjectConstResultImpl &) = delete;
769128ee2fSEnrico Granata };
779128ee2fSEnrico Granata 
789128ee2fSEnrico Granata } // namespace lldb_private
799128ee2fSEnrico Granata 
80cdc514e4SJonas Devlieghere #endif // LLDB_CORE_VALUEOBJECTCONSTRESULTIMPL_H
81