Boost logo

Boost-Commit :

From: stipe_at_[hidden]
Date: 2008-03-09 17:49:13


Author: srajko
Date: 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
New Revision: 43548
URL: http://svn.boost.org/trac/boost/changeset/43548

Log:
preparing 0.9.0
Added:
   sandbox/SOC/2007/signals/boost/dataflow/templates/unary_operation.hpp (contents, props changed)
   sandbox/SOC/2007/signals/boost/dataflow/utility/bind_mem_fn_overload.hpp (contents, props changed)
   sandbox/SOC/2007/signals/libs/dataflow/doc/blueprint/examples.qbk (contents, props changed)
   sandbox/SOC/2007/signals/libs/dataflow/doc/blueprint/examples/blueprint_example.qbk
      - copied unchanged from r43438, /sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/blueprint_example.qbk
   sandbox/SOC/2007/signals/libs/dataflow/doc/blueprint/examples/gui_example.qbk
      - copied unchanged from r43438, /sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gui_example.qbk
   sandbox/SOC/2007/signals/libs/dataflow/doc/layers.svg (contents, props changed)
   sandbox/SOC/2007/signals/libs/dataflow/doc/signals/examples.qbk (contents, props changed)
   sandbox/SOC/2007/signals/libs/dataflow/doc/signals/examples/distributed_example.qbk
      - copied unchanged from r43438, /sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/distributed_example.qbk
   sandbox/SOC/2007/signals/libs/dataflow/doc/signals/examples/gil_example.qbk
      - copied unchanged from r43438, /sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gil_example.qbk
   sandbox/SOC/2007/signals/libs/dataflow/doc/signals/tutorial.qbk (contents, props changed)
   sandbox/SOC/2007/signals/libs/dataflow/doc/support/examples.qbk (contents, props changed)
   sandbox/SOC/2007/signals/libs/dataflow/doc/support/examples/vtk_example.qbk
      - copied unchanged from r43440, /sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/vtk_example.qbk
   sandbox/SOC/2007/signals/libs/dataflow/doc/support/introduction.qbk (contents, props changed)
   sandbox/SOC/2007/signals/libs/dataflow/example/signals/quick_start_examples.cpp (contents, props changed)
   sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_filter_base.cpp (contents, props changed)
   sandbox/SOC/2007/signals/libs/dataflow/test/utility/test_bind_mem_fn_overload.cpp (contents, props changed)
Removed:
   sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/blueprint_example.qbk
   sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/distributed_example.qbk
   sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gil_example.qbk
   sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gui_example.qbk
   sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/vtk_example.qbk
Text files modified:
   sandbox/SOC/2007/signals/boost/dataflow/signals/component/filter.hpp | 33 +++---
   sandbox/SOC/2007/signals/boost/dataflow/signals/component/filter_base.hpp | 4
   sandbox/SOC/2007/signals/boost/dataflow/signals/component/multiplexer.hpp | 6
   sandbox/SOC/2007/signals/boost/dataflow/signals/component/socket_sender.hpp | 2
   sandbox/SOC/2007/signals/boost/dataflow/signals/component/storage.hpp | 8
   sandbox/SOC/2007/signals/boost/dataflow/signals/support.hpp | 42 ++++++-
   sandbox/SOC/2007/signals/boost/dataflow/support/unary_operation.hpp | 15 ++
   sandbox/SOC/2007/signals/libs/dataflow/build/xcodeide/dataflow.xcodeproj/project.pbxproj | 62 +++++++++--
   sandbox/SOC/2007/signals/libs/dataflow/doc/blueprint/blueprint.qbk | 2
   sandbox/SOC/2007/signals/libs/dataflow/doc/dataflow.qbk | 19 +++
   sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/introduction.qbk | 50 +++++----
   sandbox/SOC/2007/signals/libs/dataflow/doc/signals/components.qbk | 114 ++++++++-------------
   sandbox/SOC/2007/signals/libs/dataflow/doc/signals/concepts.qbk | 153 +++++++++++++++++++----------
   sandbox/SOC/2007/signals/libs/dataflow/doc/signals/connections.qbk | 57 +++++------
   sandbox/SOC/2007/signals/libs/dataflow/doc/signals/introduction.qbk | 206 +++++++++++++++------------------------
   sandbox/SOC/2007/signals/libs/dataflow/doc/utility/utility.qbk | 14 ++
   sandbox/SOC/2007/signals/libs/dataflow/example/Jamfile.v2 | 8
   sandbox/SOC/2007/signals/libs/dataflow/example/signals/Jamfile.v2 | 1
   sandbox/SOC/2007/signals/libs/dataflow/example/signals/gil_example.cpp | 4
   sandbox/SOC/2007/signals/libs/dataflow/example/signals/intro_example.cpp | 10 -
   sandbox/SOC/2007/signals/libs/dataflow/test/Jamfile.v2 | 2
   sandbox/SOC/2007/signals/libs/dataflow/test/signals/Jamfile.v2 | 34 +++---
   sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_disconnect.cpp | 12 +
   sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_filter.cpp | 19 ++-
   sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_args.cpp | 3
   sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_type.cpp | 55 ++++++----
   sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_same_type.cpp | 27 +----
   sandbox/SOC/2007/signals/libs/dataflow/test/utility/Jamfile.v2 | 1
   28 files changed, 519 insertions(+), 444 deletions(-)

Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/filter.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/filter.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/filter.hpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -73,13 +73,20 @@
     : public mpl::true_
 {};
     
-template<typename OutSignature,
- typename Combiner = boost::last_value<typename boost::function_traits<OutSignature>::result_type>,
- typename Group = int,
- typename GroupCompare = std::less<Group> >
+template<typename OutSignature>
 struct default_signal_args
 {
- typedef signal_args<Combiner, Group, GroupCompare> type;
+ typedef boost::last_value<typename boost::function_traits<OutSignature>::result_type> combiner_type;
+ typedef int group_type;
+ typedef std::less<group_type> group_compare_type;
+
+ typedef signal_args<combiner_type, group_type, group_compare_type> type;
+};
+
+template<>
+struct default_signal_args<void>
+{
+ typedef void type;
 };
 
 template<typename OutSignature, typename SignalArgs>
@@ -141,21 +148,15 @@
         mutable signal_type out;
 }; // class filter
 
-/** \brief Unfused version of the filter class
+/** \brief Filter class with no output signal
 */
-template<typename Derived, typename InSignatures, typename OutSignal, typename SignalArgs>
-class filter<Derived, void, InSignatures, OutSignal, SignalArgs>
+template<typename Derived, typename InSignatures=mpl::vector<> >
+class consumer
     : public filter_base<
- Derived,
- typename signal_from_args<void, SignalArgs>::type,
+ Derived,
+ void,
         typename dataflow::utility::forced_sequence<InSignatures>::type >
 {
- BOOST_MPL_ASSERT(( is_signal_args<SignalArgs> ));
-
-public:
- filter(const filter &) {}
- filter(){}
- const filter &operator = (const filter &) {return *this;}
 }; // class filter
 
 /** \brief Combined version of the filter class

Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/filter_base.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/filter_base.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/filter_base.hpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -83,9 +83,7 @@
     template<typename Component>
     static typename filter_component_traits::fusion_ports get_ports(Component &component)
     {
- return typename filter_component_traits::fusion_ports(
- component.default_signal(),
- component);
+ return typename filter_component_traits::fusion_ports(fusion::vector1<Component &>(component));
     };
 };
 

Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/multiplexer.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/multiplexer.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/multiplexer.hpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -49,7 +49,7 @@
     boost::function<void(int)>
     select_slot()
     {
- return make_slot_selector<void(int)> (&multiplexer::select, *this);
+ return bind_mem_fn_overload<void(int)> (&multiplexer::select, *this);
     }
     
     typedef boost::fusion::map<
@@ -65,8 +65,8 @@
     slot()
     {
         return slot_map
- (make_slot_selector<Signature> (&multiplexer::BOOST_TEMPLATE_OPERATOR()<N>, *this),
- make_slot_selector<typename multiplexer::fused_signature_type>
+ (bind_mem_fn_overload<Signature> (&multiplexer::BOOST_TEMPLATE_OPERATOR()<N>, *this),
+ bind_mem_fn_overload<typename multiplexer::fused_signature_type>
             (&multiplexer::BOOST_TEMPLATE_OPERATOR()<N>, *this));
 
     }

Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/socket_sender.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/socket_sender.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/socket_sender.hpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -58,7 +58,7 @@
 template<typename Signature>
 class socket_sender : public boost::fusion::unfused_inherited<
     detail::socket_sender_impl<Signature>, typename boost::function_types::parameter_types<Signature>::type >,
- public boost::dataflow::port<boost::dataflow::signals::call_consumer<> >
+ public consumer<socket_sender<Signature> >
 {
     typedef boost::fusion::unfused_inherited<
         detail::socket_sender_impl<Signature>,

Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/storage.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/storage.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/storage.hpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -203,8 +203,8 @@
     send_slot()
     {
         return send_map
- (make_slot_selector<void ()> (&storage::send, *this),
- make_slot_selector<void (const boost::fusion::vector<> &)> (&storage::send, *this));
+ (bind_mem_fn_overload<void ()> (&storage::send, *this),
+ bind_mem_fn_overload<void (const boost::fusion::vector<> &)> (&storage::send, *this));
     }
     /** \return The slot selector for the related at function.
     */
@@ -215,7 +215,7 @@
 #endif
     at_slot()
     {
- return make_slot_selector<
+ return bind_mem_fn_overload<
             typename boost::fusion::result_of::at_c<storable_vector, N>::type ()>
             (&storage::template at<N>, *this);
     }
@@ -228,7 +228,7 @@
 #endif
     value_at_slot()
         {
- return make_slot_selector<
+ return bind_mem_fn_overload<
             typename boost::mpl::at_c<parameter_types, N>::type ()>
             (&storage::template value_at<N>, *this);
     }

Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/support.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/support.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/support.hpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -9,7 +9,7 @@
 #include <boost/dataflow/support.hpp>
 #include <boost/dataflow/support/port/port_adapter.hpp>
 #include <boost/dataflow/utility/bind_mem_fn.hpp>
-#include <boost/dataflow/utility/slot_type.hpp>
+#include <boost/dataflow/utility/bind_mem_fn_overload.hpp>
 
 #include <boost/mpl/vector.hpp>
 #include <boost/mpl/joint_view.hpp>
@@ -136,6 +136,30 @@
         }
     };
     
+ template<typename T>
+ struct binary_operation_impl<signals::producer<T>, signals::consumer<T>, operations::disconnect>
+ {
+ typedef void result_type;
+
+ template<typename Producer, typename Consumer>
+ void operator()(Producer &producer, Consumer &consumer)
+ {
+ producer.disconnect(consumer);
+ }
+ };
+
+ template<typename T>
+ struct unary_operation_impl<signals::producer<T>, operations::disconnect_all>
+ {
+ typedef void result_type;
+
+ template<typename Producer>
+ void operator()(Producer &producer)
+ {
+ producer.disconnect_all_slots();
+ }
+ };
+
     template<typename SignatureSequence, typename Signature>
     struct get_keyed_port_impl<signals::call_consumer<SignatureSequence>, signals::extract_producer<Signature> >
     {
@@ -175,6 +199,12 @@
 #define DATAFLOW_TEMPLATE_BINARY_OPERATION connect
 #include <boost/dataflow/templates/binary_operation.hpp>
 #undef DATAFLOW_TEMPLATE_BINARY_OPERATION
+#define DATAFLOW_TEMPLATE_BINARY_OPERATION disconnect
+#include <boost/dataflow/templates/binary_operation.hpp>
+#undef DATAFLOW_TEMPLATE_BINARY_OPERATION
+#define DATAFLOW_TEMPLATE_UNARY_OPERATION disconnect_all
+#include <boost/dataflow/templates/unary_operation.hpp>
+#undef DATAFLOW_TEMPLATE_UNARY_OPERATION
 #undef DATAFLOW_TEMPLATE_MECHANISM
 
 #define DATAFLOW_TEMPLATE_MECHANISM boost::dataflow::signals::extract_mechanism
@@ -193,14 +223,8 @@
     boost::dataflow::component_operation<boost::dataflow::operations::invoke, dataflow::signals::tag>(component);
 }
 
-template<typename Signature, typename T>
-boost::function<Signature> make_slot_selector(typename dataflow::utility::slot_type<Signature, T>::type func, T &object)
-{
- typedef typename boost::dataflow::utility::slot_type<Signature, T>::type mem_fn_type;
-
- return boost::dataflow::utility::bind_mem_fn<mem_fn_type, T>
- (static_cast<mem_fn_type>(func), object);
-}
+using boost::dataflow::utility::bind_mem_fn;
+using boost::dataflow::utility::bind_mem_fn_overload;
 
 } } // namespace boost::phoenix
 

Modified: sandbox/SOC/2007/signals/boost/dataflow/support/unary_operation.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support/unary_operation.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/unary_operation.hpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -7,6 +7,7 @@
 #define BOOST_DATAFLOW_SUPPORT_UNARY_OPERATION_HPP
 
 #include <boost/dataflow/support/port.hpp>
+#include <boost/dataflow/utility/forwardable.hpp>
 
 #include <boost/static_assert.hpp>
 
