From: <br...@us...> - 2010-08-20 03:58:33
|
Revision: 4183 http://openvrml.svn.sourceforge.net/openvrml/?rev=4183&view=rev Author: braden Date: 2010-08-20 03:58:26 +0000 (Fri, 20 Aug 2010) Log Message: ----------- Added an accessor to get the set of listeners listening to an event emitter. Modified Paths: -------------- trunk/ChangeLog trunk/src/libopenvrml/openvrml/event.cpp trunk/src/libopenvrml/openvrml/event.h Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2010-08-15 05:29:25 UTC (rev 4182) +++ trunk/ChangeLog 2010-08-20 03:58:26 UTC (rev 4183) @@ -1,3 +1,16 @@ +2010-08-19 Braden McDaniel <br...@en...> + + Added an accessor to get the set of listeners listening to an + event emitter. + + * src/libopenvrml/openvrml/event.cpp: Added doc-comments for + listener accessors. + * src/libopenvrml/openvrml/event.h + (openvrml::event_emitter::listeners<FieldValue>() const): Added + member function template to get (a copy of) the set of listeners. + (openvrml::field_value_emitter<FieldValue>::listeners() const): + Added member function template to get the set of listeners. + 2010-08-15 Braden McDaniel <br...@en...> * configure.ac: Removed reference to ide-projects/Makefile. Modified: trunk/src/libopenvrml/openvrml/event.cpp =================================================================== --- trunk/src/libopenvrml/openvrml/event.cpp 2010-08-15 05:29:25 UTC (rev 4182) +++ trunk/src/libopenvrml/openvrml/event.cpp 2010-08-20 03:58:26 UTC (rev 4183) @@ -545,6 +545,16 @@ */ /** + * @fn const std::set<field_value_listener<FieldValue> *> event_emitter::listeners() const + * + * @brief The event listeners currently listening to the emitter. + * + * @tparam FieldValue a @link FieldValueConcept Field Value@endlink. + * + * @return the event listeners currently listening to the emitter. + */ + +/** * @fn void openvrml::event_emitter::emit_event<FieldValue>(double timestamp) * * @brief Emit an event. @@ -636,6 +646,16 @@ */ /** + * @fn const std::set<field_value_listener<FieldValue> *> field_value_emitter<FieldValue>::listeners() const + * + * @brief The event listeners currently listening to the emitter. + * + * @tparam FieldValue a @link FieldValueConcept Field Value@endlink. + * + * @return the event listeners currently listening to the emitter. + */ + +/** * @typedef openvrml::sfbool_emitter * * @brief @c sfbool event emitter. Modified: trunk/src/libopenvrml/openvrml/event.h =================================================================== --- trunk/src/libopenvrml/openvrml/event.h 2010-08-15 05:29:25 UTC (rev 4182) +++ trunk/src/libopenvrml/openvrml/event.h 2010-08-20 03:58:26 UTC (rev 4183) @@ -188,6 +188,10 @@ explicit event_emitter(const field_value & value) OPENVRML_NOTHROW; template <typename FieldValue> + const std::set<field_value_listener<FieldValue> *> listeners() const + OPENVRML_THROW1(std::bad_alloc); + + template <typename FieldValue> void emit_event(double timestamp) OPENVRML_THROW1(std::bad_alloc); private: @@ -217,6 +221,27 @@ } template <typename FieldValue> + const std::set<field_value_listener<FieldValue> *> + event_emitter::listeners() const + OPENVRML_THROW1(std::bad_alloc) + { + struct cast { + field_value_listener<FieldValue> * + operator()(event_listener * listener) const OPENVRML_NOTHROW + { + return boost::polymorphic_downcast< + field_value_listener<FieldValue> *>(listener); + } + }; + boost::shared_lock<boost::shared_mutex> lock(this->listeners_mutex_); + std::set<field_value_listener<FieldValue> *> result; + std::transform(this->listeners_.begin(), this->listeners_.end(), + inserter(result, result.begin()), + cast()); + return result; + } + + template <typename FieldValue> void event_emitter::emit_event(const double timestamp) OPENVRML_THROW1(std::bad_alloc) { @@ -253,6 +278,9 @@ bool remove(field_value_listener<FieldValue> & listener) OPENVRML_NOTHROW; + const std::set<field_value_listener<FieldValue> *> listeners() const + OPENVRML_THROW1(std::bad_alloc); + private: virtual void emit_event(double timestamp) OPENVRML_THROW1(std::bad_alloc); @@ -295,6 +323,14 @@ return this->event_emitter::template remove<FieldValue>(listener); } + template <typename FieldValue> + const std::set<field_value_listener<FieldValue> *> + field_value_emitter<FieldValue>::listeners() const + OPENVRML_THROW1(std::bad_alloc) + { + return this->event_emitter::template listeners<FieldValue>(); + } + typedef field_value_emitter<sfbool> sfbool_emitter; typedef field_value_emitter<sfcolor> sfcolor_emitter; typedef field_value_emitter<sfcolorrgba> sfcolorrgba_emitter; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |