CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
chain_element.h
1
2#pragma once
3
4#include <functional>
5#include <typeinfo>
6#include <memory>
7#include <vector>
8#include <system/smart_ptr.h>
9#include <defines.h>
10
11#if defined(ENABLE_CYCLES_DETECTION_EXT)
12
14namespace System { namespace Details {
15
16struct HeldVariables;
17struct SharedMembersType;
18
19}}
20
21namespace System { namespace Debug {
22
23class ChainElement
24{
25 enum class Mode
26 {
27 SmartPtr,
28 Object,
29 ClassCallback,
30 DelegateCallback
31 };
32
33public:
34 using ClassCallback = std::function<void(Details::SharedMembersType&)>;
35 using DelegateCallback = std::function<std::shared_ptr<Details::HeldVariables>()>;
36
37 ASPOSECPP_SHARED_API ChainElement(const char* field_name, const SmartPtrInfo& info);
38
39 ASPOSECPP_SHARED_API ChainElement(const char* field_name, const Object* object);
40
41 ASPOSECPP_SHARED_API ChainElement(const char* field_name, const std::type_info& member_info, const void* member_ptr,
42 ClassCallback callback);
43
44 ASPOSECPP_SHARED_API ChainElement(const char* field_name, const std::type_info& member_info, const void* member_ptr,
45 DelegateCallback callback);
46
47 std::vector<ChainElement> GetHolders() const;
48
49 bool operator < (const ChainElement& other) const;
50
51 const char* GetObjectName() const;
52 const char* GetFieldName() const;
53
54 const SmartPtrInfo& GetInfo() const;
55
56private:
57 Mode m_mode;
58
59 const char* m_object_name;
60 const char* m_field_name;
61 const void* m_ptr;
62
63 SmartPtrInfo m_info;
64
65 ClassCallback m_class_callback;
66 DelegateCallback m_delegate_callback;
67};
68
69}}
71
72#endif
@ Debug
Record debugging information.
Definition: db_command.h:9
constexpr bool operator<(std::nullptr_t, DateTime)
Definition: date_time.h:712