@@ -25,8 +26,20 @@
 
 namespace boost { namespace dataflow {
 
+template<typename Operation, typename Mechanism, typename Tag, typename Producer>
+inline void
+default_unary_operation(Producer &producer)
+{
+ extension::unary_operation_impl<
+ typename default_traits_of<Producer, args::left, Mechanism, Tag>::type,
+ Operation>
+ ()(static_cast<typename utility::forwardable<
+ typename result_of::get_default_port<Producer, args::left, Mechanism, Tag>::type>::type >
+ (get_default_port<args::left, Mechanism, Tag>(producer)));
+}
+
 template<typename Port>
-inline void disconnect_all(Port &port)
+inline typename enable_if<is_port<Port> >::type disconnect_all(Port &port)
 {
     unary_operation<operations::disconnect_all, default_tag>(port);
 }

Added: sandbox/SOC/2007/signals/boost/dataflow/templates/unary_operation.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/boost/dataflow/templates/unary_operation.hpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -0,0 +1,27 @@
+// Copyright Stjepan Rajko 2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifndef DATAFLOW_TEMPLATE_TAG
+#error DATAFLOW_TEMPLATE_TAG undefined.
+#endif
+#ifndef DATAFLOW_TEMPLATE_MECHANISM
+#error DATAFLOW_TEMPLATE_MECHANISM undefined.
+#endif
+#ifndef DATAFLOW_TEMPLATE_UNARY_OPERATION
+#error DATAFLOW_TEMPLATE_UNARY_OPERATION undefined.
+#endif
+
+template<typename Producer>
+inline void DATAFLOW_TEMPLATE_UNARY_OPERATION(Producer &producer)
+{
+ boost::dataflow::default_unary_operation< boost::dataflow::operations::DATAFLOW_TEMPLATE_UNARY_OPERATION, DATAFLOW_TEMPLATE_MECHANISM, DATAFLOW_TEMPLATE_TAG >(producer);
+}
+
+template<typename Producer, typename Consumer>
+inline void DATAFLOW_TEMPLATE_UNARY_OPERATION(const Producer &producer)
+{
+ boost::dataflow::default_unary_operation< boost::dataflow::operations::DATAFLOW_TEMPLATE_UNARY_OPERATION, DATAFLOW_TEMPLATE_MECHANISM, DATAFLOW_TEMPLATE_TAG >(producer);
+}

Added: sandbox/SOC/2007/signals/boost/dataflow/utility/bind_mem_fn_overload.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/boost/dataflow/utility/bind_mem_fn_overload.hpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -0,0 +1,44 @@
+// Copyright Stjepan Rajko 2007,2008. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DATAFLOW_UTILITY_BIND_MEM_FN_OVERLOAD_HPP
+#define BOOST_DATAFLOW_UTILITY_BIND_MEM_FN_OVERLOAD_HPP
+
+#include <boost/dataflow/utility/bind_mem_fn.hpp>
+#include <boost/dataflow/utility/slot_type.hpp>
+
+namespace boost { namespace dataflow {
+
+namespace utility {
+
+/// Binds a class member function of a specified Signature to a class object.
+/** \returns boost::function type with the bound member function.
+*/
+template<typename Signature, typename T>
+boost::function<Signature> bind_mem_fn_overload(typename dataflow::utility::slot_type<Signature, T>::type func, T &object)
+{
+ typedef typename boost::dataflow::utility::slot_type<Signature, T>::type mem_fn_type;
+
+ return boost::dataflow::utility::bind_mem_fn<mem_fn_type, T>
+ (static_cast<mem_fn_type>(func), object);
+}
+
+/// Binds a class const member function of a specified Signature to a non-const class object.
+/** \returns boost::function type with the bound member function.
+*/
+template<typename Signature, typename T>
+boost::function<Signature> bind_mem_fn_const_overload(typename dataflow::utility::slot_type<Signature, const T>::type func, T &object)
+{
+ typedef typename boost::dataflow::utility::slot_type<Signature, const T>::type mem_fn_type;
+
+ return boost::dataflow::utility::bind_mem_fn<mem_fn_type, T>
+ (static_cast<mem_fn_type>(func), object);
+}
+
+} // namespace utility
+
+} } // namespace boost::dataflow
+
+#endif // BOOST_DATAFLOW_UTILITY_BIND_MEM_FN_OVERLOAD_HPP

Modified: sandbox/SOC/2007/signals/libs/dataflow/build/xcodeide/dataflow.xcodeproj/project.pbxproj
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/build/xcodeide/dataflow.xcodeproj/project.pbxproj (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/build/xcodeide/dataflow.xcodeproj/project.pbxproj 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -111,12 +111,23 @@
                 08668C4E0C19A16300ACB19A /* simple_distributed_example.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = simple_distributed_example.cpp; sourceTree = "<group>"; };
                 08668C4F0C19A16300ACB19A /* Jamfile.v2 */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Jamfile.v2; sourceTree = "<group>"; };
                 088FC6BF0D5A6EAD004F0E76 /* Jamfile.v2 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Jamfile.v2; sourceTree = "<group>"; };
+ 08920DCE0D84514B00E148EF /* test_bind_mem_fn_overload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_bind_mem_fn_overload.cpp; sourceTree = "<group>"; };
+ 089321AD0D7BB18300F16965 /* vtk_example.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = vtk_example.qbk; sourceTree = "<group>"; };
+ 089321AF0D7BB19200F16965 /* distributed_example.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = distributed_example.qbk; sourceTree = "<group>"; };
+ 089321B00D7BB19200F16965 /* gil_example.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gil_example.qbk; sourceTree = "<group>"; };
+ 089321B20D7BB19D00F16965 /* blueprint_example.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = blueprint_example.qbk; sourceTree = "<group>"; };
+ 089321B30D7BB19D00F16965 /* gui_example.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gui_example.qbk; sourceTree = "<group>"; };
+ 089321B50D7BB26100F16965 /* examples.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = examples.qbk; sourceTree = "<group>"; };
+ 089321B60D7BB28000F16965 /* examples.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = examples.qbk; sourceTree = "<group>"; };
+ 089321BB0D7BB38D00F16965 /* examples.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = examples.qbk; sourceTree = "<group>"; };
                 089AE57F0D79C5CF00AB9DA8 /* bind_mem_fn.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = bind_mem_fn.hpp; sourceTree = "<group>"; };
                 089AE5830D79C7CB00AB9DA8 /* bind_object.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = bind_object.hpp; sourceTree = "<group>"; };
                 089AE58B0D79C96200AB9DA8 /* slot_type.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = slot_type.hpp; sourceTree = "<group>"; };
                 089AE5BC0D79CE5E00AB9DA8 /* test_bind_mem_fn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_bind_mem_fn.cpp; sourceTree = "<group>"; };
                 089AE6390D79D95C00AB9DA8 /* member_function_signature.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = member_function_signature.hpp; sourceTree = "<group>"; };
                 089B93720D5AA99700F6EEAA /* test_filter_base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_filter_base.cpp; sourceTree = "<group>"; };
+ 089CDA940D832AD200731C70 /* tutorial.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tutorial.qbk; sourceTree = "<group>"; };
+ 089CDAA90D8333CC00731C70 /* unary_operation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = unary_operation.hpp; sourceTree = "<group>"; };
                 08A0B20C0D21C4A90054AD32 /* cppgui_example.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = cppgui_example.cpp; sourceTree = "<group>"; };
                 08A0B20D0D21C4A90054AD32 /* Jamfile.v2 */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Jamfile.v2; sourceTree = "<group>"; };
                 08A0B2AC0D21D88F0054AD32 /* blueprint_bank.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = blueprint_bank.cpp; sourceTree = "<group>"; };
@@ -126,12 +137,14 @@
                 08A0B43C0D21EDDE0054AD32 /* blueprint_component.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = blueprint_component.cpp; sourceTree = "<group>"; };
                 08A0B43D0D21EDDE0054AD32 /* blueprint_component.hpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = blueprint_component.hpp; sourceTree = "<group>"; };
                 08A0B5710D220CCF0054AD32 /* introduction.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = introduction.qbk; sourceTree = "<group>"; };
+ 08A0E54C0D7A7674009B11DD /* quick_start_examples.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = quick_start_examples.cpp; sourceTree = "<group>"; };
                 08B9D4190CC3D0790050F10B /* test_binary_op.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = test_binary_op.cpp; sourceTree = "<group>"; };
                 08B9D41E0CC3D0A80050F10B /* my_producer_consumer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = my_producer_consumer.hpp; sourceTree = "<group>"; };
                 08BD9AFB0CEB9D330069AFE2 /* get_port.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = get_port.hpp; sourceTree = "<group>"; };
                 08BD9B090CEB9E3D0069AFE2 /* port.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = port.hpp; sourceTree = "<group>"; };
                 08C3EEA20C625AE30074AB9E /* simple_example.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simple_example.cpp; sourceTree = "<group>"; };
                 08C675970C13A03E00D85379 /* Jamfile.v2 */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Jamfile.v2; sourceTree = "<group>"; };
+ 08C9D7DA0D83C5EB00354FF8 /* bind_mem_fn_overload.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = bind_mem_fn_overload.hpp; sourceTree = "<group>"; };
                 08D2C7330D1DDE5C008388D7 /* Jamfile.v2 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Jamfile.v2; sourceTree = "<group>"; };
                 08D2C7390D1DDEB8008388D7 /* fltk_gui_example.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fltk_gui_example.cpp; sourceTree = "<group>"; };
                 08DC14FC0C951C4800B96B2E /* Cone.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Cone.cxx; sourceTree = "<group>"; };
@@ -200,9 +213,6 @@
                 08F2464E0CA86D85001C3D41 /* Cone5.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Cone5.cxx; sourceTree = "<group>"; };
                 08F2464F0CA86D85001C3D41 /* Cone6.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Cone6.cxx; sourceTree = "<group>"; };
                 08F24D6E0CC4419F00FC4A0C /* test_keyed_port.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_keyed_port.cpp; sourceTree = "<group>"; };
- 08F264780CEA9DE800DA01C9 /* distributed_example.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = distributed_example.qbk; sourceTree = "<group>"; };
- 08F264790CEA9DE800DA01C9 /* gil_example.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = gil_example.qbk; sourceTree = "<group>"; };
- 08F2647A0CEA9DE800DA01C9 /* vtk_example.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = vtk_example.qbk; sourceTree = "<group>"; };
                 08F26C8B0CBF1CBA00EDC3F6 /* test_port.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_port.cpp; sourceTree = "<group>"; };
                 08F26D630CBF2D4100EDC3F6 /* test_proxy_port.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_proxy_port.cpp; sourceTree = "<group>"; };
                 08F2A7C20D0C597000AED0BC /* utility.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = utility.qbk; sourceTree = "<group>"; };
@@ -219,7 +229,6 @@
                 08F348510C492B4B0096097F /* group.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = group.hpp; sourceTree = "<group>"; };
                 08F348970CC021E0006D0A67 /* copy_cv.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = copy_cv.hpp; sourceTree = "<group>"; };
                 08F3592D0CED1EC400E2BBFB /* blueprint.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = blueprint.qbk; sourceTree = "<group>"; };
- 08F3593B0CED23C100E2BBFB /* blueprint_example.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = blueprint_example.qbk; sourceTree = "<group>"; };
                 08F36DFB0C41375B00E2F9A1 /* dataflow_table.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = dataflow_table.xml; sourceTree = "<group>"; };
                 08F37EDF0C57A4A700AC7FB8 /* static_function_call.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = static_function_call.hpp; sourceTree = "<group>"; };
                 08F3944C0CCEC35E00ED7978 /* binary_operation.hpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = binary_operation.hpp; sourceTree = "<group>"; };
@@ -246,7 +255,6 @@
                 08F59F820D01C122007CD201 /* support.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = support.qbk; sourceTree = "<group>"; };
                 08F5FF070D07082200FDBAEE /* Jamfile.v2 */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Jamfile.v2; sourceTree = "<group>"; };
                 08F5FF130D070A1400FDBAEE /* test_port.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_port.cpp; sourceTree = "<group>"; };
- 08F687D30D20415C006DB5BB /* gui_example.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gui_example.qbk; sourceTree = "<group>"; };
                 08F71D3E0CA3547C0010099E /* Jamfile.v2 */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Jamfile.v2; sourceTree = "<group>"; };
                 08F71D3F0CA3547C0010099E /* test_bind_object.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = test_bind_object.cpp; sourceTree = "<group>"; };
                 08F71D400CA3547C0010099E /* test_branching.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = test_branching.cpp; sourceTree = "<group>"; };
@@ -351,10 +359,37 @@
                                 088FC6BF0D5A6EAD004F0E76 /* Jamfile.v2 */,
                                 0842A3600D5A7A8700CF8479 /* test_forced_sequence.cpp */,
                                 089AE5BC0D79CE5E00AB9DA8 /* test_bind_mem_fn.cpp */,
+ 08920DCE0D84514B00E148EF /* test_bind_mem_fn_overload.cpp */,
                         );
                         path = utility;
                         sourceTree = "<group>";
                 };
