Home | History | Annotate | Download | only in Core
      1 //===-- Event.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_Event_h_
     11 #define liblldb_Event_h_
     12 
     13 // C Includes
     14 // C++ Includes
     15 #include <list>
     16 #include <string>
     17 
     18 // Other libraries and framework includes
     19 // Project includes
     20 #include "lldb/lldb-private.h"
     21 #include "lldb/Core/ConstString.h"
     22 #include "lldb/Host/Predicate.h"
     23 
     24 namespace lldb_private {
     25 
     26 //----------------------------------------------------------------------
     27 // lldb::EventData
     28 //----------------------------------------------------------------------
     29 class EventData
     30 {
     31     friend class Event;
     32 
     33 public:
     34     EventData ();
     35 
     36     virtual
     37     ~EventData();
     38 
     39     virtual const ConstString &
     40     GetFlavor () const = 0;
     41 
     42     virtual void
     43     Dump (Stream *s) const;
     44 
     45 private:
     46     virtual void
     47     DoOnRemoval (Event *event_ptr)
     48     {
     49     }
     50 
     51     DISALLOW_COPY_AND_ASSIGN (EventData);
     52 
     53 };
     54 
     55 //----------------------------------------------------------------------
     56 // lldb::EventDataBytes
     57 //----------------------------------------------------------------------
     58 class EventDataBytes : public EventData
     59 {
     60 public:
     61     //------------------------------------------------------------------
     62     // Constructors
     63     //------------------------------------------------------------------
     64     EventDataBytes ();
     65 
     66     EventDataBytes (const char *cstr);
     67 
     68     EventDataBytes (const void *src, size_t src_len);
     69 
     70     virtual
     71     ~EventDataBytes();
     72 
     73     //------------------------------------------------------------------
     74     // Member functions
     75     //------------------------------------------------------------------
     76     virtual const ConstString &
     77     GetFlavor () const;
     78 
     79     virtual void
     80     Dump (Stream *s) const;
     81 
     82     const void *
     83     GetBytes() const;
     84 
     85     size_t
     86     GetByteSize() const;
     87 
     88     void
     89     SetBytes (const void *src, size_t src_len);
     90 
     91     void
     92     SwapBytes (std::string &new_bytes);
     93 
     94     void
     95     SetBytesFromCString (const char *cstr);
     96 
     97     //------------------------------------------------------------------
     98     // Static functions
     99     //------------------------------------------------------------------
    100     static const EventDataBytes *
    101     GetEventDataFromEvent (const Event *event_ptr);
    102 
    103     static const void *
    104     GetBytesFromEvent (const Event *event_ptr);
    105 
    106     static size_t
    107     GetByteSizeFromEvent (const Event *event_ptr);
    108 
    109     static const ConstString &
    110     GetFlavorString ();
    111 
    112 private:
    113     std::string m_bytes;
    114 
    115     DISALLOW_COPY_AND_ASSIGN (EventDataBytes);
    116 
    117 };
    118 
    119 //----------------------------------------------------------------------
    120 // lldb::Event
    121 //----------------------------------------------------------------------
    122 class Event
    123 {
    124     friend class Broadcaster;
    125     friend class Listener;
    126     friend class EventData;
    127 
    128 public:
    129 
    130     Event (Broadcaster *broadcaster, uint32_t event_type, EventData *data = NULL);
    131 
    132     Event (uint32_t event_type, EventData *data = NULL);
    133 
    134     ~Event ();
    135 
    136     void
    137     Dump (Stream *s) const;
    138 
    139     EventData *
    140     GetData ()
    141     {
    142         return m_data_ap.get();
    143     }
    144 
    145     const EventData *
    146     GetData () const
    147     {
    148         return m_data_ap.get();
    149     }
    150 
    151     void
    152     SetData (EventData *new_data)
    153     {
    154         m_data_ap.reset (new_data);
    155     }
    156 
    157     uint32_t
    158     GetType () const
    159     {
    160         return m_type;
    161     }
    162 
    163     void
    164     SetType (uint32_t new_type)
    165     {
    166         m_type = new_type;
    167     }
    168 
    169     Broadcaster *
    170     GetBroadcaster () const
    171     {
    172         return m_broadcaster;
    173     }
    174 
    175     bool
    176     BroadcasterIs (Broadcaster *broadcaster)
    177     {
    178         return broadcaster == m_broadcaster;
    179     }
    180 
    181     void
    182     Clear()
    183     {
    184         m_data_ap.reset();
    185     }
    186 
    187 
    188 private:
    189     // This is only called by Listener when it pops an event off the queue for
    190     // the listener.  It calls the Event Data's DoOnRemoval() method, which is
    191     // virtual and can be overridden by the specific data classes.
    192 
    193     void
    194     DoOnRemoval ();
    195 
    196     // Called by Broadcaster::BroadcastEvent prior to letting all the listeners
    197     // know about it update the contained broadcaster so that events can be
    198     // popped off one queue and re-broadcast to others.
    199     void
    200     SetBroadcaster (Broadcaster *broadcaster)
    201     {
    202         m_broadcaster = broadcaster;
    203     }
    204 
    205 
    206     Broadcaster *   m_broadcaster;  // The broadcaster that sent this event
    207     uint32_t        m_type;         // The bit describing this event
    208     std::unique_ptr<EventData> m_data_ap;         // User specific data for this event
    209 
    210 
    211     DISALLOW_COPY_AND_ASSIGN (Event);
    212     Event();    // Disallow default constructor
    213 };
    214 
    215 } // namespace lldb_private
    216 
    217 #endif  // liblldb_Event_h_
    218