|
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.
|