+ 089321AC0D7BB18300F16965 /* examples */ = {
+ isa = PBXGroup;
+ children = (
+ 089321AD0D7BB18300F16965 /* vtk_example.qbk */,
+ );
+ path = examples;
+ sourceTree = "<group>";
+ };
+ 089321AE0D7BB19200F16965 /* examples */ = {
+ isa = PBXGroup;
+ children = (
+ 089321AF0D7BB19200F16965 /* distributed_example.qbk */,
+ 089321B00D7BB19200F16965 /* gil_example.qbk */,
+ );
+ path = examples;
+ sourceTree = "<group>";
+ };
+ 089321B10D7BB19D00F16965 /* examples */ = {
+ isa = PBXGroup;
+ children = (
+ 089321B20D7BB19D00F16965 /* blueprint_example.qbk */,
+ 089321B30D7BB19D00F16965 /* gui_example.qbk */,
+ );
+ path = examples;
+ sourceTree = "<group>";
+ };
                 08A0B20A0D21C4050054AD32 /* cppgui_gui */ = {
                         isa = PBXGroup;
                         children = (
@@ -540,6 +575,7 @@
                         children = (
                                 08F3944C0CCEC35E00ED7978 /* binary_operation.hpp */,
                                 0801B4370CE9488B00A7A8D1 /* operator.hpp */,
+ 089CDAA90D8333CC00731C70 /* unary_operation.hpp */,
                         );
                         path = templates;
                         sourceTree = "<group>";
@@ -586,11 +622,6 @@
                         isa = PBXGroup;
                         children = (
                                 08F40B2B0CEFF9BD00D20F30 /* introduction.qbk */,
- 08F264780CEA9DE800DA01C9 /* distributed_example.qbk */,
- 08F264790CEA9DE800DA01C9 /* gil_example.qbk */,
- 08F2647A0CEA9DE800DA01C9 /* vtk_example.qbk */,
- 08F3593B0CED23C100E2BBFB /* blueprint_example.qbk */,
- 08F687D30D20415C006DB5BB /* gui_example.qbk */,
                         );
                         path = introduction;
                         sourceTree = "<group>";
@@ -642,6 +673,7 @@
                                 0842A35C0D5A79A500CF8479 /* forced_sequence.hpp */,
                                 089AE57F0D79C5CF00AB9DA8 /* bind_mem_fn.hpp */,
                                 089AE6390D79D95C00AB9DA8 /* member_function_signature.hpp */,
+ 08C9D7DA0D83C5EB00354FF8 /* bind_mem_fn_overload.hpp */,
                         );
                         path = utility;
                         sourceTree = "<group>";
@@ -649,7 +681,9 @@
                 08F3592C0CED1E9F00E2BBFB /* blueprint */ = {
                         isa = PBXGroup;
                         children = (
+ 089321B10D7BB19D00F16965 /* examples */,
                                 08F3592D0CED1EC400E2BBFB /* blueprint.qbk */,
+ 089321B60D7BB28000F16965 /* examples.qbk */,
                         );
                         path = blueprint;
                         sourceTree = "<group>";
@@ -665,9 +699,11 @@
                 08F59F780D01C019007CD201 /* support */ = {
                         isa = PBXGroup;
                         children = (
+ 089321AC0D7BB18300F16965 /* examples */,
                                 08F59F820D01C122007CD201 /* support.qbk */,
                                 08A0B5710D220CCF0054AD32 /* introduction.qbk */,
                                 08F59F790D01C0D2007CD201 /* concepts */,
+ 089321BB0D7BB38D00F16965 /* examples.qbk */,
                         );
                         path = support;
                         sourceTree = "<group>";
@@ -727,12 +763,13 @@
                 08F98B3F0CD018E7009D642B /* signals */ = {
                         isa = PBXGroup;
                         children = (
+ 08F98B400CD0190A009D642B /* Jamfile.v2 */,
                                 08F448760CD5368000E128A8 /* simple_example_components.hpp */,
                                 08C3EEA20C625AE30074AB9E /* simple_example.cpp */,
                                 08668C4E0C19A16300ACB19A /* simple_distributed_example.cpp */,
- 08F98B400CD0190A009D642B /* Jamfile.v2 */,
                                 08F98B470CD01963009D642B /* intro_example.cpp */,
                                 084D2E6E0CE7DFE900E861FA /* gil_example.cpp */,
+ 08A0E54C0D7A7674009B11DD /* quick_start_examples.cpp */,
                         );
                         path = signals;
                         sourceTree = "<group>";
@@ -740,10 +777,13 @@
                 08FB7BEE0C6157AE00BD4EC2 /* signals */ = {
                         isa = PBXGroup;
                         children = (
+ 089321AE0D7BB19200F16965 /* examples */,
                                 08F082570C1DD53400687E1B /* components.qbk */,
                                 08F0825A0C1DD58500687E1B /* connections.qbk */,
                                 08FB7BEF0C6157D000BD4EC2 /* introduction.qbk */,
                                 083FD3B90C62A4CB00EF3F6B /* concepts.qbk */,
+ 089321B50D7BB26100F16965 /* examples.qbk */,
+ 089CDA940D832AD200731C70 /* tutorial.qbk */,
                         );
                         path = signals;
                         sourceTree = "<group>";

Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/blueprint/blueprint.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/blueprint/blueprint.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/blueprint/blueprint.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -26,6 +26,8 @@
 but the provided [link dataflow.introduction.examples.blueprint example]
 provides some insight into its usability.]
 
+[include examples.qbk]
+
 [xinclude ../dataflow_blueprint_doxygen.xml]
 
 [endsect]
\ No newline at end of file

Added: sandbox/SOC/2007/signals/libs/dataflow/doc/blueprint/examples.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/blueprint/examples.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -0,0 +1,6 @@
+[section Examples]
+
+[include examples/gui_example.qbk]
+[include examples/blueprint_example.qbk]
+
+[endsect]
\ No newline at end of file

Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/dataflow.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/dataflow.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/dataflow.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -2,7 +2,7 @@
     [quickbook 1.4]
     [version 0.9.0]
     [authors [Rajko, Stjepan]]
- [copyright 2007 Stjepan Rajko]
+ [copyright 2007 2008 Stjepan Rajko]
     [purpose Generic dataflow lirary providing support for data producers,
         consumers, and connections.]
     [license
@@ -43,15 +43,18 @@
 [template UnaryOperable[] [link dataflow.support.concepts.port_related.unaryoperable [^UnaryOperable]]]
 [template AllDisconnectable[] [link dataflow.support.concepts.port_related.unaryoperable [^AllDisconnectable]]]
 
-[template ComponentTraits[] [link dataflow.support.concepts.component_related.componenttraits [^ComponentTraits]]]
+[template ComponentTraits[] [link dataflow.support.concepts.component_related.component [^ComponentTraits]]]
 [template Component[] [link dataflow.support.concepts.component_related.component [^Component]]]
 
 [template ComponentOperable[] [link dataflow.support.concepts.component_related.componentoperable [^ComponentOperable]]]
 [template Invocable[] [link dataflow.support.concepts.component_related.componentoperable [^Invocable]]]
 
+[template SignalTraits[] [link dataflow.signals.concepts.signaltraits [^SignalTraits]]]
 [template SignalPortTraits[] [link dataflow.signals.concepts.signalporttraits [^SignalPortTraits]]]
 [template SignalProducer[] [link dataflow.signals.concepts.signalproducer [^SignalProducer]]]
 [template SignalConsumer[] [link dataflow.signals.concepts.signalconsumer [^SignalConsumer]]]
+[template SignalFilterComponent[] [link dataflow.signals.concepts.signalfiltercomponent [^SignalFilterComponent]]]
+[template SignalConsumerComponent[] [link dataflow.signals.concepts.signalconsumercomponent [^SignalConsumerComponent]]]
 
 [template PhoenixProducer[] [link dataflow.support.concepts.phoenix.phoenixproducer [^PhoenixProducer]]]
 [template PhoenixConsumer[] [link dataflow.support.concepts.phoenix.phoenixproducer [^PhoenixConsumer]]]
@@ -69,12 +72,18 @@
 [template consumer_map[] [link dataflow.components.consumer_map consumer_map]]
 
 [template signals_quickstart[] [link dataflow.signals.introduction.quick_start quick start]]
+[template signals_freefunctions[] [link dataflow.signals.connections free functions and operators]]
 [template connect[] [link dataflow.signals.connections.connect connect]]
+[template invoke[] [link dataflow.signals.connections.invoke invoke]]
+[template disconnect_all[] [link dataflow.signals.connections.disconnect_all disconnect_all]]
+[template signals_tutorial[] [link dataflow.signals.introduction.tutorial tutorial]]
 [template components[] [link dataflow.signals.components components]]
+[template component[] [link dataflow.signals.component component]]
 [template operators[] [link dataflow.signals.connections.operators operators]]
 
 [template slot_selector[] [link dataflow.signals.connections.classes.slot_selector slot_selector]]
 
+[template consumer[] [link dataflow.signals.components.generic.consumer consumer]]
 [template filter[] [link dataflow.signals.components.generic.filter filter]]
 [template applicator[] [link dataflow.signals.components.generic.applicator applicator]]
 [template conditional[] [link dataflow.signals.components.generic.conditional conditional]]
@@ -93,6 +102,10 @@
 [template chain[] [link dataflow.signals.components.topologies.chain chain]]
 
 [template bind_mem_fn[] [link dataflow.utility.bind_mem_fn bind_mem_fn]]
+[template bind_mem_fn_overload[] [link dataflow.utility.bind_mem_fn_overload bind_mem_fn_overload]]
+
+[template boost_signal[] [@http://www.boost.org/doc/html/boost/signal.html [^boost::signal]]]
+[template boost_function[] [@http://www.boost.org/doc/html/boost/function.html [^boost::function]]]
 
 [template fusion[] [@http://spirit.sourceforge.net/dl_more/fusion_v2/libs/fusion/doc/html/index.html Boost.Fusion]]
 [template BoostFusion[] [@http://spirit.sourceforge.net/dl_more/fusion_v2/libs/fusion/doc/html/index.html Boost.Fusion]]
@@ -158,6 +171,7 @@
 [import ../test/signals/test_function.cpp]
 [import ../test/signals/test_chain.cpp]
 [import ../test/signals/test_socket.cpp]
+[import ../test/signals/test_multiplexer.cpp]
 
 [import ../test/signals/test_junction.cpp]
 [import ../test/signals/test_mutex.cpp]
@@ -170,6 +184,7 @@
 [import ../example/signals/simple_distributed_example.cpp]
 [import ../example/signals/intro_example.cpp]
 [import ../example/signals/gil_example.cpp]
+[import ../example/signals/quick_start_examples.cpp]
 
 [import ../example/VTK/vtk_dataflow_support.hpp]
 [import ../example/VTK/Cone.cxx]

Deleted: sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/blueprint_example.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/blueprint_example.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
+++ (empty file)
@@ -1,90 +0,0 @@
-[section:blueprint Run-time reflection and connectivity modeling using Dataflow.Blueprint]
-
-The (recently started) [DataflowBlueprint] layer offers run-time reflection
-of components and modeling of
-a dataflow network through a BGL graph. Here is the output of a small example
-which briefly illustrates some of the capabilities:
-
-
-[pre
-Printing runtime info about all of the components:
-
- source has 4 ports.
- port 0 is a signals connection producer
- port 1 is a signals connection consumer
- port 2 is a signals extraction producer
- port 3 is a signals extraction consumer
-
- sink has 4 ports.
- port 0 is a signals connection producer
- port 1 is a signals connection consumer
- port 2 is a signals extraction producer
- port 3 is a signals extraction consumer
-
- source_float has 4 ports.
- port 0 is a signals connection producer
- port 1 is a signals connection consumer
- port 2 is a signals extraction producer
- port 3 is a signals extraction consumer
-
- sink_float has 4 ports.
- port 0 is a signals connection producer
- port 1 is a signals connection consumer
- port 2 is a signals extraction producer
- port 3 is a signals extraction consumer
-
-
-Printing some runtime port connectability info:
-
-source port 0 is connectable to sink port 1
-source port 1 is not connectable to sink port 0
-source port 0 is not connectable to sink port 0
-source port 0 is not connectable to sink_float port 1
-
-Making blueprint connections: source to sink, source_float to sink_float...
-
-Using BGL to analyze the network... BGL says there are 2 independent parts of the network!
-
-Making a copy of the blueprint.
-
-Testing the original network...
-
- Values at components:
- value at source:100
- value at sink:0
- value at source_float:100.1
- value at sink_float:0
-
- Connecting the underlying components in the network...
- Invoking the sources...
-
- Values at components:
- value at source:100
- value at sink:100
- value at source_float:100.1
- value at sink_float:100.1
-
-Testing the network copy...
-
- Values at components:
- value at source:100
- value at sink:0
- value at source_float:100.1
- value at sink_float:0
-
- Connecting the underlying components in the network...
- Invoking the sources...
-
- Values at components:
- value at source:100
- value at sink:100
- value at source_float:100.1
- value at sink_float:100.1
-]
-
-The source is:
-
-[blueprint_example]
-
-
-[endsect]
\ No newline at end of file

Deleted: sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/distributed_example.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/distributed_example.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
+++ (empty file)
@@ -1,43 +0,0 @@
-[section:distributed Implementing distributed dataflow applications using
- Dataflow.Signals and Boost.Asio]
-
-This example shows how you can take advantage of dataflow programming
-to create distributed applications. It works as long as the data
-passed in the signal is serializable using [BoostSerialization].
-
-[DataflowSignals] provides two components
-which can be used to create a producer-consumer connection between two
-computers: [socket_sender] and [socket_receiver]. As long as we have
-a network socket set up between two computers, we can do the following to
-set up a connection between a [SignalProducer] on one computer with a
-[SignalConsumer] on another:
-
-* On the [SignalProducer]'s computer, construct a [socket_sender] of
-the appropriate `Signature` with the given socket.
-[connect] the [SignalProducer] to the [socket_sender].
-* On the [SignalConsumer]'s computer, construct a [socket_receiver] of
-the appropriate `Signature` with the given socket.
-[connect] the [socket_receiver] to the [SignalConsumer].
-
-That's it. Now, every signal sent out of the [SignalProducer] should
-be received by the [SignalConsumer].
-
-The following is a modification of the example from the
-[link dataflow.introduction.dataflow motivation section] to a dataflow
-network that straddles a network socket:
-
-[simple_distributed_example]
-
-A sample run produces:
-
-[pre
-0.213436
--0.49558
-1.57538
--1.0592
-1.83927
-1.88577
-...
-]
-
-[endsect][/distributed]

Deleted: sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gil_example.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gil_example.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
+++ (empty file)
@@ -1,203 +0,0 @@
-[section:gil An image processing network using Dataflow.Signals and Boost.GIL]
-
-The [link dataflow.introduction.motivation motivation] section introduced a
-hypothetical video processing example. Here, we will present an actual
-image processing example using [BoostGIL] (as much as we can using only
-Boost libraries).
-
-Our final network will look like this:
-[pre
- .
- ,---------.
- | control | -----------------------+
- \`---------' |
- | |
- v v
- ,-------. ,-----------. ,-------.
- | timer | --> | generator | -+--------------> 0 | ,---------.
- \`-------' \`-----------' | | mux | -> | display |
- | ,--------. | | \`---------'
- +->| filter |--> 1 |
- \`--------' \`-------'
-
-]
-
-The role of the `timer` is to drive the network at a set frame rate.
-The `generator` will produce an image each time it receives a signal
-from the `timer`.
-The `mux` will receive two signals - one directly from the `generator` and one
-from the `filter` (which will add some noise to the generated image).
-The output of the `mux` will go to the `display`.
-
-To control the network, we will also implement a `control` component, which
-will in this case control the `generator` (setting the greyscale value of
-the generated image), and the `mux` (choosing either the filtered or the
-unfiltered image to go to the display).
-
-Before we begin, here is some preliminary code:
-
-[gil_example_preliminary]
-
-Our first task will be to implement an image generator. For simplicity,
-our image generator will generate a grayscale image of a specified shade:
-
-[gil_example_image_generator]
-
-Next, let's implement a filter which adds noise to the image:
-
-[gil_example_noise_adder]
-
-And then an image display component. In the absence of a GUI library, we will
-approximate the image display using ASCII characters.
-
-[gil_example_image_display]
-
-To add some interactivity to the network, we will also implement a simple
-controller. The controller will respond to characters on `cin`, and based
-on the input output two control signals (a greyscale value for the
-`image_generator`, and an input selector signal for the multiplexer).
-
-[gil_example_controller]
-
-Finally, we put together the network:
-
-[gil_example_main]
-
-Here is some sample output (with input characters marked):
-
-[pre
-
-Use keys ',' and '.' to control the image intensity,
-and '0' and '1' to switch the display between the unfiltered
-and filtered image. 'q' will exit.
-
-Since we are using cin for the input, REMEMBER TO PRESS ENTER
-after each command.
-
-..........
-..........
-..........
-..........
-..........
-..........
-..........
-..........
-..........
-..........
-
-. <-- input (increase grayscale value)
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-
-. <-- input (increase grayscale value)
-. <-- input (increase grayscale value)
-. <-- input (increase grayscale value)
-xxxxxxxxxx
-xxxxxxxxxx
-xxxxxxxxxx
-xxxxxxxxxx
-xxxxxxxxxx
-xxxxxxxxxx
-xxxxxxxxxx
-xxxxxxxxxx
-xxxxxxxxxx
-xxxxxxxxxx
-
-1 <-- input (switch multiplexer to output of noise adder)
-x+++++xx+x
-+++++x+xx+
-xxx+x+x+xx
-+x+x++xx++
-xx+++xx+++
-x+x++x++xx
-xx+++++xx+
-++++x+x+++
-xxxxx+xx+x
-xxx++++++x
-
-. <-- input (increase grayscale value)
-XXxxXXXXxx
-XXXxXxxxXX
-xxxxXxxxXx
-xXxXXxXXXX
-XXxXXxXxXX
-xXxxxXxxxx
-xXxXXXXxXX
-XXxXXXxXxX
-XxXxXXxxxX
-xXxxXxxXXx
-
-, <-- input (decrease grayscale value)
-++++x++x+x
-xxx++++x++
-++++++++++
-x+xxxxxxxx
-+x+x+xx+++
-x+x+x+xxxx
-++xx++++x+
-+x+x++++++
-+xxx+++xxx
-x+xx+x+++x
-
-, <-- input (decrease grayscale value)
-, <-- input (decrease grayscale value)
-, <-- input (decrease grayscale value)
-,...,.....
-,.,.,.,,,.
-..,....,,.
-,,.,,...,.
-....,,..,,
-......,.,.
-,...,...,,
-,,,..,,.,,
-....,,...,
-,,.,,,,,,,
-
-0 <-- input (switch mutiplexer back to the generated image)
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-,,,,,,,,,,
-
-, <-- input (decrease grayscale value)
-..........
-..........
-..........
-..........
-..........
-..........
-..........
-..........
-..........
-..........
-
-1 <-- input (switch multiplexer to output of noise adder)
-. ... ..
-. . .
-..........
- . . ..
-. . . .
- .. .
- . .
- .. .
- .. .. .
- ..... .
-
-q <-- input (exit)
-]
-
-[endsect]

Deleted: sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gui_example.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gui_example.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
+++ (empty file)
@@ -1,32 +0,0 @@
-[section:fltk_gui A GUI dataflow editor]
-
-The Dataflow library contains an example GUI editor for dataflow networks.
-The editor is built on top of
-[DataflowBlueprint], it can be used for any framework with Dataflow support.
-The capabilities of the editor are fairly limited at the moment - it's purpose
-is mainly to verify that something useful can be built on top of
-[DataflowBlueprint] layer.
-
-The following is a screenshot of the editor:
-
-[$blueprint_screenshot.png]
-
-It currently has the following capabilities:
-
-* there is a component bank with 4 hardcoded (but easily extensible) components
-* you can click on a component to add it to the blueprint
-* you can drag the components around
-* you can connect ports that are [Connectable]
-* you can invoke components that are [Invocable]
-* a few of the components have a GUI element which can be interacted with
-
-To build the GUI example, you will need to download [FLTK]. At some point
-I will probably develop another version for the [cppgui] library being
-developed.
-
-The main part of the code is as follows (the GUI classes can be found in
-the `examples/fltk_gui` directory):
-
-[fltk_gui_example]
-
-[endsect]
\ No newline at end of file

Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/introduction.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/introduction.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/introduction.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -63,7 +63,7 @@
 
 [h5 Dataflow.Signals layer]
 
-This part of the Dataflow library provides Dataflow support and processing
+The [DataflowSignals] layer provides Dataflow support and
 components which use [BoostSignals] as a mechanism to transfer data
 between the components.
 
@@ -391,48 +391,50 @@
 
 [endsect][/how_to_use]
 
-[section Examples]
-
-[include introduction/distributed_example.qbk]
-[include introduction/gil_example.qbk]
-[include introduction/gui_example.qbk]
-[include introduction/blueprint_example.qbk]
-[include introduction/vtk_example.qbk]
-
-[endsect][/examples]
-
 [section:download Downloading, building and linking]
 
 [heading Downloading]
 
-I am currently preparing this library for submission for a Boost review. The
-latest version is located in the
+The latest development version is located in the
 [@http://svn.boost.org/trac/boost/browser/sandbox/SOC/2007/signals Boost sandbox].
+Released versions are located in the
+[@http://www.boost-consulting.com/vault/index.php?&directory=Dataflow Boost Vault].
 
 The Dataflow library uses the trunk version of Boost - it might not work
 perfectly with release versions of boost.
 
-Version 0.9.0 (under construction)
+Version 0.9.0
+ \[[@http://www.boost-consulting.com/vault/index.php?direction=&order=&directory=Dataflow& available in the Boost vault]\]
 
-* added a component bank class
-* added [gui_example an example GUI dataflow editor]
-* Revamped [concepts] one more time
-* [DataflowSignals] components should now all be [Component]s.
-* added the port_adapter class to replace old ProxyPort functionality
-* slot_selector is now useless - replaced with just boost::function
-* Adapted the Dataflow.Signals layer, tests, and examples.
-* Started adding Doxygen-generated support layer reference.
+* Generic Dataflow layer
+ * Revamped [concepts] one more time
+ * added the port_adapter class to replace old ProxyPort functionality
+ * Started adding Doxygen-generated support layer reference.
+
+* [DataflowSignals]
+ * Adapted the Dataflow.Signals layer, tests, and examples to new generic layer.
+ * [DataflowSignals] components should now all be [Component]s.
+ * [filter] base class now offers simpler specification of consumer signatures
+ * added a [consumer] base class for input-only components.
+ * slot_selector is now useless - replaced with just [boost_function]
+ * bind_object replaced with [bind_mem_fn], replaced make_slot_selector with
+ [bind_mem_fn_overload].
+
+* [DataflowBlueprint]
+ * added a component bank class
+ * added [gui_example an example GUI dataflow editor]
 
 Short term to-do list:
 
 * keep working on docs, tests
+* default mechanisms for operations should be specified by the framework [Tag]
+* propagate return values where they should be propagated
 * Key used for [KeyedPort]s should be overridable (not always the [PortTraits])
 * binary_operation should take two [Tag] parameters
 * add support for cross-framework operations (`tag_adapter`?)
 * make dispatching possible on other than just the [PortTraits]
 * `port_adapter` should be renamed to `adapter`
 * [Invocable] should be a part of [UnaryOperable]
-* propagate return values where they should be propagated
 
 See the [future_work] section for more information on what is planned.
 
@@ -502,7 +504,7 @@
 linked as well.
 
 The [vtk_example VTK example] requires [VTK], and the [gui_example GUI dataflow
-editor example] requires [FTLK].
+editor example] requires [FLTK].
 
 [endsect][/download]
 

Deleted: sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/vtk_example.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/vtk_example.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
+++ (empty file)
@@ -1,241 +0,0 @@
-[section:new_layer Implementing support for a new framework (VTK)]
-
-This example shows how to implement support for a particular dataflow framework.
-Our victim is [VTK], a 3D visualization toolkit, which uses a data pipeline
-to move data from a source to the display (with possible transformations,
-scene construction etc. on the way). For example, here is an excerpt from
-a VTK tutorial that sets up a whole source->render window pipeline:
-
-```
- // allocate components
- vtkConeSource *cone = vtkConeSource::New();
- vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
- vtkActor *coneActor = vtkActor::New();
- vtkRenderer *ren1= vtkRenderer::New();
- vtkRenderWindow *renWin = vtkRenderWindow::New();
-
- // make the connections
- coneMapper->SetInputConnection( cone->GetOutputPort() );
- coneActor->SetMapper( coneMapper );
- ren1->AddActor( coneActor );
- renWin->AddRenderer( ren1 );
-```
-
-Our goal will be to simplify the connection-making code by providing
-Dataflow support for VTK. With that in place, we will be able to use the
-following connection code:
-
-```
- // make the connections
- connect(*cone, *coneMapper);
- connect(*coneMapper, *coneActor);
- connect(*coneActor, *ren1);
- connect(*ren1, *renWin);
-```
-
-or even more concisely and clearly,
-
-```
- // make the connections
- *cone >>= *coneMapper >>= *coneActor >>= *ren1 >>= *renWin;
-```
-
-Once we have the [VTK] support layer built, we can include it in any
-[VTK] application and start using the Dataflow library with [VTK] objects.
-In addition to
-the simpler syntax, this also allows us to use anything build on top of the
-generic layer - like [DataflowBlueprint], or
-the [gui_example GUI editor] currently under development.
-
-[heading Next]
-[link dataflow.introduction.examples.new_layer.tag
- Setting up the Tag]
-
-[section:tag Setting up the Tag]
-
-The first thing we'll do is create a [Tag] for the VTK framework, in
-namespace `boost::dataflow::vtk`. All we have to do is inherit from
-`default_tag`:
-
-[vtk_tag]
-
-We can now use it to tag all of our [VTK] support classes.
-
-[heading Next]
-[link dataflow.introduction.examples.new_layer.producerconsumer
- Setting up a producer Port and a consumer Port]
-[endsect][/mechanism]
-
-[section:producerconsumer Setting up a producer Port and a consumer Port]
-
-Now that we have the mechanism, let's cover the basic data pipeline,
-which is implemented using the
-[vtkAlgorithm] class. This class provides input and output ports. Output ports
-are accessible via `GetOuptutPort` member functions, which return a proxy
-object ([vtkAlgorithmOutput] `*`) for an actual output port.
-
-In Dataflow concepts, [vtkAlgorithmOutput] can be made a producer [Port]
-- it corresponds to a single data output point. We support it as such by
-defining a [PortTraits] type, and associating it with
-[vtkAlgorithmOutput]:
-
-[vtk_algorithm_output_producer]
-
-[note More details about registering [PortTraits] for a [Port]
-can be found on the [Traits] documentation page.]
-
-Now that we have a producer [Port], we need a consumer [Port].
-[vtkAlgorithm] can accept incoming connections using the `AddInputConnection`
-and `SetInputConnection` member functions. Since we will make [vtkAlgorithm]
-a [Component], we can't make it a [Port] directly - but we can use
-the [port_adapter] class to refer to the [Port] functionality of [vtkAlgorithm],
-so we set up a [PortTraits] class to represent this [Port] functionality:
-
-[vtk_algorithm_consumer]
-
-[heading Next]
-
-[link dataflow.introduction.examples.new_layer.connectable
- Making things Connectable]
-
-[endsect][/producerconsumer]
-
-[section:connectable Making things Connectable]
-
-With the pair of producer [Port] and consumer [Port] registered, we
-can make them [Connectable] and/or [OnlyConnectable].
-All we need to do is specialize the implementation for the appropriate
-[PortTraits]:
-
-[vtk_connect_impl_algorithm]
-
-Connections are done through the `boost::dataflow::binary_operation` function
-with either `operation::connect` or `operation::connect_only` operation tag,
-and the specified mechanism. In the next step, we'll set up forwarding functions
-and operators that will make connections easier.
-
-[heading What we can do with what we have so far]
-
-[vtk_connect_unforwarded]
-
-[heading Next]
-[link dataflow.introduction.examples.new_layer.forwarding
- Defining forwarding functions and operators]
-
-[endsect][/connectable]
-
-[section:forwarding Defining forwarding functions and operators]
-
-To make connecting
-easier, we'll add forwarding connect and connect_only
-functions in the global namespace (where vtk classes live) specific
-to the vtk mechanism. The Dataflow library provides inlcude file templates
-for this purpose.
-
-Including `<boost/dataflow/templates/binary_operation.hpp>` with `#define`d
-`DATAFLOW_TEMPLATE_TAG` and `DATAFLOW_TEMPLATE_BINARY_OPERATION` will
-define a forwarding function `DATAFLOW_TEMPLATE_BINARY_OPERATION` in the
-current namespace.
-
-Including `<boost/dataflow/templates/operator.hpp>` with `#define`d
-`DATAFLOW_TEMPLATE_TAG`, `DATAFLOW_TEMPLATE_BINARY_OPERATION`, and
-`DATAFLOW_TEMPLATE_OPERATOR` will define a forwarding operator in the current
-namespace.
-
-[vtk_specialize_connect]
-
-[heading What we can do with what we have so far]
-
-[vtk_connect_forwarded]
-
-[heading Next]
-[link dataflow.introduction.examples.new_layer.component
- Setting up a Component]
-
-[endsect][/forwarding]
-
-[section:component Setting up a Component]
-
-In the VTK example above, both `vtkConeSource` and `vtkPolyDataMapper`
-inherit [vtkAlgorithm]. We've set up [Port]s that we can get to, and
-connect. However, we would like to be able to connect the two components
-directly, with something like `connect(*cone, *coneMapper)`.
-
-To do that,
-we need to make [vtkAlgorithm] a [Component], which allows us to
-designate default ports to be used when, e.g., connecting:
-
-[vtk_algorithm_component]
-
-Now, [vtkAlgorithm] is a producer [Port].
-
-[heading What we can do with what we have so far]
-
-```
- connect(*cone, *coneMapper)
-```
-
-[heading Next]
-[link dataflow.introduction.examples.new_layer.filter
- Setting up a filter (ProducerPort+ConsumerPort)]
-
-[endsect][/component]
-
-[section:filter Setting up another Component]
-
-In a VTK pipeline, a [vtkActor] consumes data from a [vtkMapper], and produces
-data for a [vtkRenderer]. In this case, we can provide Dataflow support
-for a [vtkActor] as both a producer [Port] and a consumer [Port]:
-
-[vtk_actor_filter]
-
-[heading Next]
-[link dataflow.introduction.examples.new_layer.producermap
- Setting up a KeyedPort]
-
-[endsect][/filter]
-
-[section:producermap Setting up a KeyedPort]
-
-Sometimes, components can produce (or consume) multiple types of data.
-For example, [vtkMapper] objects can produce data for [vtkActor] objects,
-or (since [vtkMapper] inherits [vtkAlgorithm]) for other [vtkAlgorithm]
-objects. Correspondingly, connecting a [vtkMapper] to a [vtkActor] is not
-the same as connecting a [vtkMapper] to another [vtkAlgorithm].
-
-To accomodate such situations, the Dataflow library provides
-[KeyedPort]s, which delegate fuctionality to a [Port]
-determined by the [Port] they are being connected to.
-
-[vtk_mapper_producer]
-
-[heading Next]
-[link dataflow.introduction.examples.new_layer.remaining
- Setting up the remaining components (more of the same)]
-
-[endsect][/producermap]
-
-[section:remaining Setting up the remaining Components (more of the same)]
-
-[vtk_setup_rest]
-
-[heading Next]
-[link dataflow.introduction.examples.new_layer.using_support_layer
- Using the VTK support layer]
-
-[endsect][/remaining]
-
-
-[section:using_support_layer Using the VTK support layer]
-
-Now that we have developed a support layer for VTK, what do we get?
-
-Well, at the moment, one of the largest practical benefits is a small
-improvement to the connection syntax. Here is a full VTK example which
-has been modified to use the Dataflow library for making connections:
-
-[vtk_example_Cone_cxx]
-
-[endsect]
-
-[endsect][/new_layer]

Added: sandbox/SOC/2007/signals/libs/dataflow/doc/layers.svg
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/layers.svg 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="770.42859"
+ height="132.42857"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="/Development/boost_sandbox/SOC/2007/signals/libs/dataflow/doc"
+ sodipodi:docname="layers.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Development/boost_sandbox/SOC/2007/signals/libs/dataflow/doc/layers.png"
+ inkscape:export-xdpi="69.970001"
+ inkscape:export-ydpi="69.970001">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient9310">
+ <stop
+ style="stop-color:#71c50b;stop-opacity:0;"
+ offset="0"
+ id="stop9312" />
+ <stop
+ style="stop-color:#71c50b;stop-opacity:1;"
+ offset="1"
+ id="stop9314" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8325">
+ <stop
+ style="stop-color:#5ccaf6;stop-opacity:1;"
+ offset="0"
+ id="stop8327" />
+ <stop
+ style="stop-color:#5ccaf6;stop-opacity:0;"
+ offset="1"
+ id="stop8329" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6358">
+ <stop
+ style="stop-color:#6bc50b;stop-opacity:1;"
+ offset="0"
+ id="stop6360" />
+ <stop
+ id="stop9318"
+ offset="0.40000001"
+ style="stop-color:#6bc50b;stop-opacity:0;" />
+ <stop
+ style="stop-color:#5ccaf8;stop-opacity:0;"
+ offset="0.60000002"
+ id="stop9320" />
+ <stop
+ style="stop-color:#5cc9f6;stop-opacity:1;"
+ offset="1"
+ id="stop6362" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path4185"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6358"
+ id="linearGradient6364"
+ x1="236.64285"
+ y1="148.57143"
+ x2="369.07144"
+ y2="148.57143"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8325"
+ id="linearGradient8331"
+ x1="-17.214287"
+ y1="114.5"
+ x2="199.21429"
+ y2="114.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9310"
+ id="linearGradient9316"
+ x1="-18.714287"
+ y1="116.5"
+ x2="197.71429"
+ y2="116.5"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="459.91317"
+ inkscape:cy="178.20529"
+ inkscape:document-units="px"
+ inkscape:current-layer="g3150"
+ width="800px"
+ height="200px"
+ inkscape:window-width="1045"
+ inkscape:window-height="727"
+ inkscape:window-x="208"
+ inkscape:window-y="89" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-16.285713,-96.285717)">
+ <g
+ id="g3150"
+ transform="translate(94.611603,13.928577)">
+ <rect
+ y="82.85714"
+ x="237.14285"
+ height="131.42857"
+ width="131.42857"
+ id="rect2160"
+ style="opacity:1;color:#000000;fill:url(#linearGradient6364);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ id="text3142"
+ y="124.31361"
+ x="302.41183"
+ style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
+ xml:space="preserve"><tspan
+ y="124.31361"
+ x="302.41183"
+ id="tspan3144"
+ sodipodi:role="line">Generic</tspan><tspan
+ id="tspan3146"
+ y="154.31361"
+ x="302.41183"
+ sodipodi:role="line">Dataflow</tspan><tspan
+ id="tspan3148"
+ y="184.31361"
+ x="302.41183"
+ sodipodi:role="line">Layer</tspan></text>
+ </g>
+ <g
+ id="g3188"
+ transform="translate(35,46.000008)">
+ <rect
+ style="color:#000000;fill:url(#linearGradient9316);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect4385"
+ width="215.42859"
+ height="66.428581"
+ x="-18.214287"
+ y="83.285706" />
+ <text
+ id="text3173"
+ y="122.24219"
+ x="89.710945"
+ style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
+ xml:space="preserve"><tspan
+ id="tspan3179"
+ y="122.24219"
+ x="89.710945"
+ sodipodi:role="line">Dataflow.Signals</tspan></text>
+ </g>
+ <g
+ transform="translate(587.49999,48)"
+ id="g3201">
+ <rect
+ y="81.285713"
+ x="-16.714287"
+ height="66.428581"
+ width="215.42859"
+ id="rect3195"
+ style="color:#000000;fill:url(#linearGradient8331);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ id="text3197"
+ y="122.26562"
+ x="89.271492"
+ style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
+ xml:space="preserve"><tspan
+ id="tspan3199"
+ y="122.26562"
+ x="89.271492"
+ sodipodi:role="line">Dataflow.Blueprint</tspan></text>
+ </g>
+ <path
+ style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 570.28571,162.5 L 463.68303,162.5"
+ id="path3206"
+ inkscape:connector-type="polyline"
+ inkscape:connection-end="#g3150" />
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
+ x="247.63672"
+ y="153"
+ id="text4377"><tspan
+ sodipodi:role="line"
+ id="tspan4379"
+ x="247.63672"
+ y="153">models</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Times New Roman"
+ x="478.65234"
+ y="150.59766"
+ id="text4381"><tspan
+ sodipodi:role="line"
+ id="tspan4383"
+ x="478.65234"
+ y="150.59766">requires</tspan></text>
+ <path
+ style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 232.7143,162.5 L 331.25446,162.5"
+ id="path4392"
+ inkscape:connector-type="polyline"
+ inkscape:connection-start="#g3188"
+ inkscape:connection-end="#g3150" />
+ </g>
+</svg>

Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/signals/components.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/signals/components.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/signals/components.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -6,7 +6,8 @@
 
 [table
     [[Component][Use]]
- [[[filter]][Base class for your own components.]]
+ [[[consumer]][Base class for your own input-only components.]]
+ [[[filter]][Base class for your own input/output or output-only components.]]
     [[[storage]][Stores signal arguments.]]
     [[[counter]][Counts the number of signals passing through.]]
     [[[junction]][Convenient when multiple producers need to be connected to the same set of consumers. Also has gate functionality.]]
@@ -21,38 +22,36 @@
 
 [section:generic Generic]
 
+[section:consumer consumer]
+[*See also]: [classref boost::signals::consumer consumer class reference.]
+
+[heading Model of]
+
+* [SignalConsumerComponent]
+
+[heading Description]
+
+The [consumer] class is provided as a base class for input-only components.
+It provides support for Dataflow connection operators and functions.
+
+You can find an example using the [consumer] class in the [signals_tutorial].
+
+[endsect][/consumer]
+
 [section:filter filter]
 [*See also]: [classref boost::signals::filter filter class reference.]
 
 [heading Model of]
 
-* [SignalConsumer]
-* [SignalProducer]
+* [SignalFilterComponent]
 
 [heading Description]
 
 The [filter] class is provided as a base class for in / out components.
 It provides support for Dataflow connection operators and functions,
-and provides a default output signal. Here is an example of a simple class
-which inherits [filter]:
-
-[test_filter_classes]
-
-The type of the output signal (in the above example, `signals::unfused`)
-is specified as the second template parameter.
-There are three options:
-
-* `signals::unfused` provides an unfused output signal named `out`.
-* `signals::fused` provides a fused output signal named `fused_out`.
-* `signals::combined` provides an unfused output signal named `out`,
- and a fused adapter for the signal named `fused_out`.
- This is useful for components which wish to use fusion internally but output
- an unfused signal.
+and provides a default output signal.
 
-A component developed on top of the [filter] class can then be used in the
-appropriate network. Here is an example which uses the class defined above:
-
-[test_filter_fused]
+You can find an example using the [filter] class in the [signals_tutorial].
 
 [endsect][/filter]
 
@@ -60,10 +59,7 @@
 [*See also]: [classref boost::signals::applicator applicator class reference.]
 
 [heading Model of]
-* [SignalConsumer]
-* [SignalProducer]
-* [Connectable] to any [SignalProducer] type `P` where
- `Signature` matches `P`'s produced type.
+* [SignalFilterComponent]
   
 [heading Description]
 
@@ -80,6 +76,11 @@
 [section:conditional conditional]
 [*See also]: [classref boost::signals::conditional conditional class reference.]
 
+[heading Model of]
+* [SignalFilterComponent]
+
+[heading Description]
+
 The [conditional] class applies a specified function object to a member variable
 of a specified type whenever it receives a signal.
 The signal is forwarded if the function object returns true.
@@ -94,10 +95,7 @@
 [*See also]: [classref boost::signals::instantiator instantiator class reference.]
 
 [heading Model of]
-* [SignalConsumer]
-* [SignalProducer]
-* [Connectable] to any [SignalProducer] type `P` where
- `Signature` matches `P`'s produced type.
+* [SignalFilterComponent]
   
 [heading Description]
 
@@ -115,10 +113,7 @@
 [*See also]: [classref boost::signals::modifier modifier class reference.]
 
 [heading Model of]
-* [SignalConsumer]
-* [SignalProducer]
-* [Connectable] to any [SignalProducer] type `P` where
- `Signature` matches `P`'s produced type.
+* [SignalFilterComponent]
   
 [heading Description]
 
@@ -139,10 +134,7 @@
 [*See also]: [classref boost::signals::storage storage class reference.]
 
 [heading Model of]
-* [SignalConsumer]
-* [SignalProducer]
-* [Connectable] to any [SignalProducer] type `P` where
- `Signature` matches `P`'s produced type.
+* [SignalFilterComponent]
   
 [heading Description]
 
@@ -156,6 +148,11 @@
 [section:counter counter]
 [*See also]: [classref boost::signals::counter counter class reference.]
 
+[heading Model of]
+* [SignalFilterComponent]
+
+[heading Description]
+
 The [counter] class counts the number of passing signals. Each time it
 receives a signal, it will increment an internal
 counter and forward the signal.
@@ -170,10 +167,7 @@
 [*See also]: [classref boost::signals::junction junction class reference.]
 
 [heading Model of]
-* [SignalConsumer]
-* [SignalProducer]
-* [Connectable] to any [SignalProducer] type `P` where
- `Signature` matches `P`'s produced type.
+* [SignalFilterComponent]
   
 [heading Description]
 
@@ -188,10 +182,7 @@
 [*See also]: [classref boost::signals::multiplexer multiplexer class reference.]
 
 [heading Model of]
-* [SignalConsumer]
-* [SignalProducer]
-* [Connectable] to any [SignalProducer] type `P` where
- `Signature` matches `P`'s produced type.
+* [SignalFilterComponent]
   
 [heading Description]
 
@@ -210,10 +201,7 @@
 [*See also]: [classref boost::signals::mutex mutex class reference.]
 
 [heading Model of]
-* [SignalConsumer]
-* [SignalProducer]
-* [Connectable] to any [SignalProducer] type `P` where
- `Signature` matches `P`'s produced type.
+* [SignalFilterComponent]
   
 [heading Description]
 
@@ -228,10 +216,7 @@
 [*See also]: [classref boost::signals::mutex mutex class reference.]
 
 [heading Model of]
-* [SignalConsumer]
-* [SignalProducer]
-* [Connectable] to any [SignalProducer] type `P` where
- `Signature` matches `P`'s produced type.
+* [SignalFilterComponent]
   
 [heading Description]
 
@@ -248,10 +233,7 @@
 [*See also]: [classref boost::signals::function function class reference.]
 
 [heading Model of]
-* [SignalConsumer]
-* [SignalProducer]
-* [Connectable] to any [SignalProducer] type `P` where
- `Signature` matches `P`'s produced type.
+* [SignalFilterComponent]
   
 [heading Description]
 
@@ -269,19 +251,13 @@
 [section:chain chain]
 
 [heading Model of]
-* [SignalConsumer]
-* [SignalProducer]
-* [Connectable] to any [SignalProducer] type `P` where
- `Signature` matches `P`'s produced type.
+* [SignalFilterComponent]
   
 [heading Description]
 
 The [chain] class chains together multiple copies of the same component.
 
-[table function class use example
- [[fused][unfused]]
- [[[test_chain_fused]][[test_chain_unfused]]]
-]
+[test_chain_unfused]
 
 The example above uses the following classes:
 
@@ -297,9 +273,7 @@
 [*See also]: [classref boost::signals::socket_sender socket_sender class reference.]
 
 [heading Model of]
-* [SignalConsumer]
-* [Connectable] to any [SignalProducer] type `P` where
- `Signature` matches `P`'s produced type.
+* [SignalConsumerComponent]
   
 [heading Description]
 
@@ -318,7 +292,7 @@
 [*See also]: [classref boost::signals::socket_receiver socket_receiver class reference.]
 
 [heading Model of]
-* [SignalProducer]
+* [SignalFilterComponent]
   
 [heading Description]
 

Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/signals/concepts.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/signals/concepts.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/signals/concepts.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -1,37 +1,63 @@
 [section Concepts]
 
-[section:signalporttraits SignalPortTraits]
-A [PortTraits] type `T` is a [`[SignalPortTraits]] if
-its mechanism is `signals::mechanism`, and it specifies the signature
-of the underlying signal.
+[section:signaltraits SignalTraits]
+A [Traits] type `T` is a ['[SignalTraits]] if
+its tag is `dataflow::signals::tag`.
 
 [heading Refinement of]
-* [PortTraits]
+* [Traits]
 
 [heading Notation]
 The following expressions are used in this document:
 
 [variablelist
- [[PT] [A [SignalPortTraits] type.]]
- [[C] [A [Connectable] [SignalConsumer].]]
- [[p] [An object of type `p`.]]
- [[c] [An object of type `c`.]]
+ [[ST] [A [SignalTraits] type.]]
 ]
 
 [heading Requirements]
+
+The following requrements are only those that are in addition to or different
+than those of the refined concepts listed above:
+
 [table
     [[Name] [Expression] [Result Type] [Semantics]]
     [
         [Tag]
- [`PT::mechanism`]
- [`dataflow::signals::mechanism`]
+ [`ST::tag`]
+ [`dataflow::signals::tag`]
         [[Tag] type tag.]
     ]
+]
+
+[endsect]
+
+[section:signalporttraits SignalPortTraits]
+A [PortTraits], [SignalTraits] type `SPT` is a ['[SignalPortTraits]] if
+it specifies the signature of the underlying signal.
+
+[heading Refinement of]
+* [PortTraits]
+* [SignalTraits]
+
+[heading Notation]
+The following expressions are used in this document:
+
+[variablelist
+ [[SPT] [A [SignalTraits] type.]]
+]
+
+[heading Requirements]
+
+The following requrements are only those that are in addition to or different
+than those of the refined concepts listed above:
+
+[table
+ [[Name] [Expression] [Result Type] [Semantics]]
     [
         [Signature]
- [`PT::signature_type`]
+ [`SPT::signature_type`]
         [`any function type`]
- [Signature of the underlying `boost::signal`/`boost::function`.]
+ [Signature of the underlying [boost_signal]/[boost_function].]
     ]
 ]
 
@@ -40,42 +66,35 @@
 [section SignalProducer]
 
 A producer [Port] type `P` is a ['[SignalProducer]] if its
-[PortTraits] is a [SignalPortTraits], and the `get_port` function
-returns the underlying `boost::signal`.
+[PortTraits] is a [SignalPortTraits]. A [SignalProducer] must also
+match the requirements modeled by the [boost_signal] class.
 
 [heading Refinement of]
 * producer [Port]
 * [Connectable] with [SignalConsumer] of same signature.
+* [AllDisconnectable]
+* requirements modeled by the [boost_signal] class.
 
-[heading Notation]
-The following expressions are used in this document:
+[heading Requirements]
 
-[variablelist
- [[`P`] [A [SignalProducer] type.]]
- [[`PT`] [[PortTraits] of `P`]]
- [[`C`] [A [Connectable] [SignalConsumer].]]
- [[`S`] [Signature of underlying signal]]
- [[`p`] [An object of type `p`.]]
- [[`c`] [An object of type `c`.]]
-]
+The following requrements are only those that are in addition to or different
+than those of the refined concepts listed above:
 
-[heading Requirements]
 [table
- [[Name] [Expression] [Result Type] [Description]]
+ [[Name] [Expression] [Result Type] [Semantics]]
     [
- [Signal]
- [`dataflow::get_port(p)`]
- [`boost::signal<PT::signal_type,...> &`]
+ [Traits]
+ [[^[traits_of]<P, dataflow::signals::tag>::type]]
+ [[SignalTraits] type]
         [
- Reference to the signal storing the outgoing connections.
+ The [Traits] of `P` for [Tag] `dataflow::signals::tag`.
         ]
     ]
 ]
 
 [heading Header]
 
-The types, templates, and functions shown here are declared in the following
-files:
+[boost_signal] models [SignalProducer] after including the following files:
 
 ```
     #include <boost/dataflow/signals/support.hpp>
@@ -86,42 +105,35 @@
 [section SignalConsumer]
 
 A consumer [Port] type `P` is a ['[SignalConsumer]] if its
-[PortTraits] is a [SignalPortTraits], and the `get_port` function
-returns the underlying `boost::function`.
+[PortTraits] is a [SignalPortTraits]. A [SignalProducer] must also
+match the concepts modeled by the [boost_signal] class.
 
 [heading Refinement of]
 * consumer [Port]
 * [Connectable] with [SignalProducer] of same signature.
+* concepts modeled by the [boost_function] class.
+* convertible to [boost_function].
 
-[heading Notation]
-The following expressions are used in this document:
+[heading Requirements]
 
-[variablelist
- [[`C`] [A [SignalConsumer] type.]]
- [[`PT`] [[PortTraits] of `C`]]
- [[`P`] [A [Connectable] [SignalProducer].]]
- [[`S`] [Signature of underlying signal]]
- [[`c`] [An object of type `c`.]]
- [[`p`] [An object of type `p`.]]
-]
+The following requrements are only those that are in addition to or different
+than those of the refined concepts listed above:
 
-[heading Requirements]
 [table
- [[Name] [Expression] [Result Type] [Description]]
+ [[Name] [Expression] [Result Type] [Semantics]]
     [
- [Signal]
- [`dataflow::get_port(p)`]
- [`boost::function<PT::signature_type>`]
+ [Traits]
+ [[^[traits_of]<P, dataflow::signals::tag>::type]]
+ [[SignalTraits] type]
         [
- Boost.Function object for the slot.
+ The [Traits] of `P` for [Tag] `dataflow::signals::tag`.
         ]
     ]
 ]
 
 [heading Header]
 
-The types, templates, and functions shown here are declared in the following
-files:
+[boost_function] models [SignalConsumer] after including the following files:
 
 ```
     #include <boost/dataflow/signals/support.hpp>
@@ -129,4 +141,39 @@
 
 [endsect][/signalconsumer]
 
+[section SignalConsumerComponent]
+
+A [Component] type `F` is a ['[SignalConsumerComponent]] if its
+[ComponentTraits] is a [SignalTraits], and has a default [SignalConsumer] port.
+
+[heading Refinement of]
+* [Component]
+
+[heading Requirements]
+
+The following requrements are only those that are in addition to or different
+than those of the refined concepts listed above:
+
+...to come...
+
+[endsect][/SignalConsumerComponent]
+
+[section SignalFilterComponent]
+
+A [Component] type `F` is a ['[SignalFilterComponent]] if its
+[PortTraits] is a [SignalTraits], and has default [SignalProducer]
+and [SignalConsumer] ports.
+
+[heading Refinement of]
+* [Component]
+
+[heading Requirements]
+
+The following requrements are only those that are in addition to or different
+than those of the refined concepts listed above:
+
+...to come...
+
+[endsect][/SignalFilterComponent]
+
 [endsect]

Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/signals/connections.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/signals/connections.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/signals/connections.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -1,4 +1,4 @@
-[section:connections Functions, operators, and helper classes]
+[section:connections Free functions and operators]
 
 [section:connect connect function]
 
@@ -8,34 +8,31 @@
 namespace, which connects a [SignalProducer] and [SignalConsumer]
 which are [Connectable].
 
-Given a [SignalProducer] `p` and [SignalConsumer] `c`,
+Given a [SignalProducer] `p` and [Connectable] [SignalConsumer] `c`,
 
- connect(p,c);
+ signals::connect(p,c);
     
-will create a connection between the two. The examples in this documentation typically
-use [operators] to create connections. The [operators] use the [connect] function
-directly, and can be replaced by invocations of [connect] if preferred.
+will create a connection between the two.
 
+Since [DataflowSignals] [components] provide default ports, they can be used
+with the [connect] function directly. The default [SignalProducer] is the
+[boost_signal] provided by each of the [components], and the default [SignalConsumer]
+is the call operator ([^operator()]).
 
- #include <boost/signal_network/connection/slot_selector.hpp>
+[note The call operator acts as a [KeyedPort] - an appropriate overload will
+be selected depending on the signature of the signal being connected]
 
-will add support for [slot_selector] objects as signal consumers. In addition, they can be used
-as signal producers if the underlying object is a signal producer.
-
- #include <boost/signal_network/connection/slot_selector_map.hpp>
-
-will add support for fusion maps from signatures to [slot_selector] objects (and perhaps to any signal consumer,
-not tested yet) as signal consumers. This can be used to pack multiple slots of an object together, and then make
-connections based on the appropriate signature (see the send_slot function of [storage] as an example).
-In addition, fusion maps can be used as signal producers if the underlying object of the front element is a signal
-producer.
-
-[test_connect]
+The [link dataflow.signals.introduction.quick_start quick start] section
+has some examples.
 
 [endsect]
 
 [section:operators connection operators]
 
+The examples in this documentation typically
+use [operators] to create connections. The [operators] use the [connect] function
+directly, and can be replaced by invocations of [connect] if preferred.
+
 [heading Chaining]
 
 Chaining of components can be done using `operator >>=`.
@@ -58,25 +55,23 @@
 namespace, which invokes a [Invocable] [DataflowSignals]
 [Component].
 
-[endsect]
-
-[section:slot_selector slot_selector class]
+The only [Invocable] [component] provided by the library is [storage].
 
-[*See also]: [classref boost::signals::slot_selector slot_selector class reference.]
+Here is an example that uses [invoke]:
 
-The [slot_selector] class is used to refer to a particular member function of a particular object, and can be used
-can be used as a receiver.
+[test_storage_unfused]
 
-[slot_selector] objects can be constructed using the [funcref boost::signals::make_slot_selector] function.
-See the [link dataflow.connections.examples.multiple_same Multiple inputs of the same signature] example.
+[endsect]
 
-[heading Models]
+[section:disconnect_all disconnect_all function]
 
-* [SignalConsumer]
-* [ProxyPort]
+The [disconnect_all] function can be used to disconnect all [SignalConsumer]s
+from a [SignalProducer] (or from the default [SignalProducer] of a [component]).
 
-[endsect][/slot_selector]
+Here is an example:
 
+[test_disconnect_unfused]
 
+[endsect]
 
 [endsect][/connections]

Added: sandbox/SOC/2007/signals/libs/dataflow/doc/signals/examples.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/signals/examples.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -0,0 +1,6 @@
+[section Examples]
+
+[include examples/distributed_example.qbk]
+[include examples/gil_example.qbk]
+
+[endsect]
\ No newline at end of file

Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/signals/introduction.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/signals/introduction.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/signals/introduction.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -1,62 +1,93 @@
 [section Introduction]
 
-[/The Signal Network library relies on moving the data via function parameters and return values.
-Here, the Boost.Signals library is used to model these individual data channels which couple
-the data transfer and the computational component invocation. This is one possible dataflow-oriented
-approach.
-
-Each of these approaches has different properties. In the signal-based approach, the knowledge of the
-network is local - each component knows about where its signals are going, but it knows nothing
-of where the signals arriving at its own slots are coming from. Unless we record how the network was
-constructed, there is no "big picture" of what the complete network looks like. Similarly,
-the network is executed autonomously - the components invoke one another when appropriate, and
-no external control mechanism is required.]
-
-
-[BoostSignals] is an excellent building block for dataflow networks,
-as it provides support for all of the essential elements -
-data transport through parameters and return values, combining
-return values from multiple signal calls, component invocation,
-and reconfigurability through connection and disconnection.
-
-The [DataflowSignals] module uses [BoostSignals] as
-the data transport mechanism in dataflow networks.
-In addition, it provides two major contributions that facilitate the
-building of large signals-based dataflow networks:
-
-* Support for a number of types of components (functors, filters,
- member function slot selection), which can be used with
- the generic Dataflow functionality - such as the [connect] function and its
- associated operators which can be
- used to easily connect different kinds of components.
-* A number of generic and specific components which can be extended
- and customized for use in particular dataflow networks.
+The [DataflowSignals] layer provides dataflow functionality based on function
+calls - which is one of the fundamental ways of dataflow in C++ (the caller
+can send data to the callee through parameters, and the callee can send
+data back through return values or modified parameters). If
+you're not familiar with dataflow programming, you might want to read the
+general [link dataflow.introduction general Dataflow library introduction].
+
+For its data transport mechanism, [DataflowSignals] uses [BoostSignals]
+which can be used to make lasting dataflow connections
+based on function calls. [DataflowSignals] provides the following
+to facilitate signals-based dataflow networks:
+
+* A number of useful general-purpose [components], and building blocks for
+ implementing new components.
+* Various [signals_freefunctions] for connecting and using components.
 
 [section Quick Start]
 
+[heading Signals and Functions]
+
+The basic buliding blocks of [DataflowSignals] communication are
+[boost_signal], serving as a producer of signals, and [boost_function],
+serving as a consumer of signals. A [boost_signal] can be permanently
+connected to anything that can be pointed to by a [boost_function].
+
+Here is a simple example that illustrates this:
+[signal_function_connect]
+
+If you are familiar with [BoostSignals], will notice that the [^connect]
+free function is something new - it is provided by [DataflowSignals].
+[DataflowSignals] offers other utilities that make connection making easier,
+like the [bind_mem_fn] function which binds a member function to an object:
+
+[signal_mem_fn_connect]
+
+[heading Components]
+
+In [DataflowSignals], [boost_signal] and [boost_function] are considered
+['ports] (fundamental points of data production or consumption).
+Ports can be grouped together into components,
+which serve as fundamental data processing elements with one or more inputs
+and outputs (ports).
+
+The typical incarnation of a component is a class, with one or more
+[boost_signal]s as producer ports and any member function as a potential
+consumer port. While you can implement such classes any way you like, and use
+functionality described above to connect signals of one object to member functions
+of another, [DataflowSignals] offers some facilities that make things easier.
+
+Here is a simple example that uses the [filter] and [consumer] classes, which
+serve as a foundation for [DataflowSignals] components. [filter] is best for
+components that have an output signal, and [consumer] for components that only
+have signal inputs.
+
+[component_component_example]
+
+[heading Chaining and Operators]
+
+The above components either produce ([^producer_component]) or consume
+([^consumer_component]) signals. Let's see a
+filter example which does both - and at the same time let's introduce connection
+operators which make chaining of filters easier:
+
+[component_component_component_example]
+
+[heading Provided Components]
+
 [DataflowSignals] provides many common building block components for a
 signal-based dataflow network. The most basic is [storage], which
 can be used to store a value received through a signal, send it on,
 and/or retrieve it.
 
-By default, components in the library use `operator()` to receive a signal.
 For example, when a [storage] object receives a signal through its `operator()`
 (i.e., its `operator()` gets called), it will store the value of the arguments,
 and depending on its state it might forward the signal onward. When the
 [storage] object's `send()` function is called (or the object is invoked via
-the `invoke()` function), the stored values will be sent to any connected
+the [invoke] function), the stored values will be sent to any connected
 consumers.
 
 The value stored inside a [storage] object
 can be retrieved via the [memberref boost::signals::storage::at() at()] method.
 
 Using a few [storage] objects, it is easy to
-create a simple network using
-[funcref boost::dataflow::operator>>=() operator>>=]:
+create a simple network:
         
 [test_storage_unfused]
 
-[heading Creating your own signal receiver (slot)]
+[/[heading Creating your own signal receiver (slot)]
 
 The easiest way to create your own signal receiver which can be used with the
 [DataflowSignals] library is to create a class with `operator()` of the signal
@@ -85,106 +116,29 @@
 `operator()`:
 
 [fused_signal_void_counter]
-[fused_signal_void_counter_main]
+[fused_signal_void_counter_main]]
 
 To proceed, you may want to look at
 
-* Provided [DataflowSignals] module [link dataflow.components components].
-* Creating your own in/out components using the [filter] class.
-* Using the [link dataflow.connections connection operators] to make connections.
+* Some motivating [link dataflow.signals.introduction.examples examples].
+* A [signals_tutorial] on several topics.
+* Provided [DataflowSignals] layer [components].
 
 [endsect][/start]
 
-[section Examples]
-
-[section:pull Pull-based networks]
-
-The [DataflowSignals] module was built with push-based networks in
-mind (the data producer sends data through a signal), but it can also
-be used for pull-based networks (the data consumer requests data through
-a signal).
-
-For example, the following component requests a value through a signal,
-and returns twice the value:
-
-[test_pull_classes]
-
-This class can be connected using the usual [operators]:
-
-[test_pull_unfused]
-
-[endsect][/pull]
-
-[section:disconnect Disconnecting]
-
-Connections can be terminated in two ways. One is through the "trackable"
-mechanism of Boost.Signals, which will automatically destroy connections
-to a trackable object when the object is destroyed. The other
-way is through the disconnect_all_slots method of the signal sender.
-
-[test_disconnect_unfused]
+[include examples.qbk]
 
-[endsect][/disconnect]
-
-[section:multiple_different Multiple slots of different signatures]
-
-It is simple to have an object provide multiple slots through operator() functions
-of different signatures. The following class does so through providing unary slots
-of different types:
-
-[test_multi_type_classes]
-
-[/The following class, on the other hand, uses slots of different number of arguments:
-
-[test_multi_type_classes]]
-
-In such cases, where the operator() functions differ in their signature,
-standard connection operators will work out the correct connection:
-
-[test_multi_args_unfused]
-
-[endsect][/multiple_different]
-
-[section:multiple_same Multiple inputs of the same signature]
-
-In some cases, a class may want to receive multiple signals of the same
-signature. [/For example, the following class can receive a void() signal
-through its inherited operator() function, as well as through the
-operator() function of member "other":
-
-[test_same_type_class1]
-
-For example, the following class could receive void() signals both
-through operator() and through AltInput:
-
-[test_same_type_classes]
-
-The following example shows how to connect signals to all of the above slots.
-For the class Signal2VoidInputs, this is accomplished using the
-slot_selector function:
-
-[test_same_type_unfused]
-
-[endsect][/multiple_same]
-
-[section:multi_out Multiple outputs]
-
-Multiple outputs can be achieved by introducing additional signals in the class.
-
-[test_multi_out_unfused]
-
-The example uses the following classes:
-
-[test_multi_out_classes]
-
-[endsect][/multi_out]
-
-[endsect][/examples]
+[include tutorial.qbk]
 
 [section:fusion DataflowSignals and Boost.Fusion]
 
-The components in the [DataflowSignals] module are implemented using [fusion]. To use the
-[DataflowSignals] module, you might benefit from the following if you're not familiar with fusion.
+The [components] in the [DataflowSignals] layer are implemented using [fusion].
+To use the [components], you don't need to know anything about [fusion],
+but for some advanced uses you might benefit from taking advantage of the fact
+that [fusion] is under the hood.
+
+If you're not familiar with fusion, here are a few basic concepts you might find
+helpful in the context of [DataflowSignals]:
 
 [heading Fused vs. unfused]
 A simple C++ function object might look something like this:

Added: sandbox/SOC/2007/signals/libs/dataflow/doc/signals/tutorial.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/signals/tutorial.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -0,0 +1,132 @@
+[section Tutorial]
+
+[section:pull Pull-based networks]
+
+In [DataflowSignals], we have signal producers and signal consumers.
+But note that the flow of data can go in both directions. The caller (signal
+producer) could be considered the data producer if it supplies data in the
+provided arguments. On the other hand, the callee (signal consumer) could be
+considered the data producer if it returns data either in the return value or
+through one of the parameters.
+
+Most of the examples in this documentation focus on the former case, where
+the signal producer is the data producer (this could also be called
+a push-based network). Here we will present an example of the latter case,
+where the signal consumer is the data producer (i.e., a pull-based network).
+
+The following component requests a value through a signal,
+and returns twice the value:
+
+[test_pull_classes]
+
+This class can be connected using the usual [operators]:
+
+[test_pull_unfused]
+
+The [^value_at_slot<0>] member function returns a [boost_function] pointing to
+the [^at<0>] member function of [storage]. Because we initalized [^generator]
+with a value of [^1.0f], that is what [^at<0>] will return. [^doubler] will
+double that value and return [^2.0f].
+
+[endsect][/pull]
+
+[section:disconnect Disconnecting]
+
+Disconnection capability is not yet fully supported by [DataflowSignals],
+although you can always use disconnection features of [BoostSignals].
+Currently, the only [DataflowSignals] method of disconnecting is the
+[disconnect_all] function, which can be applied to any component based on
+[filter]. Here is an example:
+
+[test_disconnect_unfused]
+
+[endsect][/disconnect]
+
+[section:multiple_different Multiple slots of different signatures]
+
+It is simple to have an object provide multiple signal consumer ports through
+operator() functions of different signatures.
+Here is an example:
+
+[test_multi_type_classes]
+
+[/The following class, on the other hand, uses slots of different number of arguments:
+
+[test_multi_type_classes]]
+
+In such cases, where the operator() functions differ in their signature,
+standard connection operators will work out the correct connection:
+
+[test_multi_type_unfused]
+
+[endsect][/multiple_different]
+
+[section:multiple_same Multiple inputs of the same signature]
+
+In some cases, a class may want to receive multiple signals of the same
+signature. For example, the following class could receive void() signals both
+through operator() and through AltInput:
+
+[test_same_type_classes]
+
+The following example shows how to connect signals to all of the above slots.
+For the class Signal2VoidInputs, this is accomplished using the
+[bind_mem_fn] function:
+
+[test_same_type_unfused]
+
+[endsect][/multiple_same]
+
+[section:multi_out Multiple outputs]
+
+The use of multiple outputs (signal producers) is not yet fully integrated
+with the [filter] class. Ideally, the [filter] class should allow you to
+specify more than one signal output signature, but that feature is not available
+yet.
+
+In the meantime, multiple outputs can be achieved by introducing additional
+signals in the class:
+
+[test_multi_out_classes]
+
+You can then connect the signal directly:
+
+[test_multi_out_unfused]
+
+[endsect][/multi_out]
+
+[section:filterconsumercomponents Implementing new components using filter and consumer classes]
+
+The easiest way to implement new [DataflowSignals] components is to inherit
+[filter] or [consumer] classes. Inherit the [filter] class when your component
+needs an output, and the [consumer] class when you only need inputs.
+
+Here is an example of simple classes which inherit [filter] or [consumer]:
+
+[test_filter_classes]
+
+With the components implemented, we can use them with the usual
+[signals_freefunctions].
+
+[test_filter_unfused]
+
+[/The type of the output signal (in the above example, `signals::unfused`)
+is specified as the second template parameter.
+There are three options:
+
+* `signals::unfused` provides an unfused output signal named `out`.
+* `signals::fused` provides a fused output signal named `fused_out`.
+* `signals::combined` provides an unfused output signal named `out`,
+ and a fused adapter for the signal named `fused_out`.
+ This is useful for components which wish to use fusion internally but output
+ an unfused signal.
+
+A component developed on top of the [filter] class can then be used in the
+appropriate network. Here is an example which uses the class defined above:
+
+[test_filter_fused] ]
+
+[endsect]
+
+
+[endsect][/tutorial]

Added: sandbox/SOC/2007/signals/libs/dataflow/doc/support/examples.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/support/examples.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -0,0 +1,5 @@
+[section Examples]
+
+[include examples/vtk_example.qbk]
+
+[endsect][/examples]

Added: sandbox/SOC/2007/signals/libs/dataflow/doc/support/introduction.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/support/introduction.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -0,0 +1,62 @@
+[section:introduction Introduction]
+
+The generic dataflow layer provides [concepts] which are applicable to
+different dataflow frameworks, and can be used to develop generic dataflow
+code. Generic dataflow code (such as [DataflowBlueprint]) can be
+built on top of these concepts, and then work with any dataflow framework
+whose elements model the concepts (such as [DataflowSignals]).
+
+Following is a gentle introduction to the various concepts addressed.
+More detail can be found in the [concepts] documentation, as well as the
+[@dataflow/support/s03.html reference] for implemented
+templates, classes and functions.
+
+[heading Frameworks]
+
+A dataflow /framework/ is a collection of types and functions which can
+be used to move and process data in a dataflow network. Diffirent frameworks
+work in different ways, and use different mechanisms to transport data.
+For example, [BoostSignals] offers transfer of data through function calls,
+while [VTK] offers a number of classes which are meant to be connected in
+a pipline (e.g., starting with the data source, manipulating it, and
+finally displaying it on the screen).
+
+In the Dataflow
+library, a framework typically has a [Tag], which is then used to tag its
+[Port]s and [Component]s and allow them to interoperate.
+
+[heading Ports]
+
+A point of data production or consumption in a dataflow framework
+is called a /port/.
+Two complementary ports that produce / consume the same type of data using
+the same mechanism can typically be connected/disconnected, or data
+can be extracted from one port to another.
+
+Ports are captured more formally by the [Port] concept.
+
+[heading Components]
+
+A /component/ is the fundamental data processing element of a dataflow
+network. It can have multiple ports, for example a video filter component
+might have one consumer port (consuming video to be processed) and one
+producer port (producing filtered video).
+
+Components are captured more formally by the [Component] concept.
+
+[heading Operations]
+
+To establish a flow of data in a dataflow program, we typically /connect/
+producers and consumers using some type of /connection/. In C++, this is usually
+done through a pointer-like mechanism. For example, a boost::signal can be used
+by a producer to dissiminate data to multiple consumers which have been
+connected to the signal. Or, a consumer class might have a pointer to a variable
+which it collects data from.
+
+Operations between two ports such as /connect/, /connect_only/, /disconnect/,
+and /extract/ are captured by the [BinaryOperable] concept. Operations
+on a single port such as /disconnect_all/ are covered by the [UnaryOperable]
+concept. Operations on components are covered by the [ComponentOperable]
+concept.
+
+[endsect]

Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/utility/utility.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/utility/utility.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/utility/utility.qbk 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -13,6 +13,20 @@
 
 [endsect]
 
+[section bind_mem_fn_overload]
+
+* See also: [funcref boost::dataflow::utility::bind_mem_fn_overload bind_mem_fn_overload reference]
+
+[bind_mem_fn_overload] can be used to bind a class member function of a
+particular signature to a class object.
+It returns a boost::function, which can be used as a [DataflowSignals] [Port].
+
+[heading Example]
+
+[test_bind_mem_fn_overload]
+
+[endsect]
+
 [xinclude ../dataflow_utility_doxygen.xml]
 
 [endsect]
\ No newline at end of file

Modified: sandbox/SOC/2007/signals/libs/dataflow/example/Jamfile.v2
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/example/Jamfile.v2 (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/example/Jamfile.v2 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -3,11 +3,11 @@
 # accompanying file LICENSE_1_0.txt or copy at
 # http://www.boost.org/LICENSE_1_0.txt)
 
-build-project VTK ;
+#build-project VTK ;
 build-project signals ;
-build-project blueprint ;
-build-project fltk_gui ;
-build-project cppgui_gui ;
+#build-project blueprint ;
+#build-project fltk_gui ;
+#build-project cppgui_gui ;
 
 project dataflow/example
     : requirements

Modified: sandbox/SOC/2007/signals/libs/dataflow/example/signals/Jamfile.v2
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/example/signals/Jamfile.v2 (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/example/signals/Jamfile.v2 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -17,3 +17,4 @@
     /boost/thread//boost_thread/<link>static
     /boost/system//boost_system/<link>static ;
 exe gil_example : gil_example.cpp /boost/thread//boost_thread/<link>static ;
+exe quick_start_examples : quick_start_examples.cpp ;
\ No newline at end of file

Modified: sandbox/SOC/2007/signals/libs/dataflow/example/signals/gil_example.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/example/signals/gil_example.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/example/signals/gil_example.cpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -90,11 +90,9 @@
 
 //[ gil_example_image_display
 
-class image_display
+class image_display : public signals::consumer<>
 {
 public:
- typedef dataflow::signals::call_consumer<> dataflow_traits;
-
     // Upon receiving an image, cout an ASCII approximation.
     void operator()(const gil::gray8_image_t &image)
     {

Modified: sandbox/SOC/2007/signals/libs/dataflow/example/signals/intro_example.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/example/signals/intro_example.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/example/signals/intro_example.cpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -9,12 +9,10 @@
 using namespace boost;
 
 //[ signal_void_counter
-class SignalVoidCounter
+class SignalVoidCounter : public signals::consumer<>
 {
     int cnt;
 public:
- typedef dataflow::signals::call_consumer<> dataflow_traits;
-
     SignalVoidCounter() : cnt(0) {}
     void operator()()
     {
@@ -28,12 +26,10 @@
 //]
 
 //[ fused_signal_void_counter
-class FusedSignalVoidCounter
+class FusedSignalVoidCounter : public signals::consumer<>
 {
     int cnt;
-public:
- typedef dataflow::signals::call_consumer<> dataflow_traits;
-
+public:
     FusedSignalVoidCounter() : cnt(0) {}
     void operator()(const fusion::vector<> &)
     {

Added: sandbox/SOC/2007/signals/libs/dataflow/example/signals/quick_start_examples.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/dataflow/example/signals/quick_start_examples.cpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -0,0 +1,139 @@
+// Copyright 2007 Stjepan Rajko.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//[ signal_function_connect
+
+#include <boost/dataflow/signals/support.hpp>
+#include <iostream>
+#include <string>
+
+void consumer_function(const std::string &data)
+{
+ std::cout << data << std::endl;
+}
+
+void signal_function_example()
+{
+ boost::signal<void(const std::string &)> producer;
+ boost::function<void(const std::string &)> consumer(consumer_function);
+
+ connect(producer, consumer); // make a connection between the two.
+ producer("Hello World"); // signal goes to the function.
+}
+
+//]
+
+//[ signal_mem_fn_connect
+
+#include <boost/dataflow/utility/bind_mem_fn.hpp>
+
+class consumer_class
+{
+public:
+ void consumer_mem_fn(const std::string &data)
+ {
+ std::cout << data << std::endl;
+ }
+};
+
+void signal_mem_fn_example()
+{
+ using boost::dataflow::utility::bind_mem_fn;
+
+ boost::signal<void(const std::string &)> producer;
+ consumer_class consumer;
+
+ // make a connection between the producer and consumer.
+ connect(producer, bind_mem_fn(&consumer_class::consumer_mem_fn, consumer));
+ producer("Hello World"); // signal goes to the member function.
+}
+
+//]
+
+//[ component_component_example
+
+#include <boost/dataflow/signals/component/filter.hpp>
+
+using namespace boost;
+
+// Inheriting from the filter class gives us a default output signal of
+// a specified signature.
+class producer_component
+ : public signals::filter<producer_component, void(const std::string &)>
+{
+public:
+ void invoke()
+ {
+ // out is the default output signal.
+ out("Hello World");
+ }
+};
+
+// If we use void instead of a signature, there will be no output signal.
+// But another benefit of inheriting from filter is that we can implement
+// signal consumer ports as overloads of operator() - later you will see that
+// that we we can access them more easily.
+class consumer_component
+ : public signals::consumer<consumer_component>
+{
+public:
+ // This is our signal consumer.
+ void operator()(const std::string &data)
+ {
+ std::cout << data << std::endl;
+ }
+};
+
+void component_component_example()
+{
+ producer_component producer;
+ consumer_component consumer;
+
+ // Because we inherited from filter, connecting is easy.
+ connect(producer, consumer);
+ producer.invoke(); // producer sends "Hello World" to consumer.
+};
+
+//]
+
+//[ component_component_component_example
+
+#include <boost/dataflow/signals/connection/operators.hpp>
+
+class filter_component
+ : public signals::filter<filter_component, void(const std::string &)>
+{
+public:
+ // This is our signal consumer. It will also produce a signal when called.
+ void operator()(const std::string &data)
+ {
+ out(data + "!");
+ }
+};
+
+void component_component_component_example()
+{
+ producer_component producer;
+ filter_component filter;
+ consumer_component consumer;
+
+ // The following is equivalent to:
+ // connect(producer, filter);
+ // connect(filter, consumer);
+ producer >>= filter >>= consumer;
+ // producer sends "Hello World" to filter, filter sends "Hello World!".
+ producer.invoke();
+}
+
+//]
+
+int main()
+{
+ signal_function_example();
+ signal_mem_fn_example();
+ component_component_example();
+ component_component_component_example();
+ return 0;
+}

Modified: sandbox/SOC/2007/signals/libs/dataflow/test/Jamfile.v2
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/Jamfile.v2 (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/Jamfile.v2 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -22,5 +22,5 @@
 run test_component.cpp ;
 
 build-project signals ;
-#build-project blueprint ;
+build-project blueprint ;
 build-project utility ;
\ No newline at end of file

Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/Jamfile.v2
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/Jamfile.v2 (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/Jamfile.v2 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -20,21 +20,21 @@
 
 run test_filter.cpp ;
 run test_storage.cpp ;
-#run test_counter.cpp ;
-#run test_junction.cpp ;
-#run test_multiplexer.cpp ;
-#run test_function.cpp ;
-#run test_chain.cpp ;
-#run test_mutex.cpp
-# /boost/thread//boost_thread/<link>static ;
-#run test_socket.cpp
-# /boost/serialization//boost_serialization/<link>static
-# /boost/thread//boost_thread/<link>static ;
-#run test_branching.cpp ;
-#run test_pull.cpp ;
-#run test_disconnect.cpp ;
-#run test_multi_type.cpp ;
-#run test_multi_args.cpp ;
-#run test_same_type.cpp ;
-#run test_multi_out.cpp ;
+run test_counter.cpp ;
+run test_junction.cpp ;
+run test_multiplexer.cpp ;
+run test_function.cpp ;
+run test_chain.cpp ;
+run test_mutex.cpp
+ /boost/thread//boost_thread/<link>static ;
+run test_socket.cpp
+ /boost/serialization//boost_serialization/<link>static
+ /boost/thread//boost_thread/<link>static ;
+run test_branching.cpp ;
+run test_pull.cpp ;
+run test_disconnect.cpp ;
+run test_multi_type.cpp ;
+run test_multi_args.cpp ;
+run test_same_type.cpp ;
+run test_multi_out.cpp ;
 

Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_disconnect.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_disconnect.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_disconnect.cpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -15,14 +15,16 @@
 {
     {
         //[ test_disconnect_unfused
- signals::storage<void ()> banger;
+ signals::storage<void ()> banger;
+ // counter will count the number of signals it receives
         signals::counter<void ()> counter;
         
- banger >>= counter;
- banger.disconnect_all_slots();
+ connect(banger, counter);
+ banger(); // this signal will pass to counter
+ disconnect_all(banger);
+ banger(); // this signal will not pass to counter
         
- banger();
- BOOST_CHECK_EQUAL(counter.count(), 0);
+ BOOST_CHECK_EQUAL(counter.count(), 1);
         //]
     }
     return 0;

Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_filter.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_filter.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_filter.cpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -14,14 +14,13 @@
 
 //[ test_filter_classes
 
-class DoublerClass : public signals::filter<DoublerClass, void(int), void(int)>
+class DoublerClass : public signals::filter<DoublerClass, void(int)>
 {
 public:
     void operator()(int x) {out(2*x);}
 };
 
-struct receiver
- : public boost::dataflow::port<boost::dataflow::signals::call_consumer<> >
+struct receiver : public signals::consumer<receiver>
 {
     receiver() : stored(0) {}
     
@@ -29,6 +28,16 @@
     {
         stored = x;
     }
+
+ int stored;
+};
+
+//]
+
+struct fused_receiver : public signals::consumer<fused_receiver>
+{
+ fused_receiver() : stored(0) {}
+
     void operator()(const fusion::vector<int> &x)
     {
         stored = fusion::at_c<0>(x);
@@ -49,8 +58,6 @@
     }
 };
 
-//]
-
 int test_main(int, char* [])
 {
     namespace df=boost::dataflow;
@@ -71,7 +78,7 @@
         //[ test_filter_fused
         
         FusedDoublerClass doubler1, doubler2;
- receiver collector;
+ fused_receiver collector;
         
         doubler1 >>= doubler2 >>= collector;
         doubler1(1);

Added: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_filter_base.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_filter_base.cpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -0,0 +1,59 @@
+// Copyright Stjepan Rajko 2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/dataflow/signals/component/filter_base.hpp>
+
+#include <boost/test/included/test_exec_monitor.hpp>
+
+using namespace boost;
+
+template<typename Signals, typename InSignatures>
+class my_filter
+ : public signals::filter_base<
+ my_filter<Signals, InSignatures>,
+ Signals,
+ InSignatures >
+{
+public:
+ my_filter(const my_filter &) {}
+ my_filter(){}
+ const my_filter &operator = (const my_filter &) {return *this;}
+
+ /// Returns the default out signal.
+ Signals &signals() const
+ { return m_signals; }
+
+protected:
+ mutable Signals m_signals;
+}; // class filter
+
+template<typename InSignatures>
+class my_filter<void, InSignatures>
+ : public signals::filter_base<
+ my_filter<void, InSignatures>,
+ void,
+ InSignatures >
+{
+public:
+ my_filter(const my_filter &) {}
+ my_filter(){}
+ const my_filter &operator = (const my_filter &) {return *this;}
+}; // class filter
+
+
+int test_main(int, char* [])
+{
+ namespace df=boost::dataflow;
+
+ my_filter<boost::signal<void()>, mpl::vector<void()> >
+ void_filter;
+
+ my_filter<void, mpl::vector<void()> >
+ input_only_filter;
+
+// fusion::vector<boost::signal<void()> > test;
+
+ return 0;
+} // int test_main(int, char* [])

Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_args.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_args.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_args.cpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -25,8 +25,7 @@
 
 //[ test_multi_args_class2
 
-class SignalMultiCollector
- : public boost::dataflow::port<boost::dataflow::signals::call_consumer<> >
+class SignalMultiCollector : public signals::consumer<SignalMultiCollector>
 {
         optional<float> last, last1, last2;
         int cnt;

Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_type.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_type.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_type.cpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -14,14 +14,9 @@
 
 //[ test_multi_type_classes
 
-class SignalIntFloatCollector : public boost::dataflow::port<
- boost::dataflow::signals::call_consumer<> >
+class SignalIntFloatCollector : public signals::consumer<SignalIntFloatCollector>
 {
- optional<int> last_int;
- optional<float> last_float;
-public:
- typedef void result_type;
-
+public:
     void operator()(int x)
     {
         last_int = x;
@@ -30,14 +25,9 @@
     {
         last_float = x;
     }
- optional<int> GetLastInt()
- {
- return last_int;
- }
- optional<float> GetLastFloat()
- {
- return last_float;
- }
+
+ optional<int> last_int;
+ optional<float> last_float;
 }; // end class SignalIntFloatCollector
 
 //]
@@ -47,19 +37,36 @@
     {
         //[ test_multi_type_unfused
         signals::storage<void ()> banger;
- signals::storage<void (int)> inter;
- inter(2);
- signals::storage<void (float)> floater;
- floater(3.3f);
+ signals::storage<void (int)> int_storage(2);
+ signals::storage<void (float)> float_storage(3.3f);
         SignalIntFloatCollector collector;
         
+ // ---Connect the dataflow network -----------------------------
+ //
+ //
+ // ,---------------. void(float)
+ // | int_storage | -------------+
+ // `--(send_slot)--' |
+ // ^ |
+ // ,--------. void() | +>,-----------.
+ // | banger | --------+ | collector |
+ // `--------' | +>`-----------'
+ // V |
+ // ,--(send_slot)--. void(float) |
+ // | float_storage | -------------+
+ // `---------------'
+ //
+ // -------------------------------------------------------------
+
         banger
- | (inter >>= collector).send_slot()
- | (floater >>= collector).send_slot();
+ | int_storage.send_slot()
+ | float_storage.send_slot();
+ int_storage >>= collector;
+ float_storage >>= collector;
         
- banger();
- BOOST_CHECK_EQUAL(collector.GetLastInt(), optional<int>(2));
- BOOST_CHECK_EQUAL(collector.GetLastFloat(), optional<float>(3.3f));
+ banger(); // this causes int_storage to output 2, and float_storage 3.3
+ BOOST_CHECK_EQUAL(collector.last_int, optional<int>(2));
+ BOOST_CHECK_EQUAL(collector.last_float, optional<float>(3.3f));
         //]
     }
     return 0;

Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_same_type.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_same_type.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_same_type.cpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -13,16 +13,9 @@
 
 //[ test_same_type_classes
 
-class Signal2VoidCounter : public signals::counter<void ()>
-{
-public:
- signals::counter<void ()> other;
-}; // end class Signal2VoidCounter
-
 class Signal2VoidInputs
- : public boost::dataflow::port<boost::dataflow::signals::call_consumer<> >
+ : public signals::consumer<Signal2VoidInputs>
 {
- int result;
 public:
     typedef void result_type;
     
@@ -39,6 +32,8 @@
         {
                 return result;
         }
+private:
+ int result;
 }; // end class Signal2VoidInputs
 
 //]
@@ -47,22 +42,12 @@
 {
     {
         //[ test_same_type_unfused
- signals::storage<void ()> banger;
- Signal2VoidCounter counter;
-
- banger
- | counter
- | counter.other;
-
- banger();
- BOOST_CHECK_EQUAL(counter.count(), 1);
- BOOST_CHECK_EQUAL(counter.other.count(), 1);
-
+ signals::storage<void()> banger;
         Signal2VoidInputs inputs;
         
         banger
- | inputs
- | signals::make_slot_selector<void ()> (&Signal2VoidInputs::AltInput, inputs);
+ | inputs // this will connect to operator()()
+ | signals::bind_mem_fn(&Signal2VoidInputs::AltInput, inputs);
         
         banger();
         BOOST_CHECK_EQUAL(inputs.GetResult(), 11);

Modified: sandbox/SOC/2007/signals/libs/dataflow/test/utility/Jamfile.v2
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/utility/Jamfile.v2 (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/utility/Jamfile.v2 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -13,3 +13,4 @@
 
 run test_forced_sequence.cpp ;
 run test_bind_mem_fn.cpp ;
+run test_bind_mem_fn_overload.cpp ;

Added: sandbox/SOC/2007/signals/libs/dataflow/test/utility/test_bind_mem_fn_overload.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/utility/test_bind_mem_fn_overload.cpp 2008-03-09 17:49:09 EDT (Sun, 09 Mar 2008)
@@ -0,0 +1,55 @@
+//[ test_bind_mem_fn
+
+// Copyright Stjepan Rajko 2008. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/dataflow/utility/bind_mem_fn_overload.hpp>
+
+#include <boost/test/included/test_exec_monitor.hpp>
+
+class sum
+{
+public:
+ sum(int base)
+ : m_base(base)
+ {}
+
+ int add(int num) const
+ { return m_base + num; }
+
+ int add(int num1, int num2) const
+
+ { return m_base + num1 + num2; }
+
+private:
+ int m_base;
+};
+
+int test_main(int, char* [])
+{
+ using namespace boost;
+ using boost::dataflow::utility::bind_mem_fn_overload;
+ using boost::dataflow::utility::bind_mem_fn_const_overload;
+
+ sum test_sum(1);
+
+ boost::function<int(int)> fun1 = bind_mem_fn_const_overload<int(int)>(&sum::add, test_sum);
+ boost::function<int(int, int)> fun2 = bind_mem_fn_const_overload<int(int, int)>(&sum::add, test_sum);
+
+ BOOST_CHECK_EQUAL(fun1(2), 3);
+ BOOST_CHECK_EQUAL(fun2(2, 3), 6);
+
+ const sum const_test_sum(2);
+
+ boost::function<int(int)> cfun1 = bind_mem_fn_overload<int(int)>(&sum::add, const_test_sum);
+ boost::function<int(int, int)> cfun2 = bind_mem_fn_overload<int(int, int)>(&sum::add, const_test_sum);
+
+ BOOST_CHECK_EQUAL(cfun1(2), 4);
+ BOOST_CHECK_EQUAL(cfun2(2, 3), 7);
+
+ return 0;
+} // int test_main(int, char* [])
+
+//]
\ No newline at end of file


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk