Jamma Tino Schwarze
cEvent.hh

  • Willkommen
  • Wer ich bin
  • Was ich tue
  • Was ich tat (Archiv)
    • Abitur
    • Studium
      • Arbeiten
      • Computergrafik
    • Aktivitäten
    • Software
    • Wohnen
    • Sonstiges
  • Links
  • Kontakt / Impressum
/* (c) 1999-2000 Tino Schwarze, see COPYING for details */ /**@pkg events.cEvent */ /** * an abstract event * * #include "cEvent.hh" * * This is an abstract base class for an event. * *@pkgdoc events.cEvent */ // now follows documentation for the event system /** * Here are the packages which make up my event handling system. * * It is based on the Register/Dispatch Idiom as described in the * C++ Coding Standard. * * Although it is pretty simple, it is very powerful. The center of the * event system is an event dispatcher. It does not need to be a centralized * solution but can be distributed as well (several event dispatchers * connected via appropiate routing protocols). The best of it is, that * one can later derive from cEventDispatcher to implement more * sophisticated methods of event routing. The current implementation only * passes events withing the same program. * * To make the system work, event consumers subscribe for specified events * at the event dispatcher. Event producers send their events to the * event dispatcher which in turn figures out which consumer is interested * in that particular event. It then calls every subscriber at first come - * first serve basis and passes the event to the subscriber. The * subscriber may or may not accept the event. If it was not accepted, * it is passed to the next subscriber, else it is considered to have * been delivered successfully. * * That's all. * *@pkgdoc events */ #ifndef cEvent_hh #define cEvent_hh // aquire STL strings #include // forward declaration class cStorableEvent; /** * an event class * */ class cEvent { friend ostream& operator << (ostream &os, const cEvent &ev); //LIFETIME public: /** * default constructor * @param type const string reference to type/name of event * The type is used to identify an event. */ cEvent (const string &type = "cEvent"); /** * default destructor */ virtual ~cEvent (); /** * clone this object (allocate a new one) */ virtual cEvent *Clone () const { return new cEvent(mName); } /** * operator == for cEvents - it returns true if they're of the * same type(name) */ const bool operator == (const cEvent &e) const { return (mName == e.mName); } /** * operator < for cEvents - it compares the name strings */ const bool operator < (const cEvent &e) const { return (mName < e.mName); } virtual const string &GetName () const { return mName; } protected: string mName; }; /** * a class which provides a way to store cEvent objects and derived * objects */ class cStorableEvent { /** * mainly for debugging purposes: a way to output an event */ friend ostream &operator << (ostream &, const cStorableEvent &); //LIFETIME public: /** * default constructor - gets the event to store * * (Note: It does not store the event provided but a clone of it, * therefore cEvent::Clone() is called.) * @param e const reference to cEvent object to store */ cStorableEvent (const cEvent &e) { mEvent = e.Clone (); }; /** * the copy constructor * * This is important as we have a dynamically allocated member. * * @param const reference to cStorableEvent to copy */ cStorableEvent (const cStorableEvent &cse) { mEvent = cse.mEvent->Clone (); } /** * destructor */ ~cStorableEvent () { delete mEvent; }; /** * operator for casting to cEvent * @return const reference to cEvent */ operator const cEvent &() { return *mEvent; } /** * operator == to compare cStorableEvents * * This is just delegated to the stored cEvents. * * @param se const reference to cStorableEvent to compare with * @return true if the stored event's types match */ const bool operator == (const cStorableEvent &se) const { return ((*mEvent) == (*se.mEvent)); }; /** * operator < to compare cStorableEvents * * This is just delegated to the stored cEvents. * * This operator is a bit odd but needed by STL to store * cStorableEvents in Sorted Containers. * * @param se const reference to cStorableEvent to compare with * @return true if this event's type is lower than se's type in * terms of string comparison */ const bool operator < (const cStorableEvent &se) const { return ((*mEvent) < (*se.mEvent)); }; /** * operator == for comparing cStorableEvents with cEvents */ const bool operator == (const cEvent &e) const { return ((*mEvent) == e); }; /** * operator < for comparing cStorableEvents with cEvents */ const bool operator < (const cEvent &e) const { return ((*mEvent) < e); }; /** * return name/type of event * @return const reference to string with name/type of event */ const string &GetName () const { return mEvent->GetName (); } private: /** * The cEvent object which is stored by cStorableEvent */ cEvent *mEvent; }; #endif // ifndef cEvent_hh
Copyright © 2025 Jamma Tino Schwarze