1 //===-- SBEvent.cpp ---------------------------------------------*- 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 #include "SBEvent.h" 11 #include "SBBroadcaster.h" 12 13 #include "lldb/Core/Event.h" 14 #include "lldb/Core/Stream.h" 15 #include "lldb/Core/StreamFile.h" 16 #include "lldb/Core/ConstString.h" 17 #include "lldb/Target/Process.h" 18 #include "lldb/Breakpoint/Breakpoint.h" 19 #include "lldb/Interpreter/CommandInterpreter.h" 20 21 using namespace lldb; 22 using namespace lldb_private; 23 24 25 SBEvent::SBEvent () : 26 m_event_sp (), 27 m_lldb_object (NULL) 28 { 29 } 30 31 SBEvent::SBEvent (uint32_t event_type, const char *cstr, uint32_t cstr_len) : 32 m_event_sp (new Event (event_type, new EventDataBytes (cstr, cstr_len))), 33 m_lldb_object (m_event_sp.get()) 34 { 35 } 36 37 SBEvent::SBEvent (EventSP &event_sp) : 38 m_event_sp (event_sp), 39 m_lldb_object (event_sp.get()) 40 { 41 } 42 43 SBEvent::~SBEvent() 44 { 45 } 46 47 void 48 SBEvent::Dump (FILE *f) const 49 { 50 const Event *lldb_event = GetLLDBObjectPtr(); 51 if (lldb_event) 52 { 53 StreamFile str(f); 54 lldb_event->Dump ((Stream *) &str); 55 } 56 } 57 58 const char * 59 SBEvent::GetDataFlavor () 60 { 61 Event *lldb_event = SBEvent::GetLLDBObjectPtr(); 62 if (lldb_event) 63 return lldb_event->GetData()->GetFlavor().AsCString(); 64 return NULL; 65 } 66 67 uint32_t 68 SBEvent::GetType () const 69 { 70 const Event *lldb_event = SBEvent::GetLLDBObjectPtr(); 71 if (lldb_event) 72 return lldb_event->GetType(); 73 return 0; 74 } 75 76 SBBroadcaster 77 SBEvent::GetBroadcaster () const 78 { 79 SBBroadcaster broadcaster; 80 const Event *lldb_event = SBEvent::GetLLDBObjectPtr(); 81 if (lldb_event) 82 broadcaster.SetLLDBObjectPtr (lldb_event->GetBroadcaster(), false); 83 return broadcaster; 84 } 85 86 bool 87 SBEvent::BroadcasterMatchesPtr (const SBBroadcaster *broadcaster) 88 { 89 if (broadcaster) 90 { 91 Event *lldb_event = SBEvent::GetLLDBObjectPtr(); 92 if (lldb_event) 93 return lldb_event->BroadcasterIs (broadcaster->GetLLDBObjectPtr ()); 94 } 95 return false; 96 } 97 98 bool 99 SBEvent::BroadcasterMatchesRef (const SBBroadcaster &broadcaster) 100 { 101 Event *lldb_event = SBEvent::GetLLDBObjectPtr(); 102 if (lldb_event) 103 return lldb_event->BroadcasterIs (broadcaster.GetLLDBObjectPtr ()); 104 return false; 105 } 106 107 void 108 SBEvent::Clear() 109 { 110 Event *lldb_event = SBEvent::GetLLDBObjectPtr(); 111 if (lldb_event) 112 lldb_event->Clear(); 113 } 114 115 EventSP & 116 SBEvent::GetSharedPtr () const 117 { 118 return m_event_sp; 119 } 120 121 Event * 122 SBEvent::GetLLDBObjectPtr () 123 { 124 // There is a dangerous accessor call GetSharedPtr which can be used, so if 125 // we have anything valid in m_event_sp, we must use that since if it gets 126 // used by a function that puts something in there, then it won't update 127 // m_lldb_object... 128 if (m_event_sp) 129 m_lldb_object = m_event_sp.get(); 130 131 return m_lldb_object; 132 } 133 134 const Event * 135 SBEvent::GetLLDBObjectPtr () const 136 { 137 // There is a dangerous accessor call GetSharedPtr which can be used, so if 138 // we have anything valid in m_event_sp, we must use that since if it gets 139 // used by a function that puts something in there, then it won't update 140 // m_lldb_object... 141 if (m_event_sp) 142 m_lldb_object = m_event_sp.get(); 143 144 return m_lldb_object; 145 } 146 147 void 148 SBEvent::SetEventSP (EventSP &event_sp) 149 { 150 m_event_sp = event_sp; 151 m_lldb_object = m_event_sp.get(); 152 } 153 154 void 155 SBEvent::SetLLDBObjectPtr (Event* event_ptr) 156 { 157 m_lldb_object = event_ptr; 158 m_event_sp.reset(); 159 } 160 161 bool 162 SBEvent::IsValid() const 163 { 164 // Do NOT use m_lldb_object directly!!! Must use the SBEvent::GetLLDBObjectPtr() 165 // accessor. See comments in SBEvent::GetLLDBObjectPtr().... 166 return SBEvent::GetLLDBObjectPtr() != NULL; 167 168 } 169 170 const char * 171 SBEvent::GetCStringFromEvent (const SBEvent &event) 172 { 173 return reinterpret_cast<const char *>(EventDataBytes::GetBytesFromEvent (event.GetLLDBObjectPtr())); 174 } 175 176 177