|
Boost-Commit : |
From: stipe_at_[hidden]
Date: 2007-12-04 01:17:14
Author: srajko
Date: 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
New Revision: 41674
URL: http://svn.boost.org/trac/boost/changeset/41674
Log:
* Move functionality from port related concepts to the component concepts.
* Adapt the Dataflow.Signals layer and tests (most of the rest still broken).
* Start adding Doxygen-generated support layer reference.
Added:
sandbox/SOC/2007/signals/boost/dataflow/support/default_port_provider.hpp (contents, props changed)
sandbox/SOC/2007/signals/boost/dataflow/support/detail/
sandbox/SOC/2007/signals/boost/dataflow/support/detail/make_specializable_operation.hpp (contents, props changed)
sandbox/SOC/2007/signals/boost/dataflow/support/fusion_component.hpp (contents, props changed)
sandbox/SOC/2007/signals/boost/dataflow/support/port/category.hpp
- copied, changed from r41445, /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp
sandbox/SOC/2007/signals/boost/dataflow/support/port/default_port_provider.hpp
- copied, changed from r41445, /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp
sandbox/SOC/2007/signals/boost/dataflow/support/port/port.hpp
- copied, changed from r41445, /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp
sandbox/SOC/2007/signals/boost/dataflow/support/port/port_adapter.hpp (contents, props changed)
sandbox/SOC/2007/signals/boost/dataflow/support/port/traits.hpp
- copied, changed from r41445, /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp
sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/
- copied from r41445, /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/
sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/binary_operable.qbk
- copied, changed from r41673, /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/binary_operable.qbk
sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/component.qbk
- copied, changed from r41673, /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/component.qbk
sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/concepts.qbk
- copied, changed from r41673, /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/concepts.qbk
sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/port.qbk
- copied, changed from r41673, /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/port.qbk
sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/unary_operable.qbk
- copied, changed from r41673, /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/unary_operable.qbk
sandbox/SOC/2007/signals/libs/dataflow/doc/support/support.qbk (contents, props changed)
sandbox/SOC/2007/signals/libs/dataflow/test/my_producer_consumer_operations.hpp (contents, props changed)
Removed:
sandbox/SOC/2007/signals/boost/dataflow/support/common.hpp
sandbox/SOC/2007/signals/boost/dataflow/support/filter.hpp
sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/
Text files modified:
sandbox/SOC/2007/signals/boost/dataflow/blueprint/get_port.hpp | 4
sandbox/SOC/2007/signals/boost/dataflow/connection/port_map.hpp | 43 +------
sandbox/SOC/2007/signals/boost/dataflow/signals/component/chain.hpp | 13 +
sandbox/SOC/2007/signals/boost/dataflow/signals/component/condition.hpp | 12 +
sandbox/SOC/2007/signals/boost/dataflow/signals/component/counter.hpp | 23 ++--
sandbox/SOC/2007/signals/boost/dataflow/signals/component/detail/generic_template.hpp | 38 +++---
sandbox/SOC/2007/signals/boost/dataflow/signals/component/filter.hpp | 106 ++++++++++++-------
sandbox/SOC/2007/signals/boost/dataflow/signals/component/filter_base.hpp | 52 ++++----
sandbox/SOC/2007/signals/boost/dataflow/signals/component/function.hpp | 16 +-
sandbox/SOC/2007/signals/boost/dataflow/signals/component/junction.hpp | 22 ++--
sandbox/SOC/2007/signals/boost/dataflow/signals/component/multiplexer.hpp | 44 +++----
sandbox/SOC/2007/signals/boost/dataflow/signals/component/mutex.hpp | 8
sandbox/SOC/2007/signals/boost/dataflow/signals/component/socket_receiver.hpp | 9
sandbox/SOC/2007/signals/boost/dataflow/signals/component/storage.hpp | 62 ++++------
sandbox/SOC/2007/signals/boost/dataflow/signals/component/timed_generator.hpp | 8
sandbox/SOC/2007/signals/boost/dataflow/signals/connection/operators.hpp | 91 ++-------------
sandbox/SOC/2007/signals/boost/dataflow/signals/connection/slot_selector.hpp | 16 --
sandbox/SOC/2007/signals/boost/dataflow/signals/support.hpp | 70 ++++--------
sandbox/SOC/2007/signals/boost/dataflow/support.hpp | 2
sandbox/SOC/2007/signals/boost/dataflow/support/binary_operation.hpp | 101 +++++-------------
sandbox/SOC/2007/signals/boost/dataflow/support/complemented_port.hpp | 19 +-
sandbox/SOC/2007/signals/boost/dataflow/support/component.hpp | 177 +++++++++++++++++++++++++++-----
sandbox/SOC/2007/signals/boost/dataflow/support/keyed_port.hpp | 69 ++++--------
sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp | 196 -----------------------------------
sandbox/SOC/2007/signals/boost/dataflow/support/port/category.hpp | 196 +++--------------------------------
sandbox/SOC/2007/signals/boost/dataflow/support/port/default_port_provider.hpp | 218 ++++++---------------------------------
sandbox/SOC/2007/signals/boost/dataflow/support/port/detail/port_traits_sequence.hpp | 22 +--
sandbox/SOC/2007/signals/boost/dataflow/support/port/port.hpp | 205 +++++--------------------------------
sandbox/SOC/2007/signals/boost/dataflow/support/port/traits.hpp | 202 +++++++++++++++----------------------
sandbox/SOC/2007/signals/boost/dataflow/support/reflective_component.hpp | 14 +-
sandbox/SOC/2007/signals/boost/dataflow/support/tags.hpp | 45 ++++++-
sandbox/SOC/2007/signals/boost/dataflow/support/unary_operation.hpp | 67 ++---------
sandbox/SOC/2007/signals/boost/dataflow/templates/binary_operation.hpp | 11 +
sandbox/SOC/2007/signals/boost/dataflow/templates/operator.hpp | 61 +++-------
sandbox/SOC/2007/signals/libs/dataflow/build/xcodeide/signal_network.xcodeproj/project.pbxproj | 96 +++++++++++-----
sandbox/SOC/2007/signals/libs/dataflow/doc/Jamfile.v2 | 59 +++++----
sandbox/SOC/2007/signals/libs/dataflow/doc/components.qbk | 10
sandbox/SOC/2007/signals/libs/dataflow/doc/dataflow.qbk | 85 ++++++++------
sandbox/SOC/2007/signals/libs/dataflow/doc/future.qbk | 4
sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/distributed_example.qbk | 16 +-
sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gil_example.qbk | 2
sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/introduction.qbk | 13 +
sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/vtk_example.qbk | 48 ++++----
sandbox/SOC/2007/signals/libs/dataflow/doc/phoenix/concepts.qbk | 26 ++--
sandbox/SOC/2007/signals/libs/dataflow/doc/rationale.qbk | 8
sandbox/SOC/2007/signals/libs/dataflow/doc/signals/components.qbk | 70 ++++++------
sandbox/SOC/2007/signals/libs/dataflow/doc/signals/concepts.qbk | 38 +++---
sandbox/SOC/2007/signals/libs/dataflow/doc/signals/connections.qbk | 12 +-
sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/binary_operable.qbk | 20 +-
sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/component.qbk | 32 ++--
sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/concepts.qbk | 20 +-
sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/port.qbk | 181 +++++++++++++++++---------------
sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/unary_operable.qbk | 4
sandbox/SOC/2007/signals/libs/dataflow/example/Jamfile.v2 | 10
sandbox/SOC/2007/signals/libs/dataflow/example/VTK/vtk_dataflow_support.hpp | 6
sandbox/SOC/2007/signals/libs/dataflow/example/example.cpp | 8 +
sandbox/SOC/2007/signals/libs/dataflow/test/Jamfile.v2 | 4
sandbox/SOC/2007/signals/libs/dataflow/test/my_producer_consumer.hpp | 2
sandbox/SOC/2007/signals/libs/dataflow/test/signals/Jamfile.v2 | 2
sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_branching.cpp | 11 +
sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_chain.cpp | 4
sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_connect.cpp | 17 ++
sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_disconnect.cpp | 38 ------
sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_filter.cpp | 51 ++++++---
sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_junction.cpp | 8
sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_args.cpp | 2
sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_out.cpp | 2
sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_pull.cpp | 2
sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_storage.cpp | 9 +
sandbox/SOC/2007/signals/libs/dataflow/test/test_binary_op.cpp | 54 ++-------
sandbox/SOC/2007/signals/libs/dataflow/test/test_component.cpp | 50 +++++++-
sandbox/SOC/2007/signals/libs/dataflow/test/test_keyed_port.cpp | 24 ++--
sandbox/SOC/2007/signals/libs/dataflow/test/test_port.cpp | 62 +++++------
sandbox/SOC/2007/signals/libs/dataflow/test/test_reflective_component.cpp | 6
sandbox/SOC/2007/signals/libs/dataflow/test/test_unary_op.cpp | 15 ++
75 files changed, 1335 insertions(+), 2038 deletions(-)
Modified: sandbox/SOC/2007/signals/boost/dataflow/blueprint/get_port.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/blueprint/get_port.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/blueprint/get_port.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -30,11 +30,11 @@
typename component_traits_of<Component>::type::ports,
Case::value
>::type,
- typename get_component_port_result_type<
+ typename get_port_result_type<
mpl::int_<Case::value>,
Component
>::type
- >(get_component_port<mpl::int_<Case::value>, Component >(c))); \
+ >(get_port<mpl::int_<Case::value>, Component >(c))); \
}
get_port_case(Component& c, std::auto_ptr<port> &ret) : c(c), ret(ret)
{}
Modified: sandbox/SOC/2007/signals/boost/dataflow/connection/port_map.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/connection/port_map.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/connection/port_map.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -18,44 +18,21 @@
namespace boost { namespace dataflow {
-template<typename Mechanism, typename PortCategory>
+template<typename PortCategory, typename Tag=default_tag>
struct fusion_map_port
- : public port_traits<Mechanism, PortCategory, concepts::keyed_port> {};
+ : public port_traits<PortCategory, concepts::keyed_port, Tag> {};
-template<typename Mechanism, typename PortCategory, typename T>
+template<typename PortCategory, typename T, typename Tag=default_tag>
class port_map
{
- struct get_proxied_object
- {
- typename port_map::proxy_port_for & operator()(const port_map &map)
- {
- return boost::fusion::front(map.t).second;
- }
- };
-// typedef typename boost::fusion::result_of::value_at_c<T, 0>::type::second_type
-// proxy_consumer_for;
- typedef
- typename boost::remove_reference<
- typename boost::remove_const<
- typename boost::remove_reference<
- typename boost::fusion::result_of::front<T>::type
- >::type
- >::type::second_type
- >::type proxy_port_for;
+
public:
- typedef Mechanism mechanism_type;
- typedef PortCategory port_category_type;
typedef T map_type;
port_map(const T& t) : t(t) {}
map_type &map() const {return t;}
- typedef fusion_map_port<Mechanism, PortCategory> port_traits;
- typedef mutable_proxy_port<
- Mechanism,
- typename PortCategory::complement,
- proxy_port_for,
- get_proxied_object> proxy_port_traits;
+ typedef fusion_map_port<PortCategory, Tag> port_traits;
private:
mutable map_type t;
@@ -63,17 +40,17 @@
namespace extension
{
- template<typename Mechanism, typename PortCategory, typename KeyTag>
- struct get_keyed_port_impl<fusion_map_port<Mechanism, PortCategory>, KeyTag>
+ template<typename PortCategory, typename Tag, typename KeyPortTraits>
+ struct get_keyed_port_impl<fusion_map_port<PortCategory, Tag>, KeyPortTraits>
{
- template<typename Args> struct result;
+ template<typename FArgs> struct result;
template<typename F, typename KeyedPort>
struct result<F(KeyedPort &)>
{
typedef typename boost::fusion::result_of::at_key<
typename KeyedPort::map_type,
- KeyTag
+ KeyPortTraits
>::type type;
};
@@ -82,7 +59,7 @@
operator()(KeyedPort &port)
{
return boost::fusion::at_key<
- KeyTag
+ KeyPortTraits
>(port.map());
}
};
Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/chain.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/chain.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/chain.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -16,10 +16,13 @@
namespace boost { namespace signals {
+template<typename Signature, typename T>
+class chain;
+
namespace detail
{
template<typename Signature, typename T>
- class chain_impl : public filter_base<typename T::signal_type>
+ class chain_impl : public filter_base<chain<Signature, T>, typename T::signal_type>
{
protected:
typedef typename boost::function_types::parameter_types<Signature>::type parameter_types;
@@ -49,13 +52,13 @@
return boost::fusion::fused<T &>(components[0])(vec_par);
}
/// The default signal coming out of the chain is the default signal of the last component in the chain.
- typename T::signal_type &default_signal() const
+/* typename T::signal_type &default_signal() const
{
return components[size-1].default_signal();
- }
- typename T::signal_type &get_proxied_producer() const
+ }*/
+ typename T::signal_type &default_signal() const
{
- return boost::dataflow::get_port<dataflow::signals::mechanism, dataflow::ports::producer>(components[size-1]);
+ return boost::dataflow::get_default_port<dataflow::directions::outgoing, dataflow::signals::connect_mechanism, dataflow::signals::tag >(components[size-1]);
}
private:
void initialize(size_t copies, T *component=NULL)
Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/condition.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/condition.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/condition.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -37,14 +37,16 @@
*/
template<typename Signature,
typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
- typename Combiner = boost::last_value<typename boost::function_types::result_type<Signature>::type>,
- typename Group = int,
- typename GroupCompare = std::less<Group>
+ typename SignalArgs=typename default_signal_args<Signature>::type
>
class condition : public
- applicator<detail::cond_and_mutex, detail::notify_all, Signature, OutSignal, Combiner, Group, GroupCompare>
+ applicator<
+ condition<Signature, OutSignal, SignalArgs>,
+ detail::cond_and_mutex, detail::notify_all, Signature, OutSignal, SignalArgs>
{
- typedef applicator<detail::cond_and_mutex, detail::notify_all, Signature, OutSignal, Combiner, Group, GroupCompare> base_type;
+ typedef applicator<
+ condition<Signature, OutSignal, SignalArgs>,
+ detail::cond_and_mutex, detail::notify_all, Signature, OutSignal, SignalArgs> base_type;
public:
/** Initializes the internal counter to 0.
*/
Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/counter.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/counter.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/counter.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -27,18 +27,17 @@
counter is an applicator with a postincrement application and default member of type volatile int.
\param T Type of the internal counter variable.
*/
-template<typename Signature,
-typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
-typename T=int,
-typename Combiner = boost::last_value<typename boost::function_types::result_type<Signature>::type>,
-typename Group = int,
-typename GroupCompare = std::less<Group> >
-class counter : public applicator<T, detail::postincrement<T>, Signature, OutSignal, Combiner, Group, GroupCompare>
+template<
+ typename Signature,
+ typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
+ typename T=int,
+ typename SignalArgs=typename default_signal_args<Signature>::type
+ >
+class counter : public applicator<
+ counter<Signature, OutSignal, T, SignalArgs>,
+ T, detail::postincrement<T>, Signature, OutSignal, SignalArgs>
{
-protected:
- typedef applicator<T, detail::postincrement<T>, Signature, OutSignal, Combiner, Group, GroupCompare> base_type;
public:
-
/** Initializes the internal counter to 0.
*/
counter()
@@ -47,12 +46,12 @@
/** Sets the internal counter to 0.
*/
void reset()
- { base_type::member = 0; }
+ { counter::member = 0; }
/** \return The internal signal counter.
*/
T count() const
- { return base_type::member; }
+ { return counter::member; }
};
} } // namespace boost::signals
Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/detail/generic_template.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/detail/generic_template.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/detail/generic_template.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -25,22 +25,21 @@
namespace detail
{
- /** \brief fused implementation of conditional modifier
- */
- template<
+template<
+ typename Derived,
typename SIGNAL_NETWORK_GENERIC_TYPENAME,
#ifdef SIGNAL_NETWORK_GENERIC_TYPENAME2
typename SIGNAL_NETWORK_GENERIC_TYPENAME2,
#endif
typename Signature,
- typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
- typename Combiner = boost::last_value<typename boost::function_types::result_type<Signature>::type>,
- typename Group = int,
- typename GroupCompare = std::less<Group> >
- class BOOST_PP_CAT(SIGNAL_NETWORK_GENERIC_CLASS,_impl) : public filter<Signature, typename OutSignal::filter_type, Combiner, Group, GroupCompare>
+ typename OutSignal,
+ typename SignalArgs
+ >
+class BOOST_PP_CAT(SIGNAL_NETWORK_GENERIC_CLASS,_impl)
+ : public filter<Derived, Signature, typename OutSignal::filter_type, SignalArgs>
{
protected:
- typedef filter<Signature, typename OutSignal::filter_type, Combiner, Group, GroupCompare> base_type;
+ typedef filter<Derived, Signature, typename OutSignal::filter_type, SignalArgs> base_type;
public:
SIGNAL_NETWORK_GENERIC_CLASS_IMPL() {}
@@ -65,35 +64,34 @@
};
}
-/** \brief Passes the incoming signal to a member modifier, and optionally forwards the returned result.
-*/
template<
-typename SIGNAL_NETWORK_GENERIC_TYPENAME,
+ typename Derived,
+ typename SIGNAL_NETWORK_GENERIC_TYPENAME,
#ifdef SIGNAL_NETWORK_GENERIC_TYPENAME2
-typename SIGNAL_NETWORK_GENERIC_TYPENAME2,
+ typename SIGNAL_NETWORK_GENERIC_TYPENAME2,
#endif
-typename Signature,
-typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
-typename Combiner = boost::last_value<typename boost::function_types::result_type<Signature>::type>,
-typename Group = int,
-typename GroupCompare = std::less<Group> >
+ typename Signature,
+ typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
+ typename SignalArgs=typename default_signal_args<Signature>::type >
class SIGNAL_NETWORK_GENERIC_CLASS
: public boost::fusion::SIGNAL_NETWORK_GENERIC_UNFUSED_BASE
<detail::SIGNAL_NETWORK_GENERIC_CLASS_IMPL<
+ Derived,
SIGNAL_NETWORK_GENERIC_TYPENAME,
#ifdef SIGNAL_NETWORK_GENERIC_TYPENAME2
SIGNAL_NETWORK_GENERIC_TYPENAME2,
#endif
- Signature, OutSignal, Combiner, Group, GroupCompare>,
+ Signature, OutSignal, SignalArgs>,
typename boost::function_types::parameter_types<Signature>::type >
{
typedef boost::fusion::SIGNAL_NETWORK_GENERIC_UNFUSED_BASE
<detail::SIGNAL_NETWORK_GENERIC_CLASS_IMPL<
+ Derived,
SIGNAL_NETWORK_GENERIC_TYPENAME,
#ifdef SIGNAL_NETWORK_GENERIC_TYPENAME2
SIGNAL_NETWORK_GENERIC_TYPENAME2,
#endif
- Signature, OutSignal, Combiner, Group, GroupCompare>,
+ Signature, OutSignal, SignalArgs>,
typename boost::function_types::parameter_types<Signature>::type > base_type;
public:
SIGNAL_NETWORK_GENERIC_CLASS() {}
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -14,9 +14,7 @@
#include <boost/fusion/include/as_vector.hpp>
#include <boost/fusion/adapted/mpl.hpp>
-#ifndef SIGNAL_NETWORK_DEFAULT_OUT
#define SIGNAL_NETWORK_DEFAULT_OUT unfused
-#endif
namespace boost { namespace signals {
@@ -44,30 +42,62 @@
typedef fused filter_type;
};
+template<
+ typename Combiner,
+ typename Group=int,
+ typename GroupCompare=std::less<Group> >
+struct signal_args
+{
+ typedef Combiner combiner_type;
+ typedef Group group_type;
+ typedef GroupCompare group_compare_type;
+};
+
+template<typename Signature,
+ typename Combiner = boost::last_value<typename boost::function_traits<Signature>::result_type>,
+ typename Group = int,
+ typename GroupCompare = std::less<Group> >
+struct default_signal_args
+{
+ typedef signal_args<Combiner, Group, GroupCompare> type;
+};
+
+template<typename Signature, typename SignalArgs>
+struct signal_from_args
+{
+ typedef boost::signal<
+ Signature,
+ typename SignalArgs::combiner_type,
+ typename SignalArgs::group_type,
+ typename SignalArgs::group_compare_type
+ > type;
+};
+
/// Provides a basis for filters (components that receive and send a signal).
/** \param Signature The signature of the signal being sent out.
Use this class as a base class for classes that produce a signal
of a particular signature.
*/
-template<typename Signature,
-typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
-typename Combiner = boost::last_value<typename boost::function_traits<Signature>::result_type>,
-typename Group = int,
-typename GroupCompare = std::less<Group>
+template<
+ typename Derived,
+ typename Signature,
+ typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
+ typename SignalArgs=typename default_signal_args<Signature>::type
>
class filter;
/** \brief Unfused version of the filter class
*/
-template<typename Signature, typename Combiner, typename Group, typename GroupCompare>
-class filter<Signature, unfused, Combiner, Group, GroupCompare>
- : public filter_base<boost::signal<Signature, Combiner, Group, GroupCompare> >
+template<typename Derived, typename Signature, typename SignalArgs>
+class filter<Derived, Signature, unfused, SignalArgs>
+ : public filter_base<
+ Derived,
+ typename signal_from_args<Signature, SignalArgs>::type >
{
public:
// the type of the signal
- typedef boost::signal<Signature, Combiner, Group, GroupCompare> signal_type;
-
+ typedef typename signal_from_args<Signature, SignalArgs>::type signal_type;
// the signature of the output signal
typedef Signature signature_type;
@@ -76,7 +106,7 @@
const filter &operator = (const filter &) {return *this;}
/// Returns the default out signal.
- signal_type &get_proxied_producer() const
+ signal_type &default_signal() const
{ return out; }
/// Disconnects all slots connected to the signals::filter.
@@ -85,63 +115,61 @@
mutable signal_type out;
}; // class filter
+
/** \brief Combined version of the filter class
*/
-template<typename Signature, typename Combiner, typename Group, typename GroupCompare>
-class filter<Signature, combined, Combiner, Group, GroupCompare>
-: public filter<Signature, unfused, Combiner, Group, GroupCompare>
+template<typename Derived, typename Signature, typename SignalArgs>
+class filter<Derived, Signature, combined, SignalArgs>
+: public filter<Derived, Signature, unfused, SignalArgs>
{
- typedef filter<Signature, unfused, Combiner, Group, GroupCompare> base_type;
public:
- filter() : fused_out(base_type::out) {}
- filter(const filter &) : fused_out(base_type::out){}
+ filter() : fused_out(filter::out) {}
+ filter(const filter &) : fused_out(filter::out){}
const filter &operator = (const filter &) {return *this;}
-
- typedef typename base_type::signature_type signature_type;
- typedef typename base_type::signal_type signal_type;
typedef typename boost::function_types::parameter_types<Signature>::type parameter_types;
typedef typename boost::fusion::result_of::as_vector<parameter_types>::type parameter_vector;
- typedef typename signal_type::result_type fused_signature_type (const parameter_vector &);
+ typedef typename filter::signal_type::result_type fused_signature_type (const parameter_vector &);
protected:
- boost::signal<fused_signature_type, Combiner, Group, GroupCompare> fusion_out;
- boost::fusion::fused<typename base_type::signal_type const &> fused_out;
+ typename signal_from_args<fused_signature_type, SignalArgs>::type fusion_out;
+ boost::fusion::fused<typename filter::signal_type const &> fused_out;
}; // class filter
namespace detail
{
- template<typename Signature, typename Combiner, typename Group, typename GroupCompare>
+ template<typename Signature, typename SignalArgs=typename default_signal_args<Signature>::type>
struct fused_signal_type
{
typedef typename boost::function_types::parameter_types<Signature>::type parameter_types;
typedef typename boost::fusion::result_of::as_vector<parameter_types>::type parameter_vector;
- typedef typename Combiner::result_type signature_type (const parameter_vector &);
- typedef typename Combiner::result_type fused_signature_type (const parameter_vector &);
- typedef boost::signal<signature_type, Combiner, Group, GroupCompare> signal_type;
+ typedef typename SignalArgs::combiner_type::result_type signature_type (const parameter_vector &);
+ typedef typename SignalArgs::combiner_type::result_type fused_signature_type (const parameter_vector &);
+ typedef typename signal_from_args<fused_signature_type, SignalArgs>::type signal_type;
};
}
/** \brief Fused version of the filter class
*/
-template<typename Signature, typename Combiner, typename Group, typename GroupCompare>
-class filter<Signature, fused, Combiner, Group, GroupCompare>
-: public filter_base<typename detail::fused_signal_type<Signature, Combiner, Group, GroupCompare>::signal_type>
+template<typename Derived, typename Signature, typename SignalArgs>
+class filter<Derived, Signature, fused, SignalArgs>
+: public filter_base<
+ Derived,
+ typename detail::fused_signal_type<Signature, SignalArgs>::signal_type>
{
public:
filter(const filter &) {}
filter(){}
const filter &operator = (const filter &) {return *this;}
- typedef typename boost::function_types::parameter_types<Signature>::type parameter_types;
- typedef typename boost::fusion::result_of::as_vector<parameter_types>::type parameter_vector;
- typedef typename Combiner::result_type signature_type (const parameter_vector &);
- typedef typename Combiner::result_type fused_signature_type (const parameter_vector &);
- typedef boost::signal<signature_type, Combiner, Group, GroupCompare> signal_type;
- typedef signal_type proxy_producer_for;
+ typedef typename detail::fused_signal_type<Signature, SignalArgs>::parameter_types parameter_types;
+ typedef typename detail::fused_signal_type<Signature, SignalArgs>::parameter_vector parameter_vector;
+ typedef typename detail::fused_signal_type<Signature, SignalArgs>::signature_type signature_type;
+ typedef typename detail::fused_signal_type<Signature, SignalArgs>::fused_signature_type fused_signature_type;
+ typedef typename detail::fused_signal_type<Signature, SignalArgs>::signal_type signal_type;
/// Returns the default out signal.
- proxy_producer_for &get_proxied_producer() const
+ signal_type &default_signal() const
{ return fused_out; }
/// Disconnects all slots connected to the signals::filter.
void disconnect_all_slots() {fused_out.disconnect_all_slots();}
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -7,41 +7,43 @@
#define SIGNAL_NETWORK_FILTER_BASE_HPP
#include <boost/dataflow/signals/support.hpp>
+#include <boost/dataflow/support/fusion_component.hpp>
+#include <boost/dataflow/support/port/port_adapter.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-#include <boost/utility/enable_if.hpp>
#include <boost/signal.hpp>
-#ifdef _THREAD_SAFE_SIGNAL_HPP
-#define SIGNAL_NETWORK_THREAD_SAFE
-#else
-#define SIGNAL_NETWORK_TRACKABLE
-#endif
namespace boost { namespace signals {
-template<typename Signal>
-class filter_base
-#ifdef SIGNAL_NETWORK_TRACKABLE
-: public boost::signals::trackable
-#endif
+template<typename Filter, typename Signal>
+struct filter_component_traits
+ : public dataflow::fusion_component_traits<
+ fusion::vector<
+ Signal &,
+ const dataflow::port_adapter<Filter, dataflow::signals::call_consumer, dataflow::signals::tag> >,
+ mpl::map<
+ mpl::pair<dataflow::default_port_selector
+ <dataflow::directions::outgoing, dataflow::signals::connect_mechanism>,
+ mpl::int_<0> >,
+ mpl::pair<dataflow::default_port_selector
+ <dataflow::directions::incoming, dataflow::signals::connect_mechanism>,
+ mpl::int_<1> >
+ > >
+{};
+
+template<typename Filter, typename Signal>
+class filter_base : public dataflow::component<filter_component_traits<Filter, Signal> >
{
public:
- struct get_proxied_object
+// using dataflow::component<filter_component_traits<Filter, Signal> >::component_traits;
+
+ template<typename Component>
+ typename filter_base::component_traits::port_result_types get_ports(Component &component)
{
- template<typename T>
- Signal &operator()(T &t)
- {
- return t.get_proxied_producer();
- }
+ return typename filter_base::component_traits::port_result_types(
+ component.default_signal(),
+ component);
};
- typedef boost::dataflow::signals::call_consumer port_traits;
- typedef boost::dataflow::mutable_proxy_port<
- boost::dataflow::signals::mechanism,
- boost::dataflow::ports::producer,
- Signal,
- get_proxied_object
- > proxy_port_traits;
};
} }
Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/function.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/function.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/function.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -42,17 +42,21 @@
The signals::function object will receive signals of signature void(<i>function arguments</i>),
and send signals of signature void(<i>function return type</i>).
*/
-template<typename Signature,
+template<
+ typename Signature,
typename FunctionSignature,
typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
- typename Combiner = boost::last_value<void>,
- typename Group = int,
- typename GroupCompare = std::less<Group>
+ typename SignalArgs=typename default_signal_args<Signature>::type
>
-class function : public modifier<detail::function_adapter<FunctionSignature, Signature>, Signature, OutSignal, Combiner, Group, GroupCompare>
+class function
+ : public modifier<
+ function<Signature, FunctionSignature, OutSignal, SignalArgs>,
+ detail::function_adapter<FunctionSignature, Signature>, Signature, OutSignal, SignalArgs>
{
public:
- typedef modifier<detail::function_adapter<FunctionSignature, Signature>, Signature, OutSignal, Combiner, Group, GroupCompare> base_type;
+ typedef modifier<
+ function<Signature, FunctionSignature, OutSignal, SignalArgs>,
+ detail::function_adapter<FunctionSignature, Signature>, Signature, OutSignal, SignalArgs> base_type;
function(const boost::function<FunctionSignature> &f) : base_type(f) {}
};
Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/junction.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/junction.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/junction.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -26,30 +26,30 @@
also be disabled to stop the flow of signals.
junction is a conditional with Condition identity and Member volatile bool
*/
-template<typename Signature,
+template<
+ typename Signature,
typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
- typename Combiner = boost::last_value<typename boost::function_types::result_type<Signature>::type>,
- typename Group = int,
- typename GroupCompare = std::less<Group>
+ typename SignalArgs=typename default_signal_args<Signature>::type
>
-class junction : public conditional<volatile bool, detail::identity<bool>, Signature, OutSignal, Combiner, Group, GroupCompare>
+class junction
+ : public conditional<
+ junction<Signature, OutSignal, SignalArgs>,
+ volatile bool, detail::identity<bool>, Signature, OutSignal, SignalArgs>
{
-protected:
- typedef conditional<volatile bool, detail::identity<bool>, Signature, OutSignal, Combiner, Group, GroupCompare> base_type;
public:
/** Initializes the junction to be enabled.
*/
- junction(bool enabled=true)
+ junction(bool opened=true)
{
- enable();
+ junction::member=opened;
}
/** Enables the junction (signals will be forwarded).
*/
- void enable() {base_type::member = true;}
+ void open() {junction::member = true;}
/** Disables the junction (signals will not be forwarded).
*/
- void disable() {base_type::member = false;}
+ void close() {junction::member = false;}
};
} } // namespace boost::signals
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -15,6 +15,11 @@
#include <functional>
+#ifndef BOOST_MSVC
+#define BOOST_TEMPLATE_OPERATOR template operator
+#else
+#define BOOST_TEMPLATE_OPERATOR operator
+#endif
namespace boost { namespace signals {
@@ -22,18 +27,17 @@
also be disabled to stop the flow of signals.
junction is a conditional with Condition identity and Member volatile bool
*/
-template<typename Signature,
+template<
+ typename Signature,
typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
- typename Combiner = boost::last_value<typename boost::function_types::result_type<Signature>::type>,
- typename Group = int,
- typename GroupCompare = std::less<Group>
+ typename SignalArgs=typename default_signal_args<Signature>::type
>
-class multiplexer : public conditional_templated<int, std::equal_to<int>, Signature, OutSignal, Combiner, Group, GroupCompare>
+class multiplexer
+ : public conditional_templated<
+ multiplexer<Signature, OutSignal, SignalArgs>,
+ int, std::equal_to<int>, Signature, OutSignal, SignalArgs>
{
-protected:
- typedef conditional_templated<int, std::equal_to<int>, Signature, OutSignal, Combiner, Group, GroupCompare> base_type;
public:
-
/** Initializes the multiplexer to forward the specified input.
*/
multiplexer(int selector=0)
@@ -41,7 +45,7 @@
/** Enables the junction (signals will be forwarded).
*/
void select(int selector)
- { base_type::member = selector; }
+ { multiplexer::member = selector; }
slot_selector<void(int), multiplexer>
select_slot()
@@ -52,29 +56,19 @@
typedef boost::fusion::map<
boost::fusion::pair<boost::dataflow::signals::producer<Signature>, slot_selector<Signature, multiplexer> >,
boost::fusion::pair<
- boost::dataflow::signals::producer<typename base_type::fused_signature_type>,
- slot_selector<typename base_type::fused_signature_type, multiplexer>
+ boost::dataflow::signals::producer<typename multiplexer::fused_signature_type>,
+ slot_selector<typename multiplexer::fused_signature_type, multiplexer>
>
> slot_map;
template<int N>
- boost::dataflow::port_map<boost::dataflow::signals::mechanism, boost::dataflow::ports::consumer, slot_map>
- //slot_selector<Signature, multiplexer>
+ boost::dataflow::port_map<boost::dataflow::ports::consumer, slot_map, boost::dataflow::signals::tag>
slot()
{
- //return make_slot_selector<Signature> (&multiplexer::template operator()<N>, *this);
return slot_map
- (make_slot_selector<Signature> (&multiplexer::
-#ifndef BOOST_MSVC
- template
-#endif
- operator()<N>, *this),
- make_slot_selector<typename base_type::fused_signature_type>
- (&multiplexer::
-#ifndef BOOST_MSVC
- template
-#endif
- operator()<N>, *this));
+ (make_slot_selector<Signature> (&multiplexer::BOOST_TEMPLATE_OPERATOR()<N>, *this),
+ make_slot_selector<typename multiplexer::fused_signature_type>
+ (&multiplexer::BOOST_TEMPLATE_OPERATOR()<N>, *this));
}
};
Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/mutex.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/mutex.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/mutex.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -15,12 +15,12 @@
*/
template<typename Signature,
typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
- typename Combiner = boost::last_value<typename boost::function_types::result_type<Signature>::type>,
- typename Group = int,
- typename GroupCompare = std::less<Group>
+ typename SignalArgs=typename default_signal_args<Signature>::type
>
class mutex : public
- instantiator<boost::mutex, boost::mutex::scoped_lock, Signature, OutSignal, Combiner, Group, GroupCompare>
+ instantiator<
+ mutex<Signature, OutSignal, SignalArgs>,
+ boost::mutex, boost::mutex::scoped_lock, Signature, OutSignal, SignalArgs>
{
};
Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/socket_receiver.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/socket_receiver.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/socket_receiver.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -25,12 +25,11 @@
*/
template<typename Signature,
typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
- typename Combiner = boost::last_value<typename boost::function_types::result_type<Signature>::type>,
- typename Group = int,
- typename GroupCompare = std::less<Group> >
-class socket_receiver : public storage<Signature, OutSignal, Combiner, Group, GroupCompare>
+ typename SignalArgs=typename default_signal_args<Signature>::type
+>
+class socket_receiver : public storage<Signature, OutSignal, SignalArgs>
{
- typedef storage<Signature, OutSignal, Combiner, Group, GroupCompare> base_type;
+ typedef storage<Signature, OutSignal, SignalArgs> base_type;
public:
/// Initializes the socket_sender to use the provided socket.
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -6,36 +6,26 @@
#ifndef BOOST_DATAFLOW_SIGNALS_COMPONENT_STORAGE_HPP
#define BOOST_DATAFLOW_SIGNALS_COMPONENT_STORAGE_HPP
+#include <boost/dataflow/connection/port_map.hpp>
+#include <boost/dataflow/detail/make_ref.hpp>
#include <boost/dataflow/signals/component/conditional_modifier.hpp>
#include <boost/dataflow/signals/component/detail/storable.hpp>
#include <boost/dataflow/signals/connection/slot_selector.hpp>
-#include <boost/dataflow/connection/port_map.hpp>
+#include <boost/mpl/map.hpp>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/view/transform_view.hpp>
#include <boost/fusion/container/map.hpp>
-#include <boost/dataflow/detail/make_ref.hpp>
namespace boost { namespace signals {
- template<typename Signature,
- typename OutSignal,
- typename Combiner,
- typename Group,
- typename GroupCompare
->
+template<typename Signature, typename OutSignal, typename SignalArgs>
class storage;
-template<typename T>
+template<typename Storage>
struct storage_component_traits
- : public dataflow::component_traits<
- mpl::vector<
- dataflow::signals::producer<T>, // outgoing signal
- dataflow::signals::consumer<T>, // incoming signal
- dataflow::signals::extract_producer<T>, // outgoing extraction port
- dataflow::signals::extract_consumer<T> // incoming extraction port
- > >
+ : public filter_component_traits<Storage, typename Storage::signal_type>
{};
namespace detail
@@ -81,7 +71,7 @@
storable_vector stored;
volatile bool opened;
- template<typename Sig, typename OutSignal, typename Combiner, typename Group, typename GroupCompare>
+ template<typename Sig, typename OutSignal, typename SignalArgs>
friend class storage;
};
@@ -89,31 +79,27 @@
/** \brief Stores and transmits arguments received from a signal.
\param Signature Signature of the signal sent.
*/
-template<typename Signature,
+template<
+ typename Signature,
typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
- typename Combiner = boost::last_value<typename boost::function_traits<Signature>::result_type>,
- typename Group = int,
- typename GroupCompare = std::less<Group>
+ typename SignalArgs=typename default_signal_args<Signature>::type
>
-class storage : public conditional_modifier<storage_modifier<Signature>, Signature, OutSignal, Combiner, Group, GroupCompare>
+class storage : public conditional_modifier<
+ storage<Signature,OutSignal,SignalArgs>,
+ storage_modifier<Signature>,
+ Signature,
+ OutSignal,
+ SignalArgs>
{
protected:
- typedef conditional_modifier<storage_modifier<Signature>, Signature, OutSignal, Combiner, Group, GroupCompare> base_type;
+ typedef conditional_modifier<storage, storage_modifier<Signature>, Signature, OutSignal, SignalArgs> base_type;
using base_type::modification;
public:
typedef typename storage_modifier<Signature>::parameter_types parameter_types;
-
typedef typename storage_modifier<Signature>::storable_types storable_types;
typedef typename storage_modifier<Signature>::storable_vector storable_vector;
- typedef storage_component_traits<Signature> component_traits;
-
- typedef mpl::vector<
- typename boost::dataflow::signals::call_consumer,
- typename boost::dataflow::signals::extract_producer<Signature>,
- typename boost::dataflow::signals::extract_call_consumer
- > port_traits;
-
+ typedef storage_component_traits<storage> component_traits;
storage(const storage &rhs) : base_type(rhs.modification) {}
@@ -179,7 +165,7 @@
>
> send_map;
- boost::dataflow::port_map<boost::dataflow::signals::mechanism, boost::dataflow::ports::consumer, send_map>
+ boost::dataflow::port_map<boost::dataflow::ports::consumer, send_map, dataflow::signals::tag>
send_slot()
{
return send_map
@@ -190,7 +176,7 @@
*/
template<int N>
slot_selector
-#ifndef DOXYGEN_DOCS_ONLY
+#ifndef DOXYGEN_DOCS_BUILD
<typename boost::fusion::result_of::at_c<storable_vector, N>::type (), storage>
#endif
at_slot()
@@ -233,8 +219,8 @@
}
};
- template<typename T>
- struct get_component_port_impl<boost::signals::storage_component_traits<T> >
+/* template<typename T>
+ struct get_port_impl<boost::signals::storage_component_traits<T> >
{
template<typename Component>
struct port_types
@@ -264,7 +250,7 @@
};
template<typename Component, typename N>
- typename result<get_component_port_impl(Component &, N)>::type
+ typename result<get_port_impl(Component &, N)>::type
operator()(Component &component, N)
{
return fusion::at<N>(ports(component));
@@ -279,7 +265,7 @@
{
producer.call(consumer);
}
- };
+ };*/
}
} } // namespace boost::dataflow
Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/component/timed_generator.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/component/timed_generator.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/component/timed_generator.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -15,13 +15,11 @@
*/
template<typename Signature,
typename OutSignal=SIGNAL_NETWORK_DEFAULT_OUT,
- typename Combiner = boost::last_value<typename boost::function_traits<Signature>::result_type>,
- typename Group = int,
- typename GroupCompare = std::less<Group>
+ typename SignalArgs=typename default_signal_args<Signature>::type
>
-class timed_generator : public storage<Signature, OutSignal, Combiner, Group, GroupCompare>
+class timed_generator : public storage<Signature, OutSignal, SignalArgs>
{
- typedef storage<Signature, OutSignal, Combiner, Group, GroupCompare> base_type;
+ typedef storage<Signature, OutSignal, SignalArgs> base_type;
public:
/// Default constructor. Starts the thread, but signals won't be sent until the enable() function is called.
timed_generator() : terminating(false), enabled(false)
Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/connection/operators.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/connection/operators.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/connection/operators.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -9,84 +9,23 @@
#include <boost/dataflow/signals/support.hpp>
namespace boost { namespace signals {
-
- /// Connects two components (typically as a part of a chain of components).
- /** This operator is identical to signals::operator| (it connects the
- left component to the right component, and returns a reference to the left component),
- except it is evaluated right to left. This makes it semantics more suitable for
- connecting a chain of components.
- */
-template<typename Input, typename Output>
-typename boost::enable_if<
- boost::mpl::and_<
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::producer, Input>,
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::consumer, Output>
- >,
- Input &
->::type
-operator >>= (Input &input, Output &output)
-{ connect(input, output); return input;}
-
-template<typename Input, typename Output>
-typename boost::enable_if<
- boost::mpl::and_<
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::producer, Input>,
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::consumer, Output>
- >,
- Input &
->::type
-operator >>= (Input &input, const Output &output)
-{ connect(input, output); return input;}
-template<typename Input, typename Output>
-typename boost::enable_if<
- boost::mpl::and_<
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::producer, Input>,
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::consumer, Output>
- >,
- const Input &
->::type
-operator >>= (const Input &input, Output &output)
-{ connect(input, output); return input;}
-
-template<typename Input, typename Output>
-typename boost::enable_if<
- boost::mpl::and_<
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::producer, Input>,
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::consumer, Output>
- >,
- const Input &
->::type
-operator >>= (const Input &input, const Output &output)
-{ connect(input, output); return input;}
+// the include templates expect DATAFLOW_TEMPLATE_TAG to have
+// the mechanism type
+#define DATAFLOW_TEMPLATE_TAG boost::dataflow::signals::tag
+
+# define DATAFLOW_TEMPLATE_MECHANISM boost::dataflow::signals::connect_mechanism
+# define DATAFLOW_TEMPLATE_BINARY_OPERATION connect
+# define DATAFLOW_TEMPLATE_OPERATOR >>=
+# include <boost/dataflow/templates/operator.hpp>
+# undef DATAFLOW_TEMPLATE_OPERATOR
+# define DATAFLOW_TEMPLATE_OPERATOR |
+# include <boost/dataflow/templates/operator.hpp>
+# undef DATAFLOW_TEMPLATE_OPERATOR
+# undef DATAFLOW_TEMPLATE_BINARY_OPERATION
+# undef DATAFLOW_TEMPLATE_MECHANISM
+#undef DATAFLOW_TEMPLATE_TAG
- /// Connects two components (typically as a part of branching from a single component).
- /** This operator is identical to signals::operator>>=, (it connects the
- left component to the right component, and returns a reference to the left component)
- except it is evaluated left to right. This makes its semantics more suitable for
- branching connections.
- */
-template<typename Input, typename Output>
-typename boost::enable_if<
- boost::mpl::and_<
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::producer, Input>,
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::consumer, Output>
- >,
- Input &
->::type
-operator | (Input &input, Output &output)
-{ connect(input, output); return input;}
-
-template<typename Input, typename Output>
-typename boost::enable_if<
- boost::mpl::and_<
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::producer, Input>,
- boost::dataflow::is_port<boost::dataflow::signals::mechanism, boost::dataflow::ports::consumer, Output>
- >,
- Input &
->::type
-operator | (Input &input, const Output &output)
-{ connect(input, output); return input;}
} } // namespace boost::dataflow
Modified: sandbox/SOC/2007/signals/boost/dataflow/signals/connection/slot_selector.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/signals/connection/slot_selector.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/signals/connection/slot_selector.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -17,7 +17,7 @@
namespace boost { namespace dataflow { namespace signals {
struct slot_selector_consumer
- : public boost::dataflow::port_traits<mechanism, ports::consumer, concepts::keyed_port> {};
+ : public boost::dataflow::port_traits<ports::consumer, concepts::keyed_port, tag> {};
} } // namespace dataflow::signals
@@ -28,21 +28,7 @@
template<typename Signature, typename T>
struct slot_selector
{
- struct get_proxied_object
- {
- T &operator()(const slot_selector<Signature, T> &t)
- {
- return t.object;
- };
- };
-
typedef boost::dataflow::signals::slot_selector_consumer port_traits;
- typedef boost::dataflow::mutable_proxy_port<
- boost::dataflow::signals::mechanism,
- boost::dataflow::ports::producer,
- T,
- get_proxied_object
- > proxy_port_traits;
typedef Signature signature_type;
typedef T class_type;
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -15,67 +15,49 @@
namespace signals {
-struct mechanism {};
+struct tag {};
+struct connect_mechanism {};
+struct extract_mechanism {};
template<typename T>
struct producer
- : public complemented_port_traits<mechanism, ports::producer, boost::function<T> >
+ : public complemented_port_traits<ports::producer, boost::function<T>, tag>
{
typedef T signature_type;
};
template<typename T>
struct consumer
- : public port_traits<mechanism, ports::consumer, concepts::port>
+ : public port_traits<ports::consumer, concepts::port, tag>
{
typedef T signature_type;
};
struct call_consumer
- : public port_traits<mechanism, ports::consumer, concepts::keyed_port>
+ : public port_traits<ports::consumer, concepts::keyed_port, tag>
{};
- // mechanism used for data extraction
- struct extract_mechanism {};
-
- template<typename T>
- struct extract_producer
- : public complemented_port_traits<extract_mechanism, ports::producer, boost::function<T> >
- {
- typedef T signature_type;
- };
-
- template<typename T>
- struct extract_consumer
- : public port_traits<extract_mechanism, ports::consumer, concepts::port>
- {
- typedef T signature_type;
- };
-
- struct extract_call_consumer
- : public port_traits<extract_mechanism, ports::consumer, concepts::keyed_port>
- {};
+template<typename T>
+struct extract_producer
+ : public complemented_port_traits<ports::producer, boost::function<T>, tag>
+{
+ typedef T signature_type;
+};
} // namespace signals
template<typename Signature, typename Combiner, typename Group, typename GroupCompare>
-struct register_port_traits<signals::mechanism, ports::producer, boost::signal<Signature, Combiner, Group, GroupCompare> >
+struct register_port_traits<boost::signal<Signature, Combiner, Group, GroupCompare>, signals::tag >
{
typedef signals::producer<Signature> type;
};
template<typename Signature>
-struct register_port_traits<signals::mechanism, ports::consumer, boost::function<Signature> >
+struct register_port_traits<boost::function<Signature>, signals::tag >
{
typedef signals::consumer<Signature> type;
};
-template<typename Signature>
-struct register_port_traits<signals::extract_mechanism, ports::consumer, boost::function<Signature> >
-{
- typedef signals::extract_consumer<Signature> type;
-};
-
namespace extension
{
template<typename Signature>
@@ -90,23 +72,12 @@
(static_cast<typename boost::signals::detail::slot_type<Signature, ConsumerPort>::type>(&ConsumerPort::operator()), consumer);
};
};
-
- template<typename Signature>
- struct get_keyed_port_impl<signals::extract_call_consumer, signals::extract_producer<Signature> >
- {
- typedef const boost::function<Signature> result_type;
-
- template<typename ConsumerPort>
- result_type operator()(ConsumerPort &consumer)
- {
- return boost::signals::detail::bind_object<Signature, ConsumerPort>()
- (static_cast<typename boost::signals::detail::slot_type<Signature, ConsumerPort>::type>(&ConsumerPort::operator()), consumer);
- };
- };
-
+
template<typename T>
- struct binary_operation_impl<operations::connect, signals::producer<T>, signals::consumer<T> >
+ struct binary_operation_impl<signals::producer<T>, signals::consumer<T>, operations::connect>
{
+ typedef void result_type;
+
template<typename Producer, typename Consumer>
void operator()(Producer &producer, Consumer &consumer)
{
@@ -119,7 +90,9 @@
namespace boost { namespace signals {
-#define DATAFLOW_TEMPLATE_MECHANISM boost::dataflow::signals::mechanism
+#define DATAFLOW_TEMPLATE_TAG boost::dataflow::signals::tag
+
+#define DATAFLOW_TEMPLATE_MECHANISM boost::dataflow::signals::connect_mechanism
#define DATAFLOW_TEMPLATE_BINARY_OPERATION connect
#include <boost/dataflow/templates/binary_operation.hpp>
#undef DATAFLOW_TEMPLATE_BINARY_OPERATION
@@ -130,6 +103,7 @@
#include <boost/dataflow/templates/binary_operation.hpp>
#undef DATAFLOW_TEMPLATE_BINARY_OPERATION
#undef DATAFLOW_TEMPLATE_MECHANISM
+#undef DATAFLOW_TEMPLATE_TAG
template<typename Component>
inline void invoke(Component &component)
Modified: sandbox/SOC/2007/signals/boost/dataflow/support.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -7,7 +7,7 @@
#define BOOST_DATAFLOW_SUPPORT_HPP
#include <boost/dataflow/support/port.hpp>
-#include <boost/dataflow/support/proxy_port.hpp>
+//#include <boost/dataflow/support/proxy_port.hpp>
#include <boost/dataflow/support/complemented_port.hpp>
#include <boost/dataflow/support/binary_operation.hpp>
#include <boost/dataflow/support/keyed_port.hpp>
Modified: sandbox/SOC/2007/signals/boost/dataflow/support/binary_operation.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support/binary_operation.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/binary_operation.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -6,88 +6,45 @@
#ifndef BOOST_DATAFLOW_SUPPORT_BINARY_OPERATION_HPP
#define BOOST_DATAFLOW_SUPPORT_BINARY_OPERATION_HPP
-#include <boost/dataflow/support/proxy_port.hpp>
+#include <boost/dataflow/support/port.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/remove_reference.hpp>
+// ***************************************
+// * binary_operation, are_binary_operable
+// ***************************************
+#define DATAFLOW_SPECIALIZABLE_OPERATION_NAME binary_operation
+#define DATAFLOW_SPECIALIZABLE_OPERATION_CHECK are_binary_operable
+#define DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES typename Operation
+#define DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES Operation
+#define DATAFLOW_SPECIALIZABLE_OPERATION_ARITY 2
+#define DATAFLOW_SPECIALIZABLE_OPERATION_TRAITS_OF port_traits_of
+#define DATAFLOW_SPECIALIZABLE_OPERATION_HAS_TRAITS is_port
+#include <boost/dataflow/support/detail/make_specializable_operation.hpp>
namespace boost { namespace dataflow {
-namespace extension
-{
- template<typename Operation, typename ProducerTag, typename ConsumerTag, typename Enable=void>
- struct binary_operation_impl
- {
- typedef void not_specialized;
-
- template<typename Producer, typename Consumer>
- void operator()(Producer &, Consumer &)
- {
- // Error: binary_operation_impl has not been implemented
- // for ProducerTag and ConsumerTag.
- BOOST_STATIC_ASSERT(sizeof(Producer)==0);
- }
- };
-}
-
-template<typename Operation, typename Mechanism, typename Producer, typename Consumer>
-inline void binary_operation(Producer &producer, Consumer &consumer)
+template<typename Operation, typename Mechanism, typename Tag, typename OutgoingPort, typename IncomingPort>
+inline void
+binary_operation(OutgoingPort &outgoing, IncomingPort &incoming)
{
extension::binary_operation_impl<
- Operation,
- typename port_traits_of<Mechanism, ports::producer, Producer>::type,
- typename port_traits_of<Mechanism, ports::consumer, Consumer>::type>
- ()(get_port<Mechanism, ports::producer>(producer),
- get_port<Mechanism, ports::consumer>(consumer));
+ typename default_port_traits_of<OutgoingPort, directions::outgoing, Mechanism, Tag>::type,
+ typename default_port_traits_of<IncomingPort, directions::incoming, Mechanism, Tag>::type,
+ Operation>
+ ()(get_default_port<directions::outgoing, Mechanism, Tag>(outgoing),
+ get_default_port<directions::incoming, Mechanism, Tag>(incoming));
}
-template<typename Operation, typename Mechanism, typename ProducerPort, typename ConsumerPort, typename Enable=void>
-struct are_binary_operable
- : public mpl::false_
-{
- BOOST_MPL_ASSERT((is_same<Enable, void>));
-};
-
-template<typename Operation, typename Mechanism, typename Producer, typename Consumer, typename Enable=void>
-struct specialized_binary_operation
- : public mpl::true_
+template<typename OutgoingPort, typename IncomingPort>
+inline typename enable_if<
+ mpl::and_<
+ has_default_port<OutgoingPort, directions::outgoing, default_mechanism, default_tag>,
+ has_default_port<IncomingPort, directions::incoming, default_mechanism, default_tag>
+ > >::type
+connect(OutgoingPort &outgoing, IncomingPort &incoming)
{
- BOOST_MPL_ASSERT((is_same<Enable, void>));
-};
-
-template<typename Operation, typename Mechanism, typename Producer, typename Consumer>
-struct specialized_binary_operation<
- Operation,
- Mechanism,
- Producer,
- Consumer,
- typename detail::enable_if_defined<
- typename extension::binary_operation_impl<
- Operation,
- typename port_traits_of<Mechanism, ports::producer, Producer>::type,
- typename port_traits_of<Mechanism, ports::consumer, Consumer>::type
- >::not_specialized
- >::type
->
- : public mpl::false_ {};
-
-template<typename Operation, typename Mechanism, typename Producer, typename Consumer>
-struct are_binary_operable<
- Operation,
- Mechanism,
- Producer,
- Consumer,
- typename enable_if<
- mpl::and_<
- is_port<Mechanism, ports::producer, Producer>,
- is_port<Mechanism, ports::consumer, Consumer>,
- specialized_binary_operation<Operation,Mechanism,Producer,Consumer>
- >
- >::type
->
- : public mpl::true_ {};
-
+ binary_operation<operations::connect, default_mechanism, default_tag>(outgoing, incoming);
+}
} } // namespace boost::dataflow
Deleted: sandbox/SOC/2007/signals/boost/dataflow/support/common.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support/common.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
+++ (empty file)
@@ -1,23 +0,0 @@
-// 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)
-
-#ifndef BOOST_DATAFLOW_SUPPORT_COMMON_HPP
-#define BOOST_DATAFLOW_SUPPORT_COMMON_HPP
-
-namespace boost { namespace dataflow {
-
-/// Tag describing that dataflow properties should apply to all mechanisms.
-struct all_mechanisms;
-
-namespace connections
-{
- struct none;
- struct one;
- struct many;
-}
-
-} } // namespace boost::dataflow
-
-#endif // BOOST_DATAFLOW_SUPPORT_COMMON_HPP
\ No newline at end of file
Modified: sandbox/SOC/2007/signals/boost/dataflow/support/complemented_port.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support/complemented_port.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/complemented_port.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -10,21 +10,20 @@
namespace boost { namespace dataflow {
-/// Convenience class for PortTraits types.
-template<typename Mechanism, typename PortCategory, typename ComplementPort>
+/// Convenience class for ComplementedPortTraits types.
+template<typename PortCategory, typename ComplementPort, typename Tag=default_tag>
struct complemented_port_traits
+ : public port_traits<PortCategory, concepts::complemented_port, Tag>
{
- typedef Mechanism mechanism;
- typedef PortCategory category;
- typedef concepts::complemented_port concept;
- typedef ComplementPort complement_port_type;
+ typedef ComplementPort complement_port_type; ///< complement Port type.
};
-/// Boolean metafunction determining whether a type is a PortTraits.
+/// Boolean metafunction determining whether a type is a ComplementedPortTraits.
template<typename PortTraits, typename Enable=void>
struct is_complemented_port_traits : public mpl::false_
{};
+/// INTERNAL ONLY
template<typename PortTraits>
struct is_complemented_port_traits<PortTraits,
typename detail::enable_if_defined<
@@ -37,14 +36,16 @@
>::type>
: public mpl::true_
{
+ /// INTERNAL ONLY
BOOST_MPL_ASSERT(( is_port_category<typename PortTraits::category> ));
};
-/// Boolean metafunction determining whether a type is a PortTraits.
+/// Boolean metafunction determining whether a type is a ComplementedPort.
template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
struct is_complemented_port : public mpl::false_
{};
+/// INTERNAL ONLY
template<typename Mechanism, typename PortCategory, typename T>
struct is_complemented_port<Mechanism, PortCategory, T,
typename enable_if<
@@ -52,7 +53,7 @@
typename port_traits_of<
Mechanism,
PortCategory,
- typename utility::underlying_type<T>::type
+ typename remove_cv<T>::type
>::type
>
>::type >
Modified: sandbox/SOC/2007/signals/boost/dataflow/support/component.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support/component.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/component.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -10,71 +10,121 @@
#include <boost/mpl/and.hpp>
#include <boost/mpl/assert.hpp>
+#include <boost/mpl/at.hpp>
#include <boost/mpl/bool.hpp>
+#include <boost/mpl/has_key.hpp>
#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/map.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/type_traits/remove_cv.hpp>
-#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_base_of.hpp>
#include <boost/utility/result_of.hpp>
namespace boost { namespace dataflow {
-template<typename PortSequence>
+/// Convenience base class for ComponentTraits types.
+template<typename PortSequence, typename DefaultPorts=mpl::map<>, typename ComponentConcept=concepts::component, typename Tag=default_tag>
struct component_traits
{
+ /// MPL Sequence of exposed port types.
typedef PortSequence ports;
+ /// MPL Sequence of default ports.
+ typedef DefaultPorts default_ports;
+ /// Concept the Component models.
+ typedef ComponentConcept concept;
+ /// Tag.
+ typedef Tag tag;
+ /// INTERNAL ONLY
BOOST_MPL_ASSERT((mpl::is_sequence<PortSequence>));
+ /// INTERNAL ONLY
+ BOOST_MPL_ASSERT((mpl::is_sequence<DefaultPorts>));
+ /// INTERNAL ONLY
+ BOOST_MPL_ASSERT((is_base_of<concepts::component, ComponentConcept>));
};
/// Boolean metafunction determining whether a type is a ComponentTraits.
template<typename ComponentTraits, typename Enable=void>
struct is_component_traits : public mpl::false_
{
+ /// INTERNAL ONLY
BOOST_MPL_ASSERT((is_same<Enable, void>));
};
+/// INTERNAL ONLY
template<typename ComponentTraits>
struct is_component_traits<ComponentTraits,
typename detail::enable_if_defined<
- typename ComponentTraits::ports
+ detail::all_of<
+ typename ComponentTraits::ports,
+ typename ComponentTraits::default_ports,
+ typename ComponentTraits::concept,
+ typename ComponentTraits::tag
+ >
>::type>
: public mpl::true_
{};
-/// Metafunction returning the ComponentTraits of a type.
-template<typename T, typename Enable=void>
+/// Metafunction returning the ComponentTraits of a Component.
+template<typename T, typename Tag=default_tag, typename Enable=void>
struct component_traits_of
{
+ /// INTERNAL ONLY
BOOST_MPL_ASSERT((is_same<Enable, void>));
};
-/// Specialization allowing intrusive specification of the ComponentTraits.
-template<typename T>
-struct component_traits_of<T>
+#ifndef DOXYGEN_DOCS_BUILD
+// Specialization allowing intrusive specification of the ComponentTraits.
+template<typename T, typename Tag>
+struct component_traits_of<
+ T,
+ Tag,
+ typename detail::enable_if_defined<typename T::component_traits>::type >
{
typedef typename T::component_traits type;
BOOST_MPL_ASSERT(( is_component_traits<type> ));
};
+#endif // DOXYGEN_DOCS_BUILD
+/// Boolean metafunction determining whether a type is a Component.
+template<typename T, typename Tag=default_tag, typename Enable=void>
+struct is_component
+ : public mpl::false_ {};
+
+/// INTERNAL ONLY
+template<typename T, typename Tag>
+struct is_component<
+ T,
+ Tag,
+ typename detail::enable_if_defined<
+ typename component_traits_of<T, Tag>::type
+ >::type >
+ : public mpl::true_ {};
+
+/// Convenience base class for Component types.
+template<typename ComponentTraits>
+struct component
+{
+ /// ComponentTraits of the Component.
+ typedef ComponentTraits component_traits;
+};
+
+#ifndef DOXYGEN_DOCS_BUILD
namespace extension {
template<typename ComponentTraits, typename Enable=void>
- struct get_component_port_impl
+ struct get_port_impl
{
BOOST_MPL_ASSERT((is_same<Enable, void>));
typedef void result_type;
- struct detail
- {
- typedef void not_specialized;
- };
+ typedef void not_specialized;
- template<typename Component, typename T>
- void operator()(Component &, T)
+ template<typename Component, int N>
+ void operator()(Component &, mpl::int_<N>)
{
- // Error: get_component_port_impl has not been
+ // Error: get_port_impl has not been
// implemented for ComponentTraits.
BOOST_STATIC_ASSERT(sizeof(Component)==0);
}
@@ -82,25 +132,96 @@
} // namespace extension
-template<typename T, typename Component>
-struct get_component_port_result_type
+namespace result_of
{
- typedef typename result_of<
- extension::get_component_port_impl<
- typename component_traits_of<Component>::type
- >(Component &, T)>::type type;
-};
+ template<typename Component, int N>
+ struct get_port_c
+ {
+ typedef typename boost::result_of<
+ extension::get_port_impl<
+ typename component_traits_of<Component>::type
+ >(Component &, mpl::int_<N>)>::type type;
+ };
+
+ template<typename Component, typename N>
+ struct get_port
+ {
+ typedef typename get_port_c<Component, N::value>::type type;
+ };
+}
+
+template<int N, typename Component>
+inline typename result_of::get_port_c<Component, N>::type
+get_port_c(Component &component)
+{
+ return
+ extension::get_port_impl<
+ typename component_traits_of<Component>::type
+ >()(component, mpl::int_<N>());
+}
-template<typename T, typename Component>
-typename get_component_port_result_type<T, Component>::type
-get_component_port(Component &component)
+template<typename N, typename Component>
+inline typename result_of::get_port<Component, N>::type
+get_port(Component &component)
{
return
- extension::get_component_port_impl<
+ extension::get_port_impl<
typename component_traits_of<Component>::type
- >()(component, T());
+ >()(component, mpl::int_<N::value>());
}
+template<typename Direction, typename Mechanism=default_mechanism>
+struct default_port_selector
+{
+ typedef Direction direction;
+ typedef Mechanism mechanism;
+};
+
+template<typename T, typename Tag>
+struct traits_of<T, Tag, typename enable_if<is_component<T> >::type>
+ : public component_traits_of<T>
+{};
+
+namespace extension {
+
+ template<typename ComponentTraits, typename Direction, typename Mechanism>
+ struct get_default_port_impl<
+ ComponentTraits,
+ Direction,
+ Mechanism,
+ typename enable_if<
+ mpl::and_<
+ is_component_traits<ComponentTraits>,
+ mpl::has_key<
+ typename ComponentTraits::default_ports,
+ default_port_selector<Direction, Mechanism>
+ >
+ >
+ >::type >
+ {
+ typedef typename mpl::at<
+ typename ComponentTraits::default_ports,
+ default_port_selector<Direction, Mechanism>
+ >::type port_number;
+
+ template<typename FArgs>
+ struct result;
+
+ template<typename F, typename Component>
+ struct result<F(Component &)>
+ {
+ typedef typename result_of::get_port<Component, port_number>::type type;
+ };
+
+ template<typename Component>
+ typename result<get_default_port_impl(Component &)>::type operator()(Component &c)
+ {
+ return get_port<port_number>(c);
+ }
+ };
+
+} // namespace extension
+#endif // DOXYGEN_DOCS_BUILD
} } // namespace boost::dataflow
Added: sandbox/SOC/2007/signals/boost/dataflow/support/default_port_provider.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/default_port_provider.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -0,0 +1,111 @@
+// 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)
+
+#ifndef BOOST_DATAFLOW_SUPPORT_DEFAULT_PORT_PROVIDER_HPP
+#define BOOST_DATAFLOW_SUPPORT_DEFAULT_PORT_PROVIDER_HPP
+
+#include <boost/dataflow/detail/enable_if_defined.hpp>
+#include <boost/dataflow/support/tags.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace boost { namespace dataflow {
+
+/// Metafunction returning the traits of a type.
+template<typename T, typename Tag=default_tag, typename Enable=void>
+struct traits_of
+{
+#ifdef DOXYGEN_DOCS_BUILD
+ /// The traits of T.
+ typedef detail::unspecified type;
+#endif
+};
+
+/// Boolean Metafunction determining whether a type has traits.
+template<typename T, typename Tag=default_tag, typename Enable=void>
+struct has_traits : public mpl::false_
+{
+#ifdef DOXYGEN_DOCS_BUILD
+ /// Integral Constant value type
+ typedef bool value_type;
+ /// true if T has traits, false otherwise.
+ typedef detail::unspecified value;
+ /// Boolean Integral Constant
+ typedef detail::unspecified type;
+#endif
+};
+
+/// INTERNAL ONLY
+template<typename T, typename Tag>
+struct has_traits<
+ T,
+ Tag,
+ typename detail::enable_if_defined<typename traits_of<T, Tag>::type>::type >
+ : public mpl::true_
+{};
+
+} } // namespace boost::dataflow
+
+// ***************************************
+// * get_default_port, has_default_port
+// ***************************************
+#ifdef DOXYGEN_DOCS_BUILD
+
+namespace boost { namespace dataflow {
+
+// THIS IS A DOXYGEN DEFINITION ONLY!
+/// Returns the default port for a Direction and Mechanism.
+template<typename Direction, typename Mechanism,
+ Tag=default_tag, typename T1>
+inline detail::unspecified get_default_port(T1 &t1);
+
+// THIS IS A DOXYGEN DEFINITION ONLY!
+/// Boolean Metafunction determining whether a type has a default port.
+template<
+ typename T,
+ typename Direction, typename Mechanism=default_mechanism,
+ typename Tag=default_tag,
+ typename Enable=void>
+struct has_default_port
+{};
+
+}}
+
+#else
+
+#define DATAFLOW_SPECIALIZABLE_OPERATION_NAME get_default_port
+#define DATAFLOW_SPECIALIZABLE_OPERATION_CHECK has_default_port
+#define DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES_WDEFAULTS typename Direction, typename Mechanism=default_mechanism
+#define DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES typename Direction, typename Mechanism
+#define DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES Direction, Mechanism
+#define DATAFLOW_SPECIALIZABLE_OPERATION_USE_TAG_IN_IMPL
+#define DATAFLOW_SPECIALIZABLE_OPERATION_ARITY 1
+#define DATAFLOW_SPECIALIZABLE_OPERATION_TRAITS_OF traits_of
+#define DATAFLOW_SPECIALIZABLE_OPERATION_HAS_TRAITS has_traits
+#include <boost/dataflow/support/detail/make_specializable_operation.hpp>
+
+#endif // DOXYGEN_DOCS_BUILD
+namespace boost { namespace dataflow {
+
+/// Metafunction returning the PortTraits of a default Port.
+template<typename T, typename Direction, typename Mechanism=default_mechanism, typename Tag=default_tag, typename Enable=void>
+struct default_port_traits_of
+{
+#ifndef DOXYGEN_DOCS_BUILD
+ typedef typename port_traits_of<
+ typename remove_reference<
+ typename result_of::get_default_port<T, Direction, Mechanism, Tag>::type
+ >::type,
+ Tag
+ >::type type;
+#else
+ typedef detail::unspecified type; ///< A PortTraits type.
+#endif
+};
+
+} } // namespace boost::dataflow
+
+#endif // BOOST_DATAFLOW_SUPPORT_DEFAULT_PORT_PROVIDER_HPP
Added: sandbox/SOC/2007/signals/boost/dataflow/support/detail/make_specializable_operation.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/detail/make_specializable_operation.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -0,0 +1,228 @@
+// 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)
+
+// expects:
+// DATAFLOW_SPECIALIZABLE_OPERATION_NAME
+// DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES
+// DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES
+// DATAFLOW_SPECIALIZABLE_OPERATION_ARITY
+// DATAFLOW_SPECIALIZABLE_OPERATION_CHECK
+// DATAFLOW_SPECIALIZABLE_OPERATION_TRAITS_OF
+
+#ifndef DATAFLOW_SPECIALIZABLE_OPERATION_NAME
+#error DATAFLOW_SPECIALIZABLE_OPERATION_NAME undefined
+#endif
+#ifndef DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES
+#error DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES undefined
+#endif
+#ifndef DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES
+#error DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES undefined
+#endif
+#ifndef DATAFLOW_SPECIALIZABLE_OPERATION_ARITY
+#error DATAFLOW_SPECIALIZABLE_OPERATION_ARITY undefined
+#endif
+#ifndef DATAFLOW_SPECIALIZABLE_OPERATION_CHECK
+#error DATAFLOW_SPECIALIZABLE_OPERATION_CHECK undefined
+#endif
+#ifndef DATAFLOW_SPECIALIZABLE_OPERATION_TRAITS_OF
+#error DATAFLOW_SPECIALIZABLE_OPERATION_TRAITS_OF undefined
+#endif
+#ifndef DATAFLOW_SPECIALIZABLE_OPERATION_HAS_TRAITS
+#error DATAFLOW_SPECIALIZABLE_OPERATION_HAS_TRAITS undefined
+#endif
+
+// optional:
+// DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES_WDEFAULTS
+#ifndef DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES_WDEFAULTS
+#define DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES_WDEFAULTS DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES
+#endif
+
+#ifndef BOOST_DATAFLOW_DETAIL_MAKE_SPECIALIZABLE_OPERATION
+#define BOOST_DATAFLOW_DETAIL_MAKE_SPECIALIZABLE_OPERATION
+
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/utility/result_of.hpp>
+
+namespace boost { namespace dataflow { namespace detail {
+
+struct not_specialized {};
+
+} } }
+
+#endif
+
+
+#define DATAFLOW_SPECIALIZABLE_OPERATION_IMPL BOOST_PP_CAT(DATAFLOW_SPECIALIZABLE_OPERATION_NAME,_impl)
+#define DATAFLOW_SPECIALIZABLE_OPERATION_CHECK_SPECIALIZED BOOST_PP_CAT(DATAFLOW_SPECIALIZABLE_OPERATION_CHECK,_specialized)
+#if DATAFLOW_SPECIALIZABLE_OPERATION_ARITY==1
+# define DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TRAITS typename Traits
+# define DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TS typename T1
+# define DATAFLOW_SPECIALIZABLE_OPERATION_TS T1
+# define DATAFLOW_SPECIALIZABLE_OPERATION_TARGS T1 &
+# define DATAFLOW_SPECIALIZABLE_OPERATION_NAMED_TARGS T1 &t1
+# define DATAFLOW_SPECIALIZABLE_OPERATION_TARGS_NAMES t1
+# define DATAFLOW_SPECIALIZABLE_OPERATION_GET_TRAITS \
+ typename DATAFLOW_SPECIALIZABLE_OPERATION_TRAITS_OF<T1, Tag>::type
+# define DATAFLOW_SPECIALIZABLE_OPERATION_CHECK_TRAITS \
+ typename DATAFLOW_SPECIALIZABLE_OPERATION_HAS_TRAITS<T1, Tag>::type
+#elif DATAFLOW_SPECIALIZABLE_OPERATION_ARITY==2
+# define DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TRAITS typename Traits1, typename Traits2
+# define DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TS typename T1, typename T2
+# define DATAFLOW_SPECIALIZABLE_OPERATION_TS T1, T2
+# define DATAFLOW_SPECIALIZABLE_OPERATION_TARGS T1 &, T2 &
+# define DATAFLOW_SPECIALIZABLE_OPERATION_NAMED_TARGS T1 &t1, T2 &t2
+# define DATAFLOW_SPECIALIZABLE_OPERATION_TARGS_NAMES t1, t2
+# define DATAFLOW_SPECIALIZABLE_OPERATION_GET_TRAITS \
+ typename DATAFLOW_SPECIALIZABLE_OPERATION_TRAITS_OF<T1, Tag>::type, \
+ typename DATAFLOW_SPECIALIZABLE_OPERATION_TRAITS_OF<T2, Tag>::type
+# define DATAFLOW_SPECIALIZABLE_OPERATION_CHECK_TRAITS \
+ typename DATAFLOW_SPECIALIZABLE_OPERATION_HAS_TRAITS<T1, Tag>::type, \
+ typename DATAFLOW_SPECIALIZABLE_OPERATION_HAS_TRAITS<T2, Tag>::type
+#endif
+
+namespace boost { namespace dataflow {
+
+namespace extension
+{
+ template<
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TRAITS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES,
+ typename Enable=void>
+ struct DATAFLOW_SPECIALIZABLE_OPERATION_IMPL
+ {
+ BOOST_MPL_ASSERT(( is_same<Enable, void> ));
+
+ typedef detail::not_specialized result_type;
+
+ template<DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TS>
+ result_type operator()(DATAFLOW_SPECIALIZABLE_OPERATION_TARGS)
+ {
+ // Error: DATAFLOW_SPECIALIZABLE_OPERATION_IMPL has not been
+ // specialized appropriately.
+ BOOST_MPL_ASSERT(( mpl::bool_<sizeof(T1)==0> ));
+ return result_type();
+ }
+ };
+}
+
+namespace detail
+{
+
+ template<
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES_WDEFAULTS,
+ typename Tag=default_tag,
+ typename Enable=void>
+ struct DATAFLOW_SPECIALIZABLE_OPERATION_CHECK_SPECIALIZED
+ : public mpl::true_
+ {};
+
+ template<
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES,
+ typename Tag>
+ struct DATAFLOW_SPECIALIZABLE_OPERATION_CHECK_SPECIALIZED<
+ DATAFLOW_SPECIALIZABLE_OPERATION_TS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES,
+ Tag,
+ typename enable_if<
+ is_same<
+ typename extension::DATAFLOW_SPECIALIZABLE_OPERATION_IMPL<
+ DATAFLOW_SPECIALIZABLE_OPERATION_GET_TRAITS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES
+ >::result_type,
+ detail::not_specialized>
+ >::type>
+ : public mpl::false_
+ {};
+
+}
+
+template<
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES_WDEFAULTS,
+ typename Tag=default_tag,
+ typename Enable=void>
+struct DATAFLOW_SPECIALIZABLE_OPERATION_CHECK
+ : public mpl::false_
+{};
+
+template<
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES,
+ typename Tag>
+struct DATAFLOW_SPECIALIZABLE_OPERATION_CHECK<
+ DATAFLOW_SPECIALIZABLE_OPERATION_TS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES,
+ Tag,
+ typename enable_if<
+ mpl::and_<
+ DATAFLOW_SPECIALIZABLE_OPERATION_CHECK_TRAITS,
+ detail::DATAFLOW_SPECIALIZABLE_OPERATION_CHECK_SPECIALIZED<
+ DATAFLOW_SPECIALIZABLE_OPERATION_TS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES,
+ Tag>
+ >
+ >::type>
+ : public mpl::true_
+{};
+
+
+namespace result_of {
+
+ template<
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES_WDEFAULTS,
+ typename Tag=default_tag>
+ struct DATAFLOW_SPECIALIZABLE_OPERATION_NAME
+ {
+ typedef typename boost::result_of<
+ extension::DATAFLOW_SPECIALIZABLE_OPERATION_IMPL<
+ DATAFLOW_SPECIALIZABLE_OPERATION_GET_TRAITS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES
+ >
+ (DATAFLOW_SPECIALIZABLE_OPERATION_TARGS)
+ >::type type;
+ };
+
+}
+
+template<
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES,
+ typename Tag,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TS>
+inline typename result_of::DATAFLOW_SPECIALIZABLE_OPERATION_NAME<
+ DATAFLOW_SPECIALIZABLE_OPERATION_TS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES,
+ Tag>::type
+DATAFLOW_SPECIALIZABLE_OPERATION_NAME(DATAFLOW_SPECIALIZABLE_OPERATION_NAMED_TARGS)
+{
+ return extension::DATAFLOW_SPECIALIZABLE_OPERATION_IMPL<
+ DATAFLOW_SPECIALIZABLE_OPERATION_GET_TRAITS,
+ DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES
+ >()(DATAFLOW_SPECIALIZABLE_OPERATION_TARGS_NAMES);
+}
+
+}}
+
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_NAME
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_CHECK_SPECIALIZED
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES_WDEFAULTS
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_ARITY
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_CHECK
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_TRAITS_OF
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_HAS_TRAITS
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TRAITS
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TS
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_TS
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_TARGS
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_NAMED_TARGS
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_TARGS_NAMES
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_GET_TRAITS
+#undef DATAFLOW_SPECIALIZABLE_OPERATION_CHECK_TRAITS
Deleted: sandbox/SOC/2007/signals/boost/dataflow/support/filter.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support/filter.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
+++ (empty file)
@@ -1,62 +0,0 @@
-// 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)
-
-#ifndef BOOST_DATAFLOW_SUPPORT_FILTER_HPP
-#define BOOST_DATAFLOW_SUPPORT_FILTER_HPP
-
-#include <boost/dataflow/support/producer.hpp>
-#include <boost/dataflow/support/consumer.hpp>
-
-namespace boost { namespace dataflow {
-
-// trait giving the producer category of a type.
-template<typename Mechanism, typename T, typename Enable=void>
-struct filter_category_of
-{
-};
-
-template<typename Mechanism, typename T>
-struct filter_category_of<Mechanism, T,
- typename detail::enable_if_defined<typename T::template dataflow<Mechanism>::filter_category>::type >
-{
- typedef typename T::template dataflow<Mechanism>::filter_category type;
-};
-
-template<typename Mechanism, typename T>
-struct producer_category_of<Mechanism, T,
- typename detail::enable_if_defined<
- typename filter_category_of<Mechanism, T>::type
- >::type >
-{
- typedef typename filter_category_of<Mechanism, T>::type type;
-};
-
-template<typename Mechanism, typename T>
-struct consumer_category_of<Mechanism, T,
- typename detail::enable_if_defined<typename filter_category_of<Mechanism, T>::type>::type >
-{
- typedef typename filter_category_of<Mechanism, T>::type type;
-};
-
-} } // namespace boost::dataflow
-
-#define DATAFLOW_FILTER_CATEGORY(m,p,pc) \
-template<> \
-struct filter_category_of<m, p> \
-{ \
- typedef pc type; \
- BOOST_MPL_ASSERT(( is_producer_category<type> )); \
- BOOST_MPL_ASSERT(( is_consumer_category<type> )); \
-};
-
-#define DATAFLOW_FILTER_CATEGORY_ENABLE_IF(m,P,Cond,pc) \
-template<typename P> \
-struct filter_category_of<m, P, typename boost::enable_if< Cond >::type> \
-{ \
- typedef pc type; \
- BOOST_MPL_ASSERT(( mpl::and_<is_producer_category<type>,is_consumer_category<type> > )); \
-};
-
-#endif // BOOST_DATAFLOW_SUPPORT_FILTER_HPP
Added: sandbox/SOC/2007/signals/boost/dataflow/support/fusion_component.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/fusion_component.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -0,0 +1,81 @@
+// 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 BOOST_DATAFLOW_SUPPORT_FUSION_COMPONENT_HPP
+#define BOOST_DATAFLOW_SUPPORT_FUSION_COMPONENT_HPP
+
+#include <boost/dataflow/support/component.hpp>
+
+#include <boost/mpl/map.hpp>
+#include <boost/mpl/transform.hpp>
+#include <boost/fusion/container/vector.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+#include <boost/fusion/include/mpl.hpp>
+#include <boost/fusion/include/adapted.hpp>
+
+namespace boost { namespace dataflow {
+
+#ifndef DOXYGEN_DOCS_BUILD
+namespace detail
+{
+ template<typename T>
+ struct transform_remove_reference
+ {
+ typedef typename boost::mpl::transform<T,
+ boost::remove_reference<boost::mpl::_> >::type type;
+ };
+} // namespace detail
+#endif // DOXYGEN_DOCS_BUILD
+
+/// Convenience base class for FusionComponentTraits types.
+template<typename Sequence, typename DefaultPorts=mpl::map<> >
+struct fusion_component_traits
+ : public component_traits<
+ typename detail::transform_remove_reference<Sequence>::type,
+ DefaultPorts,
+ concepts::fusion_component>
+{
+ /// MPL Sequence of result types for get_port
+ typedef Sequence port_result_types;
+};
+
+#ifndef DOXYGEN_DOCS_BUILD
+namespace extension {
+
+ template<typename ComponentTraits>
+ struct get_port_impl<
+ ComponentTraits,
+ typename enable_if<
+ is_same<
+ typename ComponentTraits::concept,
+ concepts::fusion_component>
+ >::type >
+ {
+ template<typename FArgs>
+ struct result;
+
+ template<typename F, typename Component, typename N>
+ struct result<F(Component &, N)>
+ {
+ typedef typename fusion::result_of::value_at<
+ typename ComponentTraits::port_result_types,
+ N>::type type;
+ };
+
+ template<typename Component, typename N>
+ typename result<get_port_impl(Component &, N)>::type
+ operator()(Component &c, N)
+ {
+ return fusion::at<N>(c.get_ports(c));
+ }
+ };
+
+} // namespace extension
+#endif // DOXYGEN_DOCS_BUILD
+
+}}
+
+#endif // BOOST_DATAFLOW_SUPPORT_FUSION_COMPONENT_HPP
Modified: sandbox/SOC/2007/signals/boost/dataflow/support/keyed_port.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support/keyed_port.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/keyed_port.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -8,6 +8,7 @@
#include <boost/dataflow/support/binary_operation.hpp>
+#include <boost/utility/result_of.hpp>
#include <boost/static_assert.hpp>
#include <boost/type_traits/integral_constant.hpp>
#include <boost/type_traits/is_same.hpp>
@@ -20,91 +21,65 @@
template<typename KeyedPortTag, typename KeyPortTag>
struct get_keyed_port_impl
{
- typedef void result_type;
+ typedef detail::not_specialized result_type;
template<typename KeyedPort, typename Key>
- void operator()(KeyedPort &)
+ result_type operator()(KeyedPort &)
{
// Error: get_keyed_port_impl has not been implemented
// for KeyedPortTag and KeyPort.
BOOST_STATIC_ASSERT(sizeof(KeyedPort)==0);
+ return result_type();
}
};
}
-/*template<typename Mechanism, typename PortCategory, typename KeyPort, typename T>
-inline typename result_of<
+template<typename KeyPortTraits, typename Tag, typename KeyedPort>
+inline typename boost::result_of<
extension::get_keyed_port_impl<
- typename port_traits_of<
- Mechanism, PortCategory, typename boost::remove_cv<T>::type
- >::type,
- typename port_traits_of<
- Mechanism, typename PortCategory::complement, typename boost::remove_cv<KeyPort>::type
- >::type
- > (T &)
->::type
-get_keyed_port(T1 &t1, T2 &t2)
-{
- return extension::get_keyed_port_impl<
- typename port_traits_of<
- Mechanism, PortCategory, typename boost::remove_cv<T1>::type
- >::type,
- typename port_traits_of<
- Mechanism, typename PortCategory::complement, typename boost::remove_cv<T2>::type
- >::type
- >()(t1, t2);
-}*/
-
-template<typename KeyPortTraits, typename KeyPort>
-inline typename result_of<
- extension::get_keyed_port_impl<
- typename port_traits_of<
- typename KeyPortTraits::mechanism,
- typename KeyPortTraits::category::complement,
- typename boost::remove_cv<KeyPort>::type
- >::type,
+ typename port_traits_of<KeyedPort, Tag>::type,
KeyPortTraits
- > (KeyPort &)
+ > (KeyedPort &)
>::type
-get_keyed_port(KeyPort &p)
+get_keyed_port(KeyedPort &p)
{
return extension::get_keyed_port_impl<
- typename port_traits_of<
- typename KeyPortTraits::mechanism,
- typename KeyPortTraits::category::complement,
- typename boost::remove_cv<KeyPort>::type
- >::type,
+ typename port_traits_of<KeyedPort, Tag>::type,
KeyPortTraits
>()(p);
}
namespace extension
{
- template<typename Operation, typename ProducerTag, typename ConsumerTag>
- struct binary_operation_impl<Operation, ProducerTag, ConsumerTag,
+ template<typename ProducerTag, typename ConsumerTag, typename Operation>
+ struct binary_operation_impl<ProducerTag, ConsumerTag, Operation,
typename enable_if<
boost::is_same<typename ProducerTag::concept, concepts::keyed_port>
>::type >
{
+ typedef void result_type;
+
template<typename Producer, typename Consumer>
void operator()(Producer &producer, Consumer &consumer)
{
- binary_operation<Operation, typename ProducerTag::mechanism>
- (get_keyed_port<ConsumerTag>(producer), consumer);
+ binary_operation<Operation, typename ConsumerTag::tag>
+ (get_keyed_port<ConsumerTag, typename ProducerTag::tag>(producer), consumer);
}
};
- template<typename Operation, typename ProducerTag, typename ConsumerTag>
- struct binary_operation_impl<Operation, ProducerTag, ConsumerTag,
+ template<typename ProducerTag, typename ConsumerTag, typename Operation>
+ struct binary_operation_impl<ProducerTag, ConsumerTag, Operation,
typename enable_if<
boost::is_same<typename ConsumerTag::concept, concepts::keyed_port>
>::type >
{
+ typedef void result_type;
+
template<typename Producer, typename Consumer>
void operator()(Producer &producer, Consumer &consumer)
{
- binary_operation<Operation, typename ProducerTag::mechanism>
- (producer, get_keyed_port<ProducerTag>(consumer));
+ binary_operation<Operation, typename ProducerTag::tag>
+ (producer, get_keyed_port<ProducerTag, typename ConsumerTag::tag>(consumer));
}
};
Modified: sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -6,198 +6,8 @@
#ifndef BOOST_DATAFLOW_SUPPORT_PORT_HPP
#define BOOST_DATAFLOW_SUPPORT_PORT_HPP
-#include <boost/dataflow/detail/enable_if_defined.hpp>
-#include <boost/dataflow/support/tags.hpp>
-#include <boost/dataflow/utility/underlying_type.hpp>
-
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/is_sequence.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-
-
-namespace boost { namespace dataflow {
-
-/// Boolean metafunction determining whether a type is a PortCategory.
-template<typename T, typename Enable=void>
-struct is_port_category : public mpl::false_
-{};
-
-template<typename PortCategory>
-struct is_port_category<
- PortCategory,
- typename detail::enable_if_defined<
- typename PortCategory::complement
- >::type>
- : public mpl::true_
-{};
-
-/// Convenience class for PortTraits types.
-template<typename Mechanism, typename PortCategory, typename PortConcept>
-struct port_traits
-{
- typedef Mechanism mechanism;
- typedef PortCategory category;
- typedef PortConcept concept;
-};
-
-namespace detail {
- struct enable_guard;
-}
-
-/// Boolean metafunction determining whether a type is a PortTraits.
-template<typename PortTraits, typename Enable=detail::enable_guard>
-struct is_port_traits : public mpl::false_
-{};
-
-template<typename PortTraits>
-struct is_port_traits<PortTraits,
- typename detail::enable_if_defined<
- detail::all_of<
- typename PortTraits::mechanism,
- typename PortTraits::category,
- typename PortTraits::concept
- >,
- detail::enable_guard
- >::type>
- : public mpl::true_
-{
- BOOST_MPL_ASSERT(( is_port_category<typename PortTraits::category> ));
-};
-
-/// Metafunction returning the PortTraits of a type.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct port_traits_of
-{};
-
-/// Specialization allowing intrusive specification of the PortTraits.
-template<typename Mechanism, typename PortCategory, typename T>
-struct port_traits_of<Mechanism, PortCategory, T,
- typename enable_if<
- mpl::and_<
- mpl::not_<mpl::is_sequence<typename T::port_traits> >,
- is_same<Mechanism, typename T::port_traits::mechanism>,
- is_same<PortCategory, typename T::port_traits::category>
- >
- >::type
->
-{
- typedef typename T::port_traits type;
- BOOST_MPL_ASSERT(( is_port_traits<type> ));
-};
-
-} }
-
-/// Specialization allowing intrusive specification of a sequence of PortTraits.
-#include <boost/dataflow/support/port/detail/port_traits_sequence.hpp>
-
-namespace boost { namespace dataflow {
-
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct register_port_traits
-{};
-
-/// Specialization allowing non-intrusive specification of the PortTraits.
-template<typename Mechanism, typename PortCategory, typename T>
-struct port_traits_of<Mechanism, PortCategory, T,
- typename detail::enable_if_defined<
- typename register_port_traits<
- Mechanism,
- PortCategory,
- typename remove_cv<T>::type
- >::type
- >::type
->
-{
- typedef typename register_port_traits<
- Mechanism,
- PortCategory,
- typename remove_cv<T>::type
- >::type type;
- BOOST_MPL_ASSERT(( is_port_traits<type> ));
-};
-
-/// Boolean metafunction determining whether a type is a Port.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct is_port
- : public mpl::false_ {};
-
-template<typename Mechanism, typename PortCategory, typename T>
-struct is_port<Mechanism, PortCategory, T,
- typename detail::enable_if_defined<
- typename port_traits_of<Mechanism,PortCategory,T>::type
- >::type >
- : public mpl::true_ {};
-
-/// Convenience base class for Port types.
-template<typename PortTraits>
-struct port
-{
- typedef PortTraits port_traits;
-};
-
-// trait determining whether a type is a port proxy.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct is_proxy_port
- : public mpl::false_ {};
-
-namespace extension
-{
- template<typename Traits>
- struct get_port_impl;
-}
-
-// T might be a reference to a Port type
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct get_port_result_type
-{
- typedef typename add_reference<T>::type type;
-};
-
-template<typename Mechanism, typename PortCategory, typename T>
-typename disable_if<
- is_proxy_port<Mechanism, PortCategory, T>,
- typename get_port_result_type<Mechanism, PortCategory, T>::type
->::type
-get_port(T &p)
-{
- return p;
-}
-
-} } // namespace boost::dataflow
-
-/// Macro simplifying non-intrusive specification of a type's PortTraits.
-#define DATAFLOW_PORT_TRAITS(Type,PortTraits) \
-namespace boost { namespace dataflow { \
-template<> \
-struct register_port_traits< \
- PortTraits::mechanism, \
- PortTraits::category, \
- Type> \
-{ \
- typedef PortTraits type; \
- BOOST_MPL_ASSERT(( is_port_traits<type> )); \
-}; \
-}}
-
-/// Macro simplifying non-intrusive specification of multiple types'
-/// PortTraits, using a boost::enable_if condition.
-#define DATAFLOW_PORT_TRAITS_ENABLE_IF(Type,Cond,PortTraits) \
-namespace boost { namespace dataflow { \
-template<typename Type> \
-struct register_port_traits< \
- typename PortTraits::mechanism, \
- typename PortTraits::category, \
- Type, \
- typename boost::enable_if< Cond >::type> \
-{ \
- typedef PortTraits type; \
- BOOST_MPL_ASSERT(( is_port_traits<type> )); \
-}; \
-}}
+#include <boost/dataflow/support/port/traits.hpp>
+#include <boost/dataflow/support/port/port.hpp>
+#include <boost/dataflow/support/port/default_port_provider.hpp>
#endif // BOOST_DATAFLOW_SUPPORT_PORT_HPP
Copied: sandbox/SOC/2007/signals/boost/dataflow/support/port/category.hpp (from r41445, /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp)
==============================================================================
--- /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/port/category.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -3,30 +3,32 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#ifndef BOOST_DATAFLOW_SUPPORT_PORT_HPP
-#define BOOST_DATAFLOW_SUPPORT_PORT_HPP
+#ifndef BOOST_DATAFLOW_SUPPORT_PORT_CATEGORY_HPP
+#define BOOST_DATAFLOW_SUPPORT_PORT_CATEGORY_HPP
#include <boost/dataflow/detail/enable_if_defined.hpp>
-#include <boost/dataflow/support/tags.hpp>
-#include <boost/dataflow/utility/underlying_type.hpp>
-
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/assert.hpp>
#include <boost/mpl/bool.hpp>
-#include <boost/mpl/is_sequence.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-
namespace boost { namespace dataflow {
-/// Boolean metafunction determining whether a type is a PortCategory.
+/// Boolean Metafunction determining whether a type is a PortCategory.
+/** is_port_category<T> is an Integral Constant of type bool.
+ It evaluates to true if T models PortCategory, false otherwise.
+*/
template<typename T, typename Enable=void>
struct is_port_category : public mpl::false_
-{};
+{
+#ifdef DOXYGEN_DOCS_BUILD
+ /// Integral Constant value type
+ typedef bool value_type;
+ /// true if T models PortCategory, false otherwise.
+ typedef detail::unspecified value;
+ /// Integral Constant
+ typedef detail::unspecified type;
+#endif
+};
+/// INTERNAL ONLY
template<typename PortCategory>
struct is_port_category<
PortCategory,
@@ -36,168 +38,6 @@
: public mpl::true_
{};
-/// Convenience class for PortTraits types.
-template<typename Mechanism, typename PortCategory, typename PortConcept>
-struct port_traits
-{
- typedef Mechanism mechanism;
- typedef PortCategory category;
- typedef PortConcept concept;
-};
-
-namespace detail {
- struct enable_guard;
-}
-
-/// Boolean metafunction determining whether a type is a PortTraits.
-template<typename PortTraits, typename Enable=detail::enable_guard>
-struct is_port_traits : public mpl::false_
-{};
-
-template<typename PortTraits>
-struct is_port_traits<PortTraits,
- typename detail::enable_if_defined<
- detail::all_of<
- typename PortTraits::mechanism,
- typename PortTraits::category,
- typename PortTraits::concept
- >,
- detail::enable_guard
- >::type>
- : public mpl::true_
-{
- BOOST_MPL_ASSERT(( is_port_category<typename PortTraits::category> ));
-};
-
-/// Metafunction returning the PortTraits of a type.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct port_traits_of
-{};
-
-/// Specialization allowing intrusive specification of the PortTraits.
-template<typename Mechanism, typename PortCategory, typename T>
-struct port_traits_of<Mechanism, PortCategory, T,
- typename enable_if<
- mpl::and_<
- mpl::not_<mpl::is_sequence<typename T::port_traits> >,
- is_same<Mechanism, typename T::port_traits::mechanism>,
- is_same<PortCategory, typename T::port_traits::category>
- >
- >::type
->
-{
- typedef typename T::port_traits type;
- BOOST_MPL_ASSERT(( is_port_traits<type> ));
-};
-
-} }
-
-/// Specialization allowing intrusive specification of a sequence of PortTraits.
-#include <boost/dataflow/support/port/detail/port_traits_sequence.hpp>
-
-namespace boost { namespace dataflow {
-
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct register_port_traits
-{};
-
-/// Specialization allowing non-intrusive specification of the PortTraits.
-template<typename Mechanism, typename PortCategory, typename T>
-struct port_traits_of<Mechanism, PortCategory, T,
- typename detail::enable_if_defined<
- typename register_port_traits<
- Mechanism,
- PortCategory,
- typename remove_cv<T>::type
- >::type
- >::type
->
-{
- typedef typename register_port_traits<
- Mechanism,
- PortCategory,
- typename remove_cv<T>::type
- >::type type;
- BOOST_MPL_ASSERT(( is_port_traits<type> ));
-};
-
-/// Boolean metafunction determining whether a type is a Port.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct is_port
- : public mpl::false_ {};
-
-template<typename Mechanism, typename PortCategory, typename T>
-struct is_port<Mechanism, PortCategory, T,
- typename detail::enable_if_defined<
- typename port_traits_of<Mechanism,PortCategory,T>::type
- >::type >
- : public mpl::true_ {};
-
-/// Convenience base class for Port types.
-template<typename PortTraits>
-struct port
-{
- typedef PortTraits port_traits;
-};
-
-// trait determining whether a type is a port proxy.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct is_proxy_port
- : public mpl::false_ {};
-
-namespace extension
-{
- template<typename Traits>
- struct get_port_impl;
-}
-
-// T might be a reference to a Port type
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct get_port_result_type
-{
- typedef typename add_reference<T>::type type;
-};
-
-template<typename Mechanism, typename PortCategory, typename T>
-typename disable_if<
- is_proxy_port<Mechanism, PortCategory, T>,
- typename get_port_result_type<Mechanism, PortCategory, T>::type
->::type
-get_port(T &p)
-{
- return p;
-}
-
} } // namespace boost::dataflow
-/// Macro simplifying non-intrusive specification of a type's PortTraits.
-#define DATAFLOW_PORT_TRAITS(Type,PortTraits) \
-namespace boost { namespace dataflow { \
-template<> \
-struct register_port_traits< \
- PortTraits::mechanism, \
- PortTraits::category, \
- Type> \
-{ \
- typedef PortTraits type; \
- BOOST_MPL_ASSERT(( is_port_traits<type> )); \
-}; \
-}}
-
-/// Macro simplifying non-intrusive specification of multiple types'
-/// PortTraits, using a boost::enable_if condition.
-#define DATAFLOW_PORT_TRAITS_ENABLE_IF(Type,Cond,PortTraits) \
-namespace boost { namespace dataflow { \
-template<typename Type> \
-struct register_port_traits< \
- typename PortTraits::mechanism, \
- typename PortTraits::category, \
- Type, \
- typename boost::enable_if< Cond >::type> \
-{ \
- typedef PortTraits type; \
- BOOST_MPL_ASSERT(( is_port_traits<type> )); \
-}; \
-}}
-
-#endif // BOOST_DATAFLOW_SUPPORT_PORT_HPP
+#endif // BOOST_DATAFLOW_SUPPORT_PORT_CATEGORY_HPP
Copied: sandbox/SOC/2007/signals/boost/dataflow/support/port/default_port_provider.hpp (from r41445, /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp)
==============================================================================
--- /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/port/default_port_provider.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -3,201 +3,51 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#ifndef BOOST_DATAFLOW_SUPPORT_PORT_HPP
-#define BOOST_DATAFLOW_SUPPORT_PORT_HPP
+#ifndef BOOST_DATAFLOW_SUPPORT_PORT_DEFAULT_PORT_PROVIDER_HPP
+#define BOOST_DATAFLOW_SUPPORT_PORT_DEFAULT_PORT_PROVIDER_HPP
-#include <boost/dataflow/detail/enable_if_defined.hpp>
+#include <boost/dataflow/support/default_port_provider.hpp>
+#include <boost/dataflow/support/port/port.hpp>
#include <boost/dataflow/support/tags.hpp>
-#include <boost/dataflow/utility/underlying_type.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/at.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/bool.hpp>
-#include <boost/mpl/is_sequence.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-
+#include <boost/utility/enable_if.hpp>
namespace boost { namespace dataflow {
-/// Boolean metafunction determining whether a type is a PortCategory.
-template<typename T, typename Enable=void>
-struct is_port_category : public mpl::false_
-{};
-
-template<typename PortCategory>
-struct is_port_category<
- PortCategory,
- typename detail::enable_if_defined<
- typename PortCategory::complement
- >::type>
- : public mpl::true_
-{};
-
-/// Convenience class for PortTraits types.
-template<typename Mechanism, typename PortCategory, typename PortConcept>
-struct port_traits
-{
- typedef Mechanism mechanism;
- typedef PortCategory category;
- typedef PortConcept concept;
-};
-
-namespace detail {
- struct enable_guard;
-}
-
-/// Boolean metafunction determining whether a type is a PortTraits.
-template<typename PortTraits, typename Enable=detail::enable_guard>
-struct is_port_traits : public mpl::false_
-{};
-
-template<typename PortTraits>
-struct is_port_traits<PortTraits,
- typename detail::enable_if_defined<
- detail::all_of<
- typename PortTraits::mechanism,
- typename PortTraits::category,
- typename PortTraits::concept
- >,
- detail::enable_guard
- >::type>
- : public mpl::true_
-{
- BOOST_MPL_ASSERT(( is_port_category<typename PortTraits::category> ));
-};
-
-/// Metafunction returning the PortTraits of a type.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct port_traits_of
+template<typename T, typename Tag>
+struct traits_of<T, Tag, typename enable_if<is_port<T, Tag> >::type>
+ : public port_traits_of<T, Tag>
{};
-/// Specialization allowing intrusive specification of the PortTraits.
-template<typename Mechanism, typename PortCategory, typename T>
-struct port_traits_of<Mechanism, PortCategory, T,
- typename enable_if<
- mpl::and_<
- mpl::not_<mpl::is_sequence<typename T::port_traits> >,
- is_same<Mechanism, typename T::port_traits::mechanism>,
- is_same<PortCategory, typename T::port_traits::category>
- >
- >::type
->
-{
- typedef typename T::port_traits type;
- BOOST_MPL_ASSERT(( is_port_traits<type> ));
-};
+namespace extension {
-} }
-
-/// Specialization allowing intrusive specification of a sequence of PortTraits.
-#include <boost/dataflow/support/port/detail/port_traits_sequence.hpp>
-
-namespace boost { namespace dataflow {
-
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct register_port_traits
-{};
-
-/// Specialization allowing non-intrusive specification of the PortTraits.
-template<typename Mechanism, typename PortCategory, typename T>
-struct port_traits_of<Mechanism, PortCategory, T,
- typename detail::enable_if_defined<
- typename register_port_traits<
- Mechanism,
- PortCategory,
- typename remove_cv<T>::type
- >::type
- >::type
->
-{
- typedef typename register_port_traits<
- Mechanism,
- PortCategory,
- typename remove_cv<T>::type
- >::type type;
- BOOST_MPL_ASSERT(( is_port_traits<type> ));
-};
-
-/// Boolean metafunction determining whether a type is a Port.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct is_port
- : public mpl::false_ {};
-
-template<typename Mechanism, typename PortCategory, typename T>
-struct is_port<Mechanism, PortCategory, T,
- typename detail::enable_if_defined<
- typename port_traits_of<Mechanism,PortCategory,T>::type
- >::type >
- : public mpl::true_ {};
-
-/// Convenience base class for Port types.
-template<typename PortTraits>
-struct port
-{
- typedef PortTraits port_traits;
-};
-
-// trait determining whether a type is a port proxy.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct is_proxy_port
- : public mpl::false_ {};
-
-namespace extension
-{
- template<typename Traits>
- struct get_port_impl;
-}
-
-// T might be a reference to a Port type
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct get_port_result_type
-{
- typedef typename add_reference<T>::type type;
-};
-
-template<typename Mechanism, typename PortCategory, typename T>
-typename disable_if<
- is_proxy_port<Mechanism, PortCategory, T>,
- typename get_port_result_type<Mechanism, PortCategory, T>::type
->::type
-get_port(T &p)
-{
- return p;
-}
+ template<typename PortTraits, typename Direction, typename Mechanism>
+ struct get_default_port_impl<
+ PortTraits,
+ Direction,
+ Mechanism,
+ typename enable_if<is_port_traits<PortTraits> >::type >
+ {
+ template<typename FArgs>
+ struct result;
+
+ template<typename F, typename Port>
+ struct result<F(Port &)>
+ {
+ typedef Port & type;
+ };
+
+ template<typename Port>
+ Port &operator()(Port &p)
+ {
+ return p;
+ }
+ };
+
+} // namespace extension
} } // namespace boost::dataflow
-/// Macro simplifying non-intrusive specification of a type's PortTraits.
-#define DATAFLOW_PORT_TRAITS(Type,PortTraits) \
-namespace boost { namespace dataflow { \
-template<> \
-struct register_port_traits< \
- PortTraits::mechanism, \
- PortTraits::category, \
- Type> \
-{ \
- typedef PortTraits type; \
- BOOST_MPL_ASSERT(( is_port_traits<type> )); \
-}; \
-}}
-
-/// Macro simplifying non-intrusive specification of multiple types'
-/// PortTraits, using a boost::enable_if condition.
-#define DATAFLOW_PORT_TRAITS_ENABLE_IF(Type,Cond,PortTraits) \
-namespace boost { namespace dataflow { \
-template<typename Type> \
-struct register_port_traits< \
- typename PortTraits::mechanism, \
- typename PortTraits::category, \
- Type, \
- typename boost::enable_if< Cond >::type> \
-{ \
- typedef PortTraits type; \
- BOOST_MPL_ASSERT(( is_port_traits<type> )); \
-}; \
-}}
-
-#endif // BOOST_DATAFLOW_SUPPORT_PORT_HPP
+#endif // BOOST_DATAFLOW_SUPPORT_PORT_DEFAULT_PORT_PROVIDER_HPP
Modified: sandbox/SOC/2007/signals/boost/dataflow/support/port/detail/port_traits_sequence.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support/port/detail/port_traits_sequence.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/port/detail/port_traits_sequence.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -10,25 +10,22 @@
#include <boost/preprocessor/iteration/iterate.hpp>
+ #include <boost/mpl/at.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/less.hpp>
#include <boost/mpl/size.hpp>
+
namespace boost { namespace dataflow {
namespace detail {
- template<typename Mechanism, typename T, int N>
- struct lazy_is_same_port_traits_mechanism
+ template<typename Tag, typename T, int N>
+ struct lazy_is_same_port_traits_tag
{
- typedef typename is_same<Mechanism, typename mpl::at_c<typename T::port_traits, N>::type::mechanism>::type type;
+ typedef typename is_same<Tag, typename mpl::at_c<typename T::port_traits, N>::type::tag>::type type;
};
- template<typename PortCategory, typename T, int N>
- struct lazy_is_same_port_traits_port_category
- {
- typedef typename is_same<PortCategory, typename mpl::at_c<typename T::port_traits, N>::type::category>::type type;
- };
}
} }
@@ -43,8 +40,10 @@
namespace boost { namespace dataflow {
-template<typename Mechanism, typename PortCategory, typename T>
-struct port_traits_of<Mechanism, PortCategory, T,
+template<typename T, typename Tag>
+struct port_traits_of<
+ T,
+ Tag,
typename enable_if<
mpl::and_<
mpl::is_sequence<typename T::port_traits>,
@@ -52,8 +51,7 @@
mpl::int_<BOOST_PP_ITERATION()>,
typename mpl::size<typename T::port_traits>::type
>::type,
- detail::lazy_is_same_port_traits_mechanism<Mechanism, T, BOOST_PP_ITERATION()>,
- detail::lazy_is_same_port_traits_port_category<PortCategory, T, BOOST_PP_ITERATION()>
+ detail::lazy_is_same_port_traits_tag<Tag, T, BOOST_PP_ITERATION()>
>
>::type
>
Copied: sandbox/SOC/2007/signals/boost/dataflow/support/port/port.hpp (from r41445, /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp)
==============================================================================
--- /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/port/port.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -3,201 +3,54 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#ifndef BOOST_DATAFLOW_SUPPORT_PORT_HPP
-#define BOOST_DATAFLOW_SUPPORT_PORT_HPP
+#ifndef BOOST_DATAFLOW_SUPPORT_PORT_PORT_HPP
+#define BOOST_DATAFLOW_SUPPORT_PORT_PORT_HPP
#include <boost/dataflow/detail/enable_if_defined.hpp>
+#include <boost/dataflow/support/port/traits.hpp>
#include <boost/dataflow/support/tags.hpp>
-#include <boost/dataflow/utility/underlying_type.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/at.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/bool.hpp>
-#include <boost/mpl/is_sequence.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/add_reference.hpp>
-#include <boost/type_traits/remove_cv.hpp>
-
namespace boost { namespace dataflow {
-/// Boolean metafunction determining whether a type is a PortCategory.
-template<typename T, typename Enable=void>
-struct is_port_category : public mpl::false_
-{};
-
-template<typename PortCategory>
-struct is_port_category<
- PortCategory,
- typename detail::enable_if_defined<
- typename PortCategory::complement
- >::type>
- : public mpl::true_
-{};
-
-/// Convenience class for PortTraits types.
-template<typename Mechanism, typename PortCategory, typename PortConcept>
-struct port_traits
+/// Boolean Metafunction determining whether a type is a Port.
+/** is_port<T, Tag> is an Integral Constant of type bool.
+ It evaluates to true if T models Port, false otherwise.
+*/
+template<typename T, typename Tag=default_tag, typename Enable=void>
+struct is_port
+ : public mpl::false_
{
- typedef Mechanism mechanism;
- typedef PortCategory category;
- typedef PortConcept concept;
-};
-
-namespace detail {
- struct enable_guard;
-}
-
-/// Boolean metafunction determining whether a type is a PortTraits.
-template<typename PortTraits, typename Enable=detail::enable_guard>
-struct is_port_traits : public mpl::false_
-{};
-
-template<typename PortTraits>
-struct is_port_traits<PortTraits,
+#ifdef DOXYGEN_DOCS_BUILD
+ /// Integral Constant value type
+ typedef bool value_type;
+ /// true if T models Port, false otherwise.
+ typedef detail::unspecified value;
+ /// Integral Constant
+ typedef detail::unspecified type;
+#endif
+};
+
+/// INTERNAL ONLY
+template<typename T, typename Tag>
+struct is_port<
+ T,
+ Tag,
typename detail::enable_if_defined<
- detail::all_of<
- typename PortTraits::mechanism,
- typename PortTraits::category,
- typename PortTraits::concept
- >,
- detail::enable_guard
- >::type>
- : public mpl::true_
-{
- BOOST_MPL_ASSERT(( is_port_category<typename PortTraits::category> ));
-};
-
-/// Metafunction returning the PortTraits of a type.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct port_traits_of
-{};
-
-/// Specialization allowing intrusive specification of the PortTraits.
-template<typename Mechanism, typename PortCategory, typename T>
-struct port_traits_of<Mechanism, PortCategory, T,
- typename enable_if<
- mpl::and_<
- mpl::not_<mpl::is_sequence<typename T::port_traits> >,
- is_same<Mechanism, typename T::port_traits::mechanism>,
- is_same<PortCategory, typename T::port_traits::category>
- >
- >::type
->
-{
- typedef typename T::port_traits type;
- BOOST_MPL_ASSERT(( is_port_traits<type> ));
-};
-
-} }
-
-/// Specialization allowing intrusive specification of a sequence of PortTraits.
-#include <boost/dataflow/support/port/detail/port_traits_sequence.hpp>
-
-namespace boost { namespace dataflow {
-
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct register_port_traits
-{};
-
-/// Specialization allowing non-intrusive specification of the PortTraits.
-template<typename Mechanism, typename PortCategory, typename T>
-struct port_traits_of<Mechanism, PortCategory, T,
- typename detail::enable_if_defined<
- typename register_port_traits<
- Mechanism,
- PortCategory,
- typename remove_cv<T>::type
- >::type
- >::type
->
-{
- typedef typename register_port_traits<
- Mechanism,
- PortCategory,
- typename remove_cv<T>::type
- >::type type;
- BOOST_MPL_ASSERT(( is_port_traits<type> ));
-};
-
-/// Boolean metafunction determining whether a type is a Port.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct is_port
- : public mpl::false_ {};
-
-template<typename Mechanism, typename PortCategory, typename T>
-struct is_port<Mechanism, PortCategory, T,
- typename detail::enable_if_defined<
- typename port_traits_of<Mechanism,PortCategory,T>::type
- >::type >
+ typename port_traits_of<T, Tag>::type
+ >::type >
: public mpl::true_ {};
/// Convenience base class for Port types.
template<typename PortTraits>
struct port
{
+ /// PortTraits for the Port.
typedef PortTraits port_traits;
};
-// trait determining whether a type is a port proxy.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct is_proxy_port
- : public mpl::false_ {};
-
-namespace extension
-{
- template<typename Traits>
- struct get_port_impl;
-}
-
-// T might be a reference to a Port type
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct get_port_result_type
-{
- typedef typename add_reference<T>::type type;
-};
-
-template<typename Mechanism, typename PortCategory, typename T>
-typename disable_if<
- is_proxy_port<Mechanism, PortCategory, T>,
- typename get_port_result_type<Mechanism, PortCategory, T>::type
->::type
-get_port(T &p)
-{
- return p;
-}
-
} } // namespace boost::dataflow
-/// Macro simplifying non-intrusive specification of a type's PortTraits.
-#define DATAFLOW_PORT_TRAITS(Type,PortTraits) \
-namespace boost { namespace dataflow { \
-template<> \
-struct register_port_traits< \
- PortTraits::mechanism, \
- PortTraits::category, \
- Type> \
-{ \
- typedef PortTraits type; \
- BOOST_MPL_ASSERT(( is_port_traits<type> )); \
-}; \
-}}
-
-/// Macro simplifying non-intrusive specification of multiple types'
-/// PortTraits, using a boost::enable_if condition.
-#define DATAFLOW_PORT_TRAITS_ENABLE_IF(Type,Cond,PortTraits) \
-namespace boost { namespace dataflow { \
-template<typename Type> \
-struct register_port_traits< \
- typename PortTraits::mechanism, \
- typename PortTraits::category, \
- Type, \
- typename boost::enable_if< Cond >::type> \
-{ \
- typedef PortTraits type; \
- BOOST_MPL_ASSERT(( is_port_traits<type> )); \
-}; \
-}}
-
-#endif // BOOST_DATAFLOW_SUPPORT_PORT_HPP
+#endif // BOOST_DATAFLOW_SUPPORT_PORT_PORT_HPP
Added: sandbox/SOC/2007/signals/boost/dataflow/support/port/port_adapter.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/port/port_adapter.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -0,0 +1,44 @@
+// 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_SUPPORT_PORT_ADAPTER_HPP
+#define DATAFLOW_SUPPORT_PORT_ADAPTER_HPP
+
+#include <boost/dataflow/support/tags.hpp>
+#include <boost/dataflow/support/keyed_port.hpp>
+
+namespace boost { namespace dataflow {
+
+template<typename T, typename PortTraits, typename Tag=default_tag>
+struct port_adapter_traits : public PortTraits
+{};
+
+template<typename T, typename PortTraits, typename Tag=default_tag>
+struct port_adapter : public port<port_adapter_traits<T, PortTraits, Tag> >
+{
+ port_adapter(T & object) : object(object) {}
+ T & object;
+};
+
+namespace extension
+{
+ template<typename T, typename PortTraits, typename Tag, typename KeyPortTraits>
+ struct get_keyed_port_impl<port_adapter_traits<T, PortTraits, Tag>, KeyPortTraits >
+ {
+ typedef typename boost::result_of<
+ get_keyed_port_impl<PortTraits, KeyPortTraits>(T &)
+ >::type result_type;
+
+ template<typename PortAdapter>
+ result_type operator()(PortAdapter &adapter)
+ {
+ return get_keyed_port_impl<PortTraits, KeyPortTraits>()(adapter.object);
+ };
+ };
+}
+
+}} // namespace boost::dataflow
+
+#endif // DATAFLOW_SUPPORT_PORT_ADAPTER_HPP
\ No newline at end of file
Copied: sandbox/SOC/2007/signals/boost/dataflow/support/port/traits.hpp (from r41445, /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp)
==============================================================================
--- /sandbox/SOC/2007/signals/boost/dataflow/support/port.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/port/traits.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -3,201 +3,163 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#ifndef BOOST_DATAFLOW_SUPPORT_PORT_HPP
-#define BOOST_DATAFLOW_SUPPORT_PORT_HPP
+#ifndef BOOST_DATAFLOW_SUPPORT_PORT_TRAITS_HPP
+#define BOOST_DATAFLOW_SUPPORT_PORT_TRAITS_HPP
#include <boost/dataflow/detail/enable_if_defined.hpp>
+#include <boost/dataflow/support/port/category.hpp>
#include <boost/dataflow/support/tags.hpp>
-#include <boost/dataflow/utility/underlying_type.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/at.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/mpl/is_sequence.hpp>
+#include <boost/type_traits/is_base_of.hpp>
#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/remove_cv.hpp>
-
namespace boost { namespace dataflow {
-/// Boolean metafunction determining whether a type is a PortCategory.
-template<typename T, typename Enable=void>
-struct is_port_category : public mpl::false_
-{};
-
-template<typename PortCategory>
-struct is_port_category<
- PortCategory,
- typename detail::enable_if_defined<
- typename PortCategory::complement
- >::type>
- : public mpl::true_
-{};
-
/// Convenience class for PortTraits types.
-template<typename Mechanism, typename PortCategory, typename PortConcept>
+template<typename PortCategory, typename PortConcept=concepts::port,
+ typename Tag=default_tag>
struct port_traits
{
- typedef Mechanism mechanism;
- typedef PortCategory category;
+ /// The PortCategory of the port.
+ typedef PortCategory category;
+ /// The PortConcept of the port.
typedef PortConcept concept;
+ /// The Tag of the port.
+ typedef Tag tag;
+ /// INTERNAL ONLY
+ BOOST_MPL_ASSERT(( is_port_category<PortCategory> ));
+ /// INTERNAL ONLY
+ BOOST_MPL_ASSERT(( is_base_of<concepts::port, PortConcept> ));
};
namespace detail {
struct enable_guard;
}
-/// Boolean metafunction determining whether a type is a PortTraits.
+/// Boolean Metafunction determining whether a type is a PortTraits.
template<typename PortTraits, typename Enable=detail::enable_guard>
struct is_port_traits : public mpl::false_
-{};
+{
+ /// INTERNAL ONLY
+ BOOST_MPL_ASSERT(( is_same<Enable, detail::enable_guard> ));
+};
+/// INTERNAL ONLY
template<typename PortTraits>
struct is_port_traits<PortTraits,
typename detail::enable_if_defined<
detail::all_of<
- typename PortTraits::mechanism,
typename PortTraits::category,
- typename PortTraits::concept
+ typename PortTraits::concept,
+ typename PortTraits::tag
>,
detail::enable_guard
>::type>
: public mpl::true_
{
+ /// INTERNAL ONLY
BOOST_MPL_ASSERT(( is_port_category<typename PortTraits::category> ));
+ /// INTERNAL ONLY
+ BOOST_MPL_ASSERT((is_base_of<concepts::port, typename PortTraits::concept>));
};
/// Metafunction returning the PortTraits of a type.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
+template<typename T, typename Tag=default_tag, typename Enable=void>
struct port_traits_of
-{};
+{
+#ifdef DOXYGEN_DOCS_BUILD
+ typedef detail::unspecified type; ///< PortTraits type.
+#endif
+};
-/// Specialization allowing intrusive specification of the PortTraits.
-template<typename Mechanism, typename PortCategory, typename T>
-struct port_traits_of<Mechanism, PortCategory, T,
+/// INTERNAL ONLY
+/** Specialization allowing intrusive specification of the PortTraits.
+*/
+template<typename T>
+struct port_traits_of<
+ T,
+ typename T::port_traits::tag,
typename enable_if<
- mpl::and_<
- mpl::not_<mpl::is_sequence<typename T::port_traits> >,
- is_same<Mechanism, typename T::port_traits::mechanism>,
- is_same<PortCategory, typename T::port_traits::category>
- >
+ mpl::not_<mpl::is_sequence<typename T::port_traits> >
>::type
>
{
+ /// INTERNAL ONLY
typedef typename T::port_traits type;
+ /// INTERNAL ONLY
BOOST_MPL_ASSERT(( is_port_traits<type> ));
};
} }
-/// Specialization allowing intrusive specification of a sequence of PortTraits.
+// Specialization allowing intrusive specification of a sequence of PortTraits.
#include <boost/dataflow/support/port/detail/port_traits_sequence.hpp>
namespace boost { namespace dataflow {
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
+/// Allows registration of PortTraits for all cv-qualified versions of a type.
+template<typename T, typename Tag=default_tag, typename Enable=void>
struct register_port_traits
{};
-/// Specialization allowing non-intrusive specification of the PortTraits.
-template<typename Mechanism, typename PortCategory, typename T>
-struct port_traits_of<Mechanism, PortCategory, T,
+
+// Specialization allowing non-intrusive specification of the PortTraits.
+
+/// INTERNAL ONLY
+template<typename T, typename Tag>
+struct port_traits_of<
+ T,
+ Tag,
typename detail::enable_if_defined<
typename register_port_traits<
- Mechanism,
- PortCategory,
- typename remove_cv<T>::type
+ typename remove_cv<T>::type,
+ Tag
>::type
>::type
>
{
- typedef typename register_port_traits<
- Mechanism,
- PortCategory,
- typename remove_cv<T>::type
+ /// INTERNAL ONLY
+ typedef
+ typename register_port_traits<
+ typename remove_cv<T>::type,
+ Tag
>::type type;
+ /// INTERNAL ONLY
BOOST_MPL_ASSERT(( is_port_traits<type> ));
};
-/// Boolean metafunction determining whether a type is a Port.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct is_port
- : public mpl::false_ {};
-
-template<typename Mechanism, typename PortCategory, typename T>
-struct is_port<Mechanism, PortCategory, T,
- typename detail::enable_if_defined<
- typename port_traits_of<Mechanism,PortCategory,T>::type
- >::type >
- : public mpl::true_ {};
-
-/// Convenience base class for Port types.
-template<typename PortTraits>
-struct port
-{
- typedef PortTraits port_traits;
-};
-
-// trait determining whether a type is a port proxy.
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct is_proxy_port
- : public mpl::false_ {};
-
-namespace extension
-{
- template<typename Traits>
- struct get_port_impl;
-}
-
-// T might be a reference to a Port type
-template<typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct get_port_result_type
-{
- typedef typename add_reference<T>::type type;
-};
-
-template<typename Mechanism, typename PortCategory, typename T>
-typename disable_if<
- is_proxy_port<Mechanism, PortCategory, T>,
- typename get_port_result_type<Mechanism, PortCategory, T>::type
->::type
-get_port(T &p)
-{
- return p;
-}
-
} } // namespace boost::dataflow
/// Macro simplifying non-intrusive specification of a type's PortTraits.
-#define DATAFLOW_PORT_TRAITS(Type,PortTraits) \
-namespace boost { namespace dataflow { \
-template<> \
-struct register_port_traits< \
- PortTraits::mechanism, \
- PortTraits::category, \
- Type> \
-{ \
- typedef PortTraits type; \
+#define DATAFLOW_PORT_TRAITS(Type,PortTraits) \
+namespace boost { namespace dataflow { \
+template<> \
+struct register_port_traits< \
+ Type, \
+ PortTraits::tag> \
+{ \
+ typedef PortTraits type; \
BOOST_MPL_ASSERT(( is_port_traits<type> )); \
-}; \
+}; \
}}
/// Macro simplifying non-intrusive specification of multiple types'
/// PortTraits, using a boost::enable_if condition.
-#define DATAFLOW_PORT_TRAITS_ENABLE_IF(Type,Cond,PortTraits) \
-namespace boost { namespace dataflow { \
-template<typename Type> \
-struct register_port_traits< \
- typename PortTraits::mechanism, \
- typename PortTraits::category, \
- Type, \
- typename boost::enable_if< Cond >::type> \
-{ \
- typedef PortTraits type; \
- BOOST_MPL_ASSERT(( is_port_traits<type> )); \
-}; \
+#define DATAFLOW_PORT_TRAITS_ENABLE_IF(Type,Cond,PortTraits) \
+namespace boost { namespace dataflow { \
+template<typename Type> \
+struct register_port_traits< \
+ Type, \
+ PortTraits::tag, \
+ typename boost::enable_if< Cond >::type> \
+{ \
+ typedef PortTraits type; \
+ BOOST_MPL_ASSERT(( is_port_traits<type> )); \
+}; \
}}
-#endif // BOOST_DATAFLOW_SUPPORT_PORT_HPP
+#endif // BOOST_DATAFLOW_SUPPORT_PORT_TRAITS_HPP
Modified: sandbox/SOC/2007/signals/boost/dataflow/support/reflective_component.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support/reflective_component.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/reflective_component.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -22,7 +22,7 @@
namespace extension {
template<typename ComponentTraits, typename Enable=void>
- struct get_component_port_impl
+ struct get_port_impl
{
typedef void result_type;
@@ -34,7 +34,7 @@
template<typename Component, typename T>
void operator()(Component &, T)
{
- // Error: get_component_port_impl has not been
+ // Error: get_port_impl has not been
// implemented for ComponentTraits.
BOOST_STATIC_ASSERT(sizeof(Component)==0);
}
@@ -43,20 +43,20 @@
} // namespace extension
template<typename Mechanism, typename T, typename Component>
-struct get_component_port_result_type
+struct get_port_result_type
{
typedef typename result_of<
- extension::get_component_port_impl<
+ extension::get_port_impl<
typename component_traits_of<Mechanism, Component>::type
>(Component &, T)>::type type;
};
template<typename Mechanism, typename T, typename Component>
-typename get_component_port_result_type<Mechanism, T, Component>::type
-get_component_port(Component &component)
+typename get_port_result_type<Mechanism, T, Component>::type
+get_port(Component &component)
{
return
- extension::get_component_port_impl<
+ extension::get_port_impl<
typename component_traits_of<Mechanism, Component>::type
>()(component, T());
}
Modified: sandbox/SOC/2007/signals/boost/dataflow/support/tags.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/support/tags.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/support/tags.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -9,36 +9,63 @@
namespace boost { namespace dataflow {
+/// The default Tag argument for Dataflow templates.
+struct default_tag {};
+/// The default Mechanism argument for Dataflow templates.
+struct default_mechanism {};
+
/// PortCategory types.
namespace ports
{
struct producer;
struct consumer;
+ /// producer PortCategory.
struct producer
{
- typedef consumer complement;
+ typedef consumer complement; ///< complement PortCategory type.
};
+ /// consumer PortCategory.
struct consumer
{
- typedef producer complement;
+ typedef producer complement; ///< complement PortCategory type.
};
}
namespace concepts
{
- /// Tag
+ /// PortConcept type specifying the Port concept.
struct port {};
- struct keyed_port {};
- struct complemented_port {};
+ /// PortConcept tag specifying the KeyedPort concept.
+ struct keyed_port : public port {};
+ /// PortConcept tag specifying the ComplementedPort concept.
+ struct complemented_port : public port {};
+ /// ComponentConcept tag specifying the Component concept.
+ struct component {};
+ /// ComponentConcept tag specifying the FusionComponent concept.
+ struct fusion_component : public component {};
}
namespace operations {
- struct connect;
- struct connect_only;
- struct disconnect;
- struct extract;
+ /// Tag specifying the connect binary operation.
+ struct connect {};
+ /// Tag specifying the connect_only binary operation.
+ struct connect_only {};
+ /// Tag specifying the disconnect binary operation.
+ struct disconnect {};
+ /// Tag specifying the extract binary operation.
+ struct extract {};
+
+ /// Tag specifying the disconnect_all unary port operation.
+ struct disconnect_all {};
+}
+
+namespace directions {
+ /// Tag specifying the outgoing direction in binary operations.
+ struct outgoing {};
+ /// Tag specifying the incoming direction in binary operations.
+ struct incoming {};
}
} } // namespace boost::dataflow
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -10,64 +10,27 @@
#include <boost/static_assert.hpp>
+// ***************************************
+// * unary_operation
+// ***************************************
+#define DATAFLOW_SPECIALIZABLE_OPERATION_NAME unary_operation
+#define DATAFLOW_SPECIALIZABLE_OPERATION_CHECK is_unary_operable
+#define DATAFLOW_SPECIALIZABLE_OPERATION_TYPENAME_TEMPLATES typename Operation
+#define DATAFLOW_SPECIALIZABLE_OPERATION_TEMPLATES Operation
+#define DATAFLOW_SPECIALIZABLE_OPERATION_ARITY 1
+#define DATAFLOW_SPECIALIZABLE_OPERATION_TRAITS_OF port_traits_of
+#define DATAFLOW_SPECIALIZABLE_OPERATION_HAS_TRAITS is_port
+#include <boost/dataflow/support/detail/make_specializable_operation.hpp>
-namespace boost { namespace dataflow {
-
-namespace detail {
- struct not_implemented;
-}
-namespace operations
-{
- struct disconnect_all;
-}
+namespace boost { namespace dataflow {
-namespace extension
+template<typename Port>
+inline void disconnect_all(Port &port)
{
- template<typename Operation, typename PortTraits, typename Enable=void>
- struct unary_operation_impl
- {
- struct detail
- {
- typedef void not_specialized;
- };
- template<typename Producer>
- void operator()(Producer &)
- {
- // Error: unary_operation_impl Operation has not been
- // implemented for PortTraits.
- BOOST_STATIC_ASSERT(sizeof(Producer)==0);
- }
- };
+ unary_operation<operations::disconnect_all, default_tag>(port);
}
-template<typename Operation, typename Mechanism, typename PortCategory, typename T, typename Enable=void>
-struct implements_unary_operation
- : public mpl::true_ {};
-
-template<typename Operation, typename Mechanism, typename PortCategory, typename T>
-struct implements_unary_operation<
- Operation,
- Mechanism,
- PortCategory,
- T,
- typename detail::enable_if_defined<
- typename extension::unary_operation_impl<
- Operation,
- typename port_traits_of<Mechanism, PortCategory, T>::type
- >::detail::not_specialized
- >::type
->
- : public mpl::false_ {};
-
-template<typename Operation, typename Mechanism, typename PortCategory, typename Port>
-void unary_operation(Port &producer)
-{
- extension::unary_operation_impl<
- Operation,
- typename port_traits_of<Mechanism, PortCategory, Port>::type
- >()(producer);
-}
} } // namespace boost::dataflow
Modified: sandbox/SOC/2007/signals/boost/dataflow/templates/binary_operation.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/templates/binary_operation.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/templates/binary_operation.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -4,6 +4,9 @@
// 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
@@ -14,23 +17,23 @@
template<typename Producer, typename Consumer>
inline void DATAFLOW_TEMPLATE_BINARY_OPERATION(Producer &producer, Consumer &consumer)
{
- boost::dataflow::binary_operation< boost::dataflow::operations::DATAFLOW_TEMPLATE_BINARY_OPERATION, DATAFLOW_TEMPLATE_MECHANISM >(producer, consumer);
+ boost::dataflow::binary_operation< boost::dataflow::operations::DATAFLOW_TEMPLATE_BINARY_OPERATION, DATAFLOW_TEMPLATE_MECHANISM, DATAFLOW_TEMPLATE_TAG >(producer, consumer);
}
template<typename Producer, typename Consumer>
inline void DATAFLOW_TEMPLATE_BINARY_OPERATION(Producer &producer, const Consumer &consumer)
{
- boost::dataflow::binary_operation< boost::dataflow::operations::DATAFLOW_TEMPLATE_BINARY_OPERATION, DATAFLOW_TEMPLATE_MECHANISM >(producer, consumer);
+ boost::dataflow::binary_operation< boost::dataflow::operations::DATAFLOW_TEMPLATE_BINARY_OPERATION, DATAFLOW_TEMPLATE_MECHANISM, DATAFLOW_TEMPLATE_TAG >(producer, consumer);
}
template<typename Producer, typename Consumer>
inline void DATAFLOW_TEMPLATE_BINARY_OPERATION(const Producer &producer, Consumer &consumer)
{
- boost::dataflow::binary_operation< boost::dataflow::operations::DATAFLOW_TEMPLATE_BINARY_OPERATION, DATAFLOW_TEMPLATE_MECHANISM >(producer, consumer);
+ boost::dataflow::binary_operation< boost::dataflow::operations::DATAFLOW_TEMPLATE_BINARY_OPERATION, DATAFLOW_TEMPLATE_MECHANISM, DATAFLOW_TEMPLATE_TAG >(producer, consumer);
}
template<typename Producer, typename Consumer>
inline void DATAFLOW_TEMPLATE_BINARY_OPERATION(const Producer &producer, const Consumer &consumer)
{
- boost::dataflow::binary_operation< boost::dataflow::operations::DATAFLOW_TEMPLATE_BINARY_OPERATION, DATAFLOW_TEMPLATE_MECHANISM >(producer, consumer);
+ boost::dataflow::binary_operation< boost::dataflow::operations::DATAFLOW_TEMPLATE_BINARY_OPERATION, DATAFLOW_TEMPLATE_MECHANISM, DATAFLOW_TEMPLATE_TAG >(producer, consumer);
}
Modified: sandbox/SOC/2007/signals/boost/dataflow/templates/operator.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/dataflow/templates/operator.hpp (original)
+++ sandbox/SOC/2007/signals/boost/dataflow/templates/operator.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -4,6 +4,9 @@
// 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
@@ -13,47 +16,23 @@
#ifndef DATAFLOW_TEMPLATE_BINARY_OPERATION
#error DATAFLOW_TEMPLATE_OPERATOR undefined.
#endif
-
-template<typename Producer, typename Consumer>
-typename boost::enable_if<
- boost::mpl::and_<
- boost::dataflow::is_port<DATAFLOW_TEMPLATE_MECHANISM, boost::dataflow::ports::producer, Producer>,
- boost::dataflow::is_port<DATAFLOW_TEMPLATE_MECHANISM, boost::dataflow::ports::consumer, Consumer>
- >,
- Producer &
->::type
-operator DATAFLOW_TEMPLATE_OPERATOR (Producer &producer, Consumer &consumer)
-{ DATAFLOW_TEMPLATE_BINARY_OPERATION(producer, consumer); return producer;}
-
-template<typename Producer, typename Consumer>
-typename boost::enable_if<
- boost::mpl::and_<
- boost::dataflow::is_port<DATAFLOW_TEMPLATE_MECHANISM, boost::dataflow::ports::producer, Producer>,
- boost::dataflow::is_port<DATAFLOW_TEMPLATE_MECHANISM, boost::dataflow::ports::consumer, Consumer>
- >,
- Producer &
->::type
-operator DATAFLOW_TEMPLATE_OPERATOR (Producer &producer, const Consumer &consumer)
-{ DATAFLOW_TEMPLATE_BINARY_OPERATION(producer, consumer); return producer;}
-
-template<typename Producer, typename Consumer>
-typename boost::enable_if<
- boost::mpl::and_<
- boost::dataflow::is_port<DATAFLOW_TEMPLATE_MECHANISM, boost::dataflow::ports::producer, Producer>,
- boost::dataflow::is_port<DATAFLOW_TEMPLATE_MECHANISM, boost::dataflow::ports::consumer, Consumer>
- >,
- const Producer &
+
+template<typename OutgoingPort, typename IncomingPort>
+inline typename enable_if<
+ mpl::and_<
+ boost::dataflow::has_default_port<OutgoingPort, boost::dataflow::directions::outgoing, DATAFLOW_TEMPLATE_MECHANISM, DATAFLOW_TEMPLATE_TAG>,
+ boost::dataflow::has_default_port<IncomingPort, boost::dataflow::directions::incoming, DATAFLOW_TEMPLATE_MECHANISM, DATAFLOW_TEMPLATE_TAG>
+ >, OutgoingPort &
>::type
-operator DATAFLOW_TEMPLATE_OPERATOR (const Producer &producer, Consumer &consumer)
-{ DATAFLOW_TEMPLATE_BINARY_OPERATION(producer, consumer); return producer;}
+operator DATAFLOW_TEMPLATE_OPERATOR (OutgoingPort &outgoing, IncomingPort &incoming)
+{ DATAFLOW_TEMPLATE_BINARY_OPERATION(outgoing, incoming); return outgoing;}
-template<typename Producer, typename Consumer>
-typename boost::enable_if<
- boost::mpl::and_<
- boost::dataflow::is_port<DATAFLOW_TEMPLATE_MECHANISM, boost::dataflow::ports::producer, Producer>,
- boost::dataflow::is_port<DATAFLOW_TEMPLATE_MECHANISM, boost::dataflow::ports::consumer, Consumer>
- >,
- const Producer &
+template<typename OutgoingPort, typename IncomingPort>
+inline typename enable_if<
+ mpl::and_<
+ boost::dataflow::has_default_port<OutgoingPort, boost::dataflow::directions::outgoing, DATAFLOW_TEMPLATE_MECHANISM, DATAFLOW_TEMPLATE_TAG>,
+ boost::dataflow::has_default_port<IncomingPort, boost::dataflow::directions::incoming, DATAFLOW_TEMPLATE_MECHANISM, DATAFLOW_TEMPLATE_TAG>
+ >, OutgoingPort &
>::type
-operator DATAFLOW_TEMPLATE_OPERATOR (const Producer &producer, const Consumer &consumer)
-{ DATAFLOW_TEMPLATE_BINARY_OPERATION(producer, consumer); return producer;}
+operator DATAFLOW_TEMPLATE_OPERATOR (OutgoingPort &outgoing, const IncomingPort &incoming)
+{ DATAFLOW_TEMPLATE_BINARY_OPERATION(outgoing, incoming); return outgoing;}
Modified: sandbox/SOC/2007/signals/libs/dataflow/build/xcodeide/signal_network.xcodeproj/project.pbxproj
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/build/xcodeide/signal_network.xcodeproj/project.pbxproj (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/build/xcodeide/signal_network.xcodeproj/project.pbxproj 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -81,11 +81,6 @@
0800AC3A0C8CAAC300994538 /* Jamfile.v2 */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = Jamfile.v2; path = ../../../../Jamfile.v2; sourceTree = SOURCE_ROOT; };
0800AC3B0C8CAAC300994538 /* project-root.jam */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.jam; name = "project-root.jam"; path = "../../../../project-root.jam"; sourceTree = SOURCE_ROOT; };
0801B4370CE9488B00A7A8D1 /* operator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = operator.hpp; sourceTree = "<group>"; };
- 0801C6980CF8F8E600820AC8 /* component.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = component.qbk; sourceTree = "<group>"; };
- 0801C6990CF8F8E600820AC8 /* port.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = port.qbk; sourceTree = "<group>"; };
- 0801C6A10CF8FA8700820AC8 /* concepts.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = concepts.qbk; sourceTree = "<group>"; };
- 0801C6A50CF8FAE500820AC8 /* binary_operable.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = binary_operable.qbk; sourceTree = "<group>"; };
- 0801C6AA0CF8FB7700820AC8 /* unary_operable.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = unary_operable.qbk; sourceTree = "<group>"; };
080612F30CF20A4A00F9DDF9 /* complemented_port.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = complemented_port.hpp; sourceTree = "<group>"; };
08061C2D0CBEE985002DC710 /* binary_operation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = binary_operation.hpp; sourceTree = "<group>"; };
08061C980CBEF0C6002DC710 /* keyed_port.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = keyed_port.hpp; sourceTree = "<group>"; };
@@ -111,6 +106,7 @@
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>"; };
08DC14FC0C951C4800B96B2E /* Cone.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Cone.cxx; sourceTree = "<group>"; };
+ 08EBA7590CFF8B6D0080E225 /* example.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = example.cpp; sourceTree = "<group>"; };
08EF045E0CEBF1AD002ABBBC /* port_t.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = port_t.hpp; sourceTree = "<group>"; };
08EF9B220C5D506A00D4D206 /* applicator.hpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = applicator.hpp; sourceTree = "<group>"; };
08EF9B230C5D506A00D4D206 /* chain.hpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = chain.hpp; sourceTree = "<group>"; };
@@ -151,8 +147,10 @@
08F077830C63F736003D448D /* components.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = components.qbk; sourceTree = "<group>"; };
08F082570C1DD53400687E1B /* components.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = components.qbk; sourceTree = "<group>"; };
08F0825A0C1DD58500687E1B /* connections.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = connections.qbk; sourceTree = "<group>"; };
+ 08F09E820D00ACCD00DE0BFC /* fusion_component.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fusion_component.hpp; sourceTree = "<group>"; };
+ 08F09F2E0D00B5C300DE0BFC /* my_producer_consumer_operations.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = my_producer_consumer_operations.hpp; sourceTree = "<group>"; };
+ 08F179B80D00832F005FDC23 /* make_specializable_operation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = make_specializable_operation.hpp; sourceTree = "<group>"; };
08F1CD280CC55A5100EB5B4A /* port_traits_sequence.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = port_traits_sequence.hpp; sourceTree = "<group>"; };
- 08F20FB60C95AD97005D01D4 /* filter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = filter.hpp; sourceTree = "<group>"; };
08F216430CC95C3800DD25D3 /* test_result_of_defined.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = test_result_of_defined.cpp; sourceTree = "<group>"; };
08F217BB0CC570CD00F9A91B /* proxy_port_traits_sequence.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = proxy_port_traits_sequence.hpp; sourceTree = "<group>"; };
08F21F770CC6A2EB00DE649A /* test_unary_op.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_unary_op.cpp; sourceTree = "<group>"; };
@@ -186,7 +184,6 @@
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>"; };
- 08F3FE0C0CA0975100F0E144 /* common.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = common.hpp; sourceTree = "<group>"; };
08F40B2B0CEFF9BD00D20F30 /* introduction.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = introduction.qbk; sourceTree = "<group>"; };
08F417350CFA466000C10A54 /* runtime_support.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = runtime_support.hpp; sourceTree = "<group>"; };
08F4173A0CFA468D00C10A54 /* runtime.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = runtime.hpp; sourceTree = "<group>"; };
@@ -196,6 +193,17 @@
08F448760CD5368000E128A8 /* simple_example_components.hpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = simple_example_components.hpp; sourceTree = "<group>"; };
08F4FBB80C56AFDF00EB271A /* producer_wrapper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = producer_wrapper.hpp; sourceTree = "<group>"; };
08F4FC170C56C96300EB271A /* producer_container.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = producer_container.hpp; sourceTree = "<group>"; };
+ 08F59F200D01B5E6007CD201 /* category.hpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = category.hpp; sourceTree = "<group>"; };
+ 08F59F280D01B6D9007CD201 /* traits.hpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = traits.hpp; sourceTree = "<group>"; };
+ 08F59F460D01B9D4007CD201 /* default_port_provider.hpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = default_port_provider.hpp; sourceTree = "<group>"; };
+ 08F59F4E0D01BC56007CD201 /* default_port_provider.hpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = default_port_provider.hpp; sourceTree = "<group>"; };
+ 08F59F520D01BD19007CD201 /* port.hpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = port.hpp; sourceTree = "<group>"; };
+ 08F59F7A0D01C0D2007CD201 /* binary_operable.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = binary_operable.qbk; sourceTree = "<group>"; };
+ 08F59F7B0D01C0D2007CD201 /* component.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = component.qbk; sourceTree = "<group>"; };
+ 08F59F7C0D01C0D2007CD201 /* concepts.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = concepts.qbk; sourceTree = "<group>"; };
+ 08F59F7D0D01C0D2007CD201 /* port.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = port.qbk; sourceTree = "<group>"; };
+ 08F59F7E0D01C0D2007CD201 /* unary_operable.qbk */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = unary_operable.qbk; sourceTree = "<group>"; };
+ 08F59F820D01C122007CD201 /* support.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = support.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>"; };
@@ -217,6 +225,7 @@
08F71D500CA3547C0010099E /* test_storage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = test_storage.cpp; sourceTree = "<group>"; };
08F9459A0C46A86E00E224E4 /* components.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = components.hpp; sourceTree = "<group>"; };
08F9462E0C46C2F000E224E4 /* fibonacci.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fibonacci.cpp; sourceTree = "<group>"; };
+ 08F972FB0D0471FA00ABF6C1 /* port_adapter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = port_adapter.hpp; sourceTree = "<group>"; };
08F98B400CD0190A009D642B /* Jamfile.v2 */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Jamfile.v2; sourceTree = "<group>"; };
08F98B470CD01963009D642B /* intro_example.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = intro_example.cpp; sourceTree = "<group>"; };
08F995660CCFC68F001184CE /* condition.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = condition.hpp; sourceTree = "<group>"; };
@@ -254,18 +263,6 @@
path = VTK;
sourceTree = "<group>";
};
- 0801C6970CF8F8E600820AC8 /* concepts */ = {
- isa = PBXGroup;
- children = (
- 0801C6AA0CF8FB7700820AC8 /* unary_operable.qbk */,
- 0801C6A50CF8FAE500820AC8 /* binary_operable.qbk */,
- 0801C6A10CF8FA8700820AC8 /* concepts.qbk */,
- 0801C6980CF8F8E600820AC8 /* component.qbk */,
- 0801C6990CF8F8E600820AC8 /* port.qbk */,
- );
- path = concepts;
- sourceTree = "<group>";
- };
080DD7560C13908400EEB53D = {
isa = PBXGroup;
children = (
@@ -290,6 +287,7 @@
08668C4D0C19A16300ACB19A /* example */ = {
isa = PBXGroup;
children = (
+ 08EBA7590CFF8B6D0080E225 /* example.cpp */,
08FFDD6E0CEB709A009318A8 /* blueprint */,
08F98B3F0CD018E7009D642B /* signals */,
0800AC2F0C8CA99700994538 /* VTK */,
@@ -305,16 +303,17 @@
08C675960C13A03E00D85379 /* test */ = {
isa = PBXGroup;
children = (
+ 08C675970C13A03E00D85379 /* Jamfile.v2 */,
084467150CE790B300B3CFDF /* test_reflective_component.cpp */,
08B9D4190CC3D0790050F10B /* test_binary_op.cpp */,
08F71D3D0CA3547C0010099E /* signals */,
- 08C675970C13A03E00D85379 /* Jamfile.v2 */,
08F26C8B0CBF1CBA00EDC3F6 /* test_port.cpp */,
08F26D630CBF2D4100EDC3F6 /* test_proxy_port.cpp */,
08B9D41E0CC3D0A80050F10B /* my_producer_consumer.hpp */,
08F24D6E0CC4419F00FC4A0C /* test_keyed_port.cpp */,
08F21F770CC6A2EB00DE649A /* test_unary_op.cpp */,
08F21FC20CC6B3E600DE649A /* test_component.cpp */,
+ 08F09F2E0D00B5C300DE0BFC /* my_producer_consumer_operations.hpp */,
);
name = test;
path = ../../test;
@@ -338,12 +337,12 @@
08EF9B210C5D506A00D4D206 /* component */ = {
isa = PBXGroup;
children = (
+ 08EF9B270C5D506A00D4D206 /* detail */,
08EF9B220C5D506A00D4D206 /* applicator.hpp */,
08EF9B230C5D506A00D4D206 /* chain.hpp */,
08EF9B240C5D506A00D4D206 /* conditional.hpp */,
08EF9B250C5D506A00D4D206 /* conditional_modifier.hpp */,
08EF9B260C5D506A00D4D206 /* counter.hpp */,
- 08EF9B270C5D506A00D4D206 /* detail */,
08EF9B2C0C5D506A00D4D206 /* filter.hpp */,
08EF9B2D0C5D506A00D4D206 /* filter_base.hpp */,
08EF9B2E0C5D506A00D4D206 /* function.hpp */,
@@ -413,12 +412,11 @@
08F01F950C470E1500C0ED27 /* support */ = {
isa = PBXGroup;
children = (
- 08FCB38D0CC5DCD2003906C1 /* unary_operation.hpp */,
+ 08F59F460D01B9D4007CD201 /* default_port_provider.hpp */,
+ 08F418080CBD69FE007E7F7A /* port.hpp */,
08F1CD260CC55A2A00EB5B4A /* port */,
+ 08FCB38D0CC5DCD2003906C1 /* unary_operation.hpp */,
082761BE0C6037A90030E557 /* invocable.hpp */,
- 08F20FB60C95AD97005D01D4 /* filter.hpp */,
- 08F3FE0C0CA0975100F0E144 /* common.hpp */,
- 08F418080CBD69FE007E7F7A /* port.hpp */,
08F418AB0CBD7668007E7F7A /* proxy_port.hpp */,
08061C2D0CBEE985002DC710 /* binary_operation.hpp */,
08061C980CBEF0C6002DC710 /* keyed_port.hpp */,
@@ -428,6 +426,8 @@
080612F30CF20A4A00F9DDF9 /* complemented_port.hpp */,
08F4173A0CFA468D00C10A54 /* runtime.hpp */,
08F417460CFA486200C10A54 /* tags.hpp */,
+ 08F09E820D00ACCD00DE0BFC /* fusion_component.hpp */,
+ 08F179B70D008313005FDC23 /* detail */,
);
path = support;
sourceTree = "<group>";
@@ -461,10 +461,23 @@
path = templates;
sourceTree = "<group>";
};
+ 08F179B70D008313005FDC23 /* detail */ = {
+ isa = PBXGroup;
+ children = (
+ 08F179B80D00832F005FDC23 /* make_specializable_operation.hpp */,
+ );
+ path = detail;
+ sourceTree = "<group>";
+ };
08F1CD260CC55A2A00EB5B4A /* port */ = {
isa = PBXGroup;
children = (
+ 08F59F520D01BD19007CD201 /* port.hpp */,
+ 08F59F4E0D01BC56007CD201 /* default_port_provider.hpp */,
+ 08F59F280D01B6D9007CD201 /* traits.hpp */,
+ 08F59F200D01B5E6007CD201 /* category.hpp */,
08F1CD270CC55A2A00EB5B4A /* detail */,
+ 08F972FB0D0471FA00ABF6C1 /* port_adapter.hpp */,
);
path = port;
sourceTree = "<group>";
@@ -545,19 +558,40 @@
path = detail;
sourceTree = "<group>";
};
+ 08F59F780D01C019007CD201 /* support */ = {
+ isa = PBXGroup;
+ children = (
+ 08F59F790D01C0D2007CD201 /* concepts */,
+ 08F59F820D01C122007CD201 /* support.qbk */,
+ );
+ path = support;
+ sourceTree = "<group>";
+ };
+ 08F59F790D01C0D2007CD201 /* concepts */ = {
+ isa = PBXGroup;
+ children = (
+ 08F59F7A0D01C0D2007CD201 /* binary_operable.qbk */,
+ 08F59F7B0D01C0D2007CD201 /* component.qbk */,
+ 08F59F7C0D01C0D2007CD201 /* concepts.qbk */,
+ 08F59F7D0D01C0D2007CD201 /* port.qbk */,
+ 08F59F7E0D01C0D2007CD201 /* unary_operable.qbk */,
+ );
+ path = concepts;
+ sourceTree = "<group>";
+ };
08F71D3D0CA3547C0010099E /* signals */ = {
isa = PBXGroup;
children = (
- 08F216430CC95C3800DD25D3 /* test_result_of_defined.cpp */,
08F71D3E0CA3547C0010099E /* Jamfile.v2 */,
+ 08F216430CC95C3800DD25D3 /* test_result_of_defined.cpp */,
08F71D3F0CA3547C0010099E /* test_bind_object.cpp */,
+ 08F71D420CA3547C0010099E /* test_connect.cpp */,
+ 08F71D460CA3547C0010099E /* test_filter.cpp */,
+ 08F71D440CA3547C0010099E /* test_counter.cpp */,
08F71D400CA3547C0010099E /* test_branching.cpp */,
08F71D410CA3547C0010099E /* test_chain.cpp */,
- 08F71D420CA3547C0010099E /* test_connect.cpp */,
08F71D430CA3547C0010099E /* test_connections.cpp */,
- 08F71D440CA3547C0010099E /* test_counter.cpp */,
08F71D450CA3547C0010099E /* test_disconnect.cpp */,
- 08F71D460CA3547C0010099E /* test_filter.cpp */,
08F71D470CA3547C0010099E /* test_function.cpp */,
08F71D480CA3547C0010099E /* test_junction.cpp */,
08F71D490CA3547C0010099E /* test_multi_args.cpp */,
@@ -646,12 +680,12 @@
08FD5DE40C1BA60700F00877 /* doc */ = {
isa = PBXGroup;
children = (
- 0801C6970CF8F8E600820AC8 /* concepts */,
+ 08FD5E4D0C1BA60800F00877 /* Jamfile.v2 */,
+ 08F59F780D01C019007CD201 /* support */,
08F3592C0CED1E9F00E2BBFB /* blueprint */,
08F264770CEA9DE800DA01C9 /* introduction */,
083FD3C00C62A75100EF3F6B /* phoenix */,
08FB7BEE0C6157AE00BD4EC2 /* signals */,
- 08FD5E4D0C1BA60800F00877 /* Jamfile.v2 */,
08FD5E4E0C1BA60800F00877 /* dataflow.qbk */,
08F36DFB0C41375B00E2F9A1 /* dataflow_table.xml */,
08FA6A050C41E11800434913 /* rationale.qbk */,
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/Jamfile.v2
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/Jamfile.v2 (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/Jamfile.v2 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -16,7 +16,7 @@
doxygen dataflow_blueprint_doxygen
:
- [ glob ../../../boost/dataflow/blueprint/*.hpp ]
+ [ glob ../../../boost/dataflow/blueprint/port.hpp ]
:
<doxygen:param>TAB_SIZE=4
<doxygen:param>EXAMPLE_PATH=../test
@@ -31,38 +31,43 @@
<doxygen:param>MACRO_EXPANSION=YES
<doxygen:param>SEARCH_INCLUDES=YES
<doxygen:param>INCLUDE_PATH=../../..
- <doxygen:param>PREDEFINED=DOXYGEN_DOCS_ONLY
+ <doxygen:param>INCLUDE_PATH=$(BOOST_ROOT)
+ <doxygen:param>PREDEFINED=DOXYGEN_DOCS_BUILD
+ ;
+
+doxygen dataflow_support_doxygen
+ :
+ [ glob ../../../boost/dataflow/support/port/category.hpp ]
+ [ glob ../../../boost/dataflow/support/port/traits.hpp ]
+ [ glob ../../../boost/dataflow/support/port/port.hpp ]
+ [ glob ../../../boost/dataflow/support/complemented_port.hpp ]
+ [ glob ../../../boost/dataflow/support/default_port_provider.hpp ]
+ [ glob ../../../boost/dataflow/support/tags.hpp ]
+ [ glob ../../../boost/dataflow/support/component.hpp ]
+ [ glob ../../../boost/dataflow/support/fusion_component.hpp ]
+ :
+ <doxygen:param>TAB_SIZE=4
+ <doxygen:param>EXAMPLE_PATH=../test
+ <doxygen:param>EXAMPLE_PATH=../example
+ <doxygen:param>STRIP_FROM_PATH=$(root)
+ <doxygen:param>STRIP_FROM_INC_PATH=$(root)
+ <doxygen:param>EXTRACT_ALL=NO
+ <doxygen:param>HIDE_UNDOC_MEMBERS=NO
+ <doxygen:param>INHERIT_DOCS=YES
+ <doxygen:param>EXTRACT_PRIVATE=NO
+ <doxygen:param>ENABLE_PREPROCESSING=YES
+ <doxygen:param>MACRO_EXPANSION=YES
+ <doxygen:param>SEARCH_INCLUDES=YES
+ <doxygen:param>INCLUDE_PATH=../../..
+# <doxygen:param>INCLUDE_PATH=$(BOOST_ROOT)
+ <doxygen:param>PREDEFINED=DOXYGEN_DOCS_BUILD
;
-
-#doxygen dataflow_doxygen
-# :
-# [ glob ../../../boost/dataflow/support.hpp ]
-# [ glob ../../../boost/dataflow/support/*.hpp ]
-# [ glob ../../../boost/dataflow/signals/*.hpp ]
-# [ glob ../../../boost/dataflow/signals/connection/*.hpp ]
-# [ glob ../../../boost/dataflow/signals/component/*.hpp ]
-# :
-# <doxygen:param>TAB_SIZE=4
-# <doxygen:param>EXAMPLE_PATH=../test
-# <doxygen:param>EXAMPLE_PATH=../example
-# <doxygen:param>STRIP_FROM_PATH=$(root)
-# <doxygen:param>STRIP_FROM_INC_PATH=$(root)
-# <doxygen:param>EXTRACT_ALL=NO
-# <doxygen:param>HIDE_UNDOC_MEMBERS=YES
-# <doxygen:param>INHERIT_DOCS=YES
-# <doxygen:param>EXTRACT_PRIVATE=NO
-# <doxygen:param>ENABLE_PREPROCESSING=YES
-# <doxygen:param>MACRO_EXPANSION=YES
-# <doxygen:param>SEARCH_INCLUDES=YES
-# <doxygen:param>INCLUDE_PATH=../../..
-# <doxygen:param>PREDEFINED=DOXYGEN_DOCS_ONLY
-# ;
boostbook standalone
:
dataflow_xml
dataflow_blueprint_doxygen
-# dataflow_doxygen
+ dataflow_support_doxygen
:
# pull in the online .css and images
<xsl:param>project.root=http://beta.boost.org/development
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/components.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/components.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/components.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -3,7 +3,7 @@
[section producer_group]
[heading Model of]
-* [ProducerPortConcept]
+* [ProducerPort]
[heading Description]
@@ -24,7 +24,7 @@
[section consumer_group]
[heading Model of]
-* [ProducerPortConcept]
+* [ProducerPort]
[heading Description]
@@ -45,8 +45,8 @@
[section consumer_map]
A [consumer_map] groups together multiple consumers, keyed by type they consume.
-When a [ProducerPortConcept] is connected to a [consumer_map], the consumer
-whose key matches the [ProducerPortConcept]'s produced type will be chosen for
+When a [ProducerPort] is connected to a [consumer_map], the consumer
+whose key matches the [ProducerPort]'s produced type will be chosen for
the connection.
[consumer_map] is a wrapper for [BoostFusion] maps which allows them to be
used in this fashion.
@@ -55,7 +55,7 @@
A [consumer_map] is used as the return type of [^[storage].send_slot()],
which and includes the [slot_selector] for both the fused and unfused
versions of the `send()` function. The appropriate slot is selected when
-a connection is made, based on the [ProducerPortConcept]'s outgoing signal
+a connection is made, based on the [ProducerPort]'s outgoing signal
signature.
[endsect][/consumer_map]
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -1,6 +1,6 @@
[article Dataflow
[quickbook 1.4]
- [version 0.8.1]
+ [version 0.8.2]
[authors [Rajko, Stjepan]]
[copyright 2007 Stjepan Rajko]
[purpose Generic dataflow lirary providing support for data producers,
@@ -12,41 +12,42 @@
]
]
-[template concepts[] [link dataflow.concepts concepts]]
-[template MechanismConcept[] [link dataflow.concepts.port_related.mechanism [^Mechanism]]]
-[template PortCategoryConcept[] [link dataflow.concepts.port_related.portcategory [^PortCategory]]]
-[template PortTraitsConcept[] [link dataflow.concepts.port_related.port [^PortTraits]]]
-[template PortConcept[] [link dataflow.concepts.port_related.port [^Port]]]
-[template ProducerPortConcept[] [link dataflow.concepts.port_related.port [^ProducerPort]]]
-[template ConsumerPortConcept[] [link dataflow.concepts.port_related.port [^ConsumerPort]]]
-[template ComplementedPortConcept[] [link dataflow.concepts.port_related.complementedport [^ComplementedPort]]]
-[template ComplementedPortTraitsConcept[] [link dataflow.concepts.port_related.complementedport [^ComplementedPortTraits]]]
-[template KeyedPortConcept[] [link dataflow.concepts.port_related.keyedport [^KeyedPort]]]
-
-[template ProxyPortTraitsConcept[] [link dataflow.concepts.port_related.proxyporttraits [^ProxyPortTraits]]]
-[template ProxyPortConcept[] [link dataflow.concepts.port_related.proxyport [^ProxyPort]]]
-
-[template BinaryOperableConcept[] [link dataflow.concepts.port_related.binaryoperable [^BinaryOperable]]]
-[template ConnectableConcept[] [link dataflow.concepts.port_related.binaryoperable [^Connectable]]]
-[template OnlyConnectableConcept[] [link dataflow.concepts.port_related.binaryoperable [^OnlyConnectable]]]
-[template DisconnectableConcept[] [link dataflow.concepts.port_related.binaryoperable [^Disconnectable]]]
-[template ExtractableConcept[] [link dataflow.concepts.port_related.binaryoperable [^Extractable]]]
-
-[template UnaryOperableConcept[] [link dataflow.concepts.port_related.unaryoperable [^UnaryOperable]]]
-[template AllDisconnectableConcept[] [link dataflow.concepts.port_related.unaryoperable [^AllDisconnectable]]]
-
-[template ComponentTraitsConcept[] [link dataflow.concepts.component_related.componenttraits [^ComponentTraits]]]
-[template ComponentConcept[] [link dataflow.concepts.component_related.component [^Component]]]
-
-[template ComponentOperableConcept[] [link dataflow.concepts.component_related.componentoperable [^ComponentOperable]]]
-[template InvocableConcept[] [link dataflow.concepts.component_related.componentoperable [^Invocable]]]
-
-[template SignalPortTraitsConcept[] [link dataflow.signals.concepts.signalporttraits [^SignalPortTraits]]]
-[template SignalProducerConcept[] [link dataflow.signals.concepts.signalproducer [^SignalProducer]]]
-[template SignalConsumerConcept[] [link dataflow.signals.concepts.signalconsumer [^SignalConsumer]]]
+[template concepts[] [link dataflow.support.concepts concepts]]
+[template Tag[] [link dataflow.support.concepts.port_related.tag [^Tag]]]
+[template Mechanism[] [link dataflow.support.concepts.port_related.mechanism [^Mechanism]]]
+[template PortCategory[] [link dataflow.support.concepts.port_related.portcategory [^PortCategory]]]
+[template PortTraits[] [link dataflow.support.concepts.port_related.port [^PortTraits]]]
+[template Port[] [link dataflow.support.concepts.port_related.port [^Port]]]
+[template ProducerPort[] [link dataflow.support.concepts.port_related.port [^ProducerPort]]]
+[template ConsumerPort[] [link dataflow.support.concepts.port_related.port [^ConsumerPort]]]
+[template ComplementedPort[] [link dataflow.support.concepts.port_related.complementedport [^ComplementedPort]]]
+[template ComplementedPortTraits[] [link dataflow.support.concepts.port_related.complementedport [^ComplementedPortTraits]]]
+[template KeyedPort[] [link dataflow.support.concepts.port_related.keyedport [^KeyedPort]]]
+
+[template ProxyPortTraits[] [link dataflow.support.concepts.port_related.proxyporttraits [^ProxyPortTraits]]]
+[template ProxyPort[] [link dataflow.support.concepts.port_related.proxyport [^ProxyPort]]]
+
+[template BinaryOperable[] [link dataflow.support.concepts.port_related.binaryoperable [^BinaryOperable]]]
+[template Connectable[] [link dataflow.support.concepts.port_related.binaryoperable [^Connectable]]]
+[template OnlyConnectable[] [link dataflow.support.concepts.port_related.binaryoperable [^OnlyConnectable]]]
+[template Disconnectable[] [link dataflow.support.concepts.port_related.binaryoperable [^Disconnectable]]]
+[template Extractable[] [link dataflow.support.concepts.port_related.binaryoperable [^Extractable]]]
+
+[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 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 SignalPortTraits[] [link dataflow.signals.concepts.signalporttraits [^SignalPortTraits]]]
+[template SignalProducer[] [link dataflow.signals.concepts.signalproducer [^SignalProducer]]]
+[template SignalConsumer[] [link dataflow.signals.concepts.signalconsumer [^SignalConsumer]]]
-[template PhoenixProducerConcept[] [link dataflow.concepts.phoenix.phoenixproducer [^PhoenixProducer]]]
-[template PhoenixConsumerConcept[] [link dataflow.concepts.phoenix.phoenixproducer [^PhoenixConsumer]]]
+[template PhoenixProducer[] [link dataflow.support.concepts.phoenix.phoenixproducer [^PhoenixProducer]]]
+[template PhoenixConsumer[] [link dataflow.support.concepts.phoenix.phoenixproducer [^PhoenixConsumer]]]
[template vtk_example[text] [link dataflow.introduction.examples.new_layer [text]]]
[template how_to_use[text] [link dataflow.introduction.how_to_use [text]]]
@@ -106,6 +107,18 @@
[template blueprint[] [link dataflow.future.blueprint blueprint]]
+[template is_port_category[] [classref boost::dataflow::is_port_category is_port_category]]
+[template port_traits[] [classref boost::dataflow::port_traits [^port_traits]]]
+[template port_traits_of[] [classref boost::dataflow::port_traits_of port_traits_of]]
+[template register_port_traits[] [classref boost::dataflow::register_port_traits register_port_traits]]
+[template is_port[] [classref boost::dataflow::is_port [^is_port]]]
+[template port[] [classref boost::dataflow::port [^port]]]
+[template complemented_port_traits[] [classref boost::dataflow::complemented_port_traits [^complemented_port_traits]]]
+[template is_complemented_port[] [classref boost::dataflow::is_complemented_port [^is_complemented_port]]]
+
+[template DATAFLOW_PORT_TRAITS[] [macroref DATAFLOW_PORT_TRAITS DATAFLOW_PORT_TRAITS]]
+[template DATAFLOW_PORT_TRAITS_ENABLE_IF[] [macroref DATAFLOW_PORT_TRAITS_ENABLE_IF DATAFLOW_PORT_TRAITS_ENABLE_IF]]
+[template default_tag[] [classref boost::dataflow::default_tag [^concepts::default_tag]]]
[import ../test/test_port.cpp]
@@ -142,7 +155,7 @@
[include introduction/introduction.qbk]
-[include concepts/concepts.qbk]
+[include support/support.qbk]
[/[include components.qbk]]
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/future.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/future.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/future.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -4,7 +4,7 @@
The [DataflowBlueprint] layer now offers some limited dataflow network modeling
via a BGL graph, and some basic runtime reflections for classes that model
-the [ComponentConcept] concept.
+the [Component] concept.
The following features are planned for the future:
@@ -100,7 +100,7 @@
Here, a connection from a data-producing component to a data-consuming
component would lead to them both being connected to the same data-transport
object, which would be managed by the library. The components
-could be invoked through the [InvocableConcept] by the library when needed.
+could be invoked through the [Invocable] by the library when needed.
There are, of course, a lot of other issues to solve, and a lot of ways in
which the Dataflow generic support layer might need to grow to accomodate
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/distributed_example.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/distributed_example.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/distributed_example.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -9,18 +9,18 @@
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 [SignalProducerConcept] on one computer with a
-[SignalConsumerConcept] on another:
+set up a connection between a [SignalProducer] on one computer with a
+[SignalConsumer] on another:
-* On the [SignalProducerConcept]'s computer, construct a [socket_sender] of
+* On the [SignalProducer]'s computer, construct a [socket_sender] of
the appropriate `Signature` with the given socket.
-[connect] the [SignalProducerConcept] to the [socket_sender].
-* On the [SignalConsumerConcept]'s computer, construct a [socket_receiver] of
+[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 [SignalConsumerConcept].
+[connect] the [socket_receiver] to the [SignalConsumer].
-That's it. Now, every signal sent out of the [SignalProducerConcept] should
-be received by the [SignalConsumerConcept].
+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
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gil_example.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gil_example.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/gil_example.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -1,4 +1,4 @@
-[section:gil An image processing network using Dataflow.Signals and [BoostGIL]]
+[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
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -377,17 +377,22 @@
The Dataflow library uses the trunk version of Boost - it might not work
perfectly with release versions of boost.
+Version 0.8.2 (under construction)
+* Moved functionality from port related concepts to the component concepts.
+* Adapted the Dataflow.Signals layer and tests, most of the rest still broken.
+* Started adding Doxygen-generated support layer reference.
+
Version 0.8.1
\[[@http://www.boost-consulting.com/vault/index.php?direction=&order=&directory=Dataflow& available in the Boost vault]\]
* Started the [DataflowBlueprint] layer (runtime reflection and network modeling).
-* Expanding the [ComponentConcept] concept (compile-time reflection of ports).
+* Expanding the [Component] concept (compile-time reflection of ports).
* VTK example Jamfile now works work with Windows (not just Darwin+X11 VTK).
* Provided an example using [BoostGIL].
-* The [MechanismConcept] concept is now limited to port-related operations.
+* The [Mechanism] concept is now limited to port-related operations.
In the future, an additional tag template parameter might be added to all
dataflow templates to allow specifying completely independent dataflow support
- layers over the same types (the original intent of the [MechanismConcept]
+ layers over the same types (the original intent of the [Mechanism]
parameter).
Version 0.8.0 -
@@ -424,7 +429,7 @@
running bjam.
[warning The Jamfile for the VTK examples currently only works for Darwin
-and for VTK built for X]
+with VTK built for X11, and for MSVC]
The library itself is header only, and requires no linking. However, parts
of it depend on boost libraries which do need to be built and linked (see
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/vtk_example.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/vtk_example.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/introduction/vtk_example.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -60,9 +60,9 @@
[section:mechanism Setting up the Mechanism]
-The first thing we'll do is create a tag for the VTK [MechanismConcept], in
+The first thing we'll do is create a tag for the VTK [Mechanism], in
namespace `boost::dataflow::vtk`. Since there are currently no requirements
-for a [MechanismConcept], this is as simple as declaring a new type to be used
+for a [Mechanism], this is as simple as declaring a new type to be used
as the mechanism tag:
[vtk_mechanism]
@@ -82,17 +82,17 @@
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 [ProducerPortConcept]
+In Dataflow concepts, [vtkAlgorithmOutput] can be made a [ProducerPort]
- it corresponds to a single data output point. We support it as such by
-defining a [PortTraitsConcept] type, and associating it with
+defining a [PortTraits] type, and associating it with
[vtkAlgorithmOutput]:
[vtk_algorithm_output_producer]
-[note More details about registering [PortTraitsConcept] for a [PortConcept]
-can be found on the [PortConcept] documentation page.]
+[note More details about registering [PortTraits] for a [Port]
+can be found on the [Port] documentation page.]
-Now that we have a [ProducerPortConcept], we need a [ConsumerPortConcept].
+Now that we have a [ProducerPort], we need a [ConsumerPort].
[vtkAlgorithm] can accept incoming connections using the `AddInputConnection`
and `SetInputConnection` member functions. The code below provides support
for [vtkAlgorithm] accepting connections on its default input port:
@@ -108,10 +108,10 @@
[section:connectable Making things Connectable]
-With the pair of [ProducerPortConcept] and [ConsumerPortConcept] registered, we
-can make them [ConnectableConcept] and/or [OnlyConnectableConcept].
+With the pair of [ProducerPort] and [ConsumerPort] registered, we
+can make them [Connectable] and/or [OnlyConnectable].
All we need to do is specialize the implementation for the appropriate
-[PortTraitsConcept]:
+[PortTraits]:
[vtk_connect_impl_algorithm]
@@ -152,12 +152,12 @@
for this purpose.
Including `<boost/dataflow/templates/binary_operation.hpp>` with `#define`d
-DATAFLOW_TEMPLATE_MECHANISM and DATAFLOW_TEMPLATE_BINARY_OPERATION will
+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_MECHANISM, DATAFLOW_TEMPLATE_BINARY_OPERATION, and
+DATAFLOW_TEMPLATE_TAG, DATAFLOW_TEMPLATE_BINARY_OPERATION, and
DATAFLOW_TEMPLATE_OPERATOR will define a forwarding operator in the current
namespace.
@@ -188,23 +188,23 @@
In the VTK example above, both `vtkConeSource` and `vtkPolyDataMapper`
inherit [vtkAlgorithm].
-With the [vtkAlgorithmOutput] [ProducerPortConcept] and
-[vtkAlgorithm] [ConsumerPortConcept] we've set up,
+With the [vtkAlgorithmOutput] [ProducerPort] and
+[vtkAlgorithm] [ConsumerPort] we've set up,
we can do things like `connect(cone->GetOutputPort(), *coneMapper);`.
However, we would like to do `connect(*cone, *coneMapper)`.
To do that,
-we need to make [vtkAlgorithm] a [ProducerPortConcept]. Since [vtkAlgorithm]
+we need to make [vtkAlgorithm] a [ProducerPort]. Since [vtkAlgorithm]
forms its output connections using [vtkAlgorithmOutput] objects
returned through the `GetOutputPort` member functions, and we've already
-configured [vtkAlgorithmOutput] as a [ProducerPortConcept], we can make use
-of the [ProxyPortConcept] concept provided by the dataflow library.
-In effect, we will make [vtkAlgorithm] delegate it's [ProducerPortConcept]
+configured [vtkAlgorithmOutput] as a [ProducerPort], we can make use
+of the [ProxyPort] concept provided by the dataflow library.
+In effect, we will make [vtkAlgorithm] delegate it's [ProducerPort]
functionality to [vtkAlgorithmOutput]:
[vtk_algorithm_proxy_producer]
-Now, [vtkAlgorithm] is a [ProducerPortConcept].
+Now, [vtkAlgorithm] is a [ProducerPort].
[heading What we can do with what we have so far]
@@ -222,7 +222,7 @@
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 [ProducerPortConcept] and a [ConsumerPortConcept]:
+for a [vtkActor] as both a [ProducerPort] and a [ConsumerPort]:
[vtk_actor_filter]
@@ -241,9 +241,9 @@
the same as connecting a [vtkMapper] to another [vtkAlgorithm].
To accomodate such situations, the Dataflow library provides
-[KeyedPortConcept]s, which are similar to [ProxyPortConcept]s but
-the [PortConcept] they delegate to is keyed on the
-[PortConcept] they are being connected to.
+[KeyedPort]s, which are similar to [ProxyPort]s but
+the [Port] they delegate to is keyed on the
+[Port] they are being connected to.
[vtk_mapper_producer]
@@ -270,7 +270,7 @@
use pointers to class types rather than class types themselves. So, with what
we have done so far, we can do `connect(*cone, *coneMapper)` but not
`connect(cone, coneMapper)`. To provide support for pointers, we
-simply make them adhere to the [ProxyPortConcept] concept, and delegate the
+simply make them adhere to the [ProxyPort] concept, and delegate the
functionality to the object they point to.
[vtk_support_pointer]
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/phoenix/concepts.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/phoenix/concepts.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/phoenix/concepts.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -2,20 +2,20 @@
[section PhoenixProducer]
-A [ProducerPortConcept] type `P` is a ['[PhoenixProducerConcept]] if it uses
+A [ProducerPort] type `P` is a ['[PhoenixProducer]] if it uses
the underlying pointer based data transport mechanism. It is
-[ConnectableConcept] with a compatible [PhoenixConsumerConcept].
+[Connectable] with a compatible [PhoenixConsumer].
[heading Refinement of]
-* [ProducerPortConcept]
-* [InvocableConcept]
+* [ProducerPort]
+* [Invocable]
[heading Notation]
The following expressions are used in this document:
[variablelist
- [[P] [A [PhoenixProducerConcept] type.]]
- [[C] [A [PhoenixConsumerConcept] type [ConnectableConcept] to `P`.]]
+ [[P] [A [PhoenixProducer] type.]]
+ [[C] [A [PhoenixConsumer] type [Connectable] to `P`.]]
[[PCategory] [The producer category of `P`.]]
[[p] [An object of type `P`.]]
[[c] [An object of type `C`.]]
@@ -60,20 +60,20 @@
[section PhoenixConsumer]
-A type `T` is a ['[PhoenixConsumerConcept]] if it uses the underlying pointer-based
-data transport mechanism. I.e., it is [ConnectableConcept] to a
-[PhoenixProducerConcept] of compatible produced type.
+A type `T` is a ['[PhoenixConsumer]] if it uses the underlying pointer-based
+data transport mechanism. I.e., it is [Connectable] to a
+[PhoenixProducer] of compatible produced type.
[heading Refinement of]
-* [ConsumerPortConcept]
-* [ConnectableConcept] with [PhoenixProducerConcept] of compatible produced type.
+* [ConsumerPort]
+* [Connectable] with [PhoenixProducer] of compatible produced type.
[heading Notation]
The following expressions are used in this document:
[variablelist
- [[C] [A [PhoenixConsumerConcept] type.]]
- [[P] [A [PhoenixProducerConcept] type of compatible produced type.]]
+ [[C] [A [PhoenixConsumer] type.]]
+ [[P] [A [PhoenixProducer] type of compatible produced type.]]
[[CCategory] [The consumer category of `C`.]]
[[c] [An object of type `C`.]]
[[p] [An object of type `P`.]]
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/rationale.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/rationale.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/rationale.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -28,11 +28,11 @@
but might be problematic where the result type is not fixed (and in the
future all of the operations will probably be modified to return a value
where appropriate.
-* Port operations (as parts of [BinaryOperableConcept] and
- [UnaryOperableConcept] concepts) have been rolled into a single class
+* Port operations (as parts of [BinaryOperable] and
+ [UnaryOperable] concepts) have been rolled into a single class
template with the operation selected by type because all of these operations
- share [ProxyPortConcept] and (for [BinaryOperableConcept]) [KeyedPortConcept]
- resolution. [ComponentOperableConcept] operations have been implemented
+ share [ProxyPort] and (for [BinaryOperable]) [KeyedPort]
+ resolution. [ComponentOperable] operations have been implemented
the same way for consistency.
[endsect]
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -26,8 +26,8 @@
[heading Model of]
-* [SignalConsumerConcept]
-* [SignalProducerConcept]
+* [SignalConsumer]
+* [SignalProducer]
[heading Description]
@@ -60,9 +60,9 @@
[*See also]: [classref boost::signals::applicator applicator class reference.]
[heading Model of]
-* [SignalConsumerConcept]
-* [SignalProducerConcept]
-* [ConnectableConcept] to any [SignalProducerConcept] type `P` where
+* [SignalConsumer]
+* [SignalProducer]
+* [Connectable] to any [SignalProducer] type `P` where
`Signature` matches `P`'s produced type.
[heading Description]
@@ -94,9 +94,9 @@
[*See also]: [classref boost::signals::instantiator instantiator class reference.]
[heading Model of]
-* [SignalConsumerConcept]
-* [SignalProducerConcept]
-* [ConnectableConcept] to any [SignalProducerConcept] type `P` where
+* [SignalConsumer]
+* [SignalProducer]
+* [Connectable] to any [SignalProducer] type `P` where
`Signature` matches `P`'s produced type.
[heading Description]
@@ -115,9 +115,9 @@
[*See also]: [classref boost::signals::modifier modifier class reference.]
[heading Model of]
-* [SignalConsumerConcept]
-* [SignalProducerConcept]
-* [ConnectableConcept] to any [SignalProducerConcept] type `P` where
+* [SignalConsumer]
+* [SignalProducer]
+* [Connectable] to any [SignalProducer] type `P` where
`Signature` matches `P`'s produced type.
[heading Description]
@@ -139,9 +139,9 @@
[*See also]: [classref boost::signals::storage storage class reference.]
[heading Model of]
-* [SignalConsumerConcept]
-* [SignalProducerConcept]
-* [ConnectableConcept] to any [SignalProducerConcept] type `P` where
+* [SignalConsumer]
+* [SignalProducer]
+* [Connectable] to any [SignalProducer] type `P` where
`Signature` matches `P`'s produced type.
[heading Description]
@@ -170,9 +170,9 @@
[*See also]: [classref boost::signals::junction junction class reference.]
[heading Model of]
-* [SignalConsumerConcept]
-* [SignalProducerConcept]
-* [ConnectableConcept] to any [SignalProducerConcept] type `P` where
+* [SignalConsumer]
+* [SignalProducer]
+* [Connectable] to any [SignalProducer] type `P` where
`Signature` matches `P`'s produced type.
[heading Description]
@@ -188,9 +188,9 @@
[*See also]: [classref boost::signals::multiplexer multiplexer class reference.]
[heading Model of]
-* [SignalConsumerConcept]
-* [SignalProducerConcept]
-* [ConnectableConcept] to any [SignalProducerConcept] type `P` where
+* [SignalConsumer]
+* [SignalProducer]
+* [Connectable] to any [SignalProducer] type `P` where
`Signature` matches `P`'s produced type.
[heading Description]
@@ -210,9 +210,9 @@
[*See also]: [classref boost::signals::mutex mutex class reference.]
[heading Model of]
-* [SignalConsumerConcept]
-* [SignalProducerConcept]
-* [ConnectableConcept] to any [SignalProducerConcept] type `P` where
+* [SignalConsumer]
+* [SignalProducer]
+* [Connectable] to any [SignalProducer] type `P` where
`Signature` matches `P`'s produced type.
[heading Description]
@@ -228,9 +228,9 @@
[*See also]: [classref boost::signals::mutex mutex class reference.]
[heading Model of]
-* [SignalConsumerConcept]
-* [SignalProducerConcept]
-* [ConnectableConcept] to any [SignalProducerConcept] type `P` where
+* [SignalConsumer]
+* [SignalProducer]
+* [Connectable] to any [SignalProducer] type `P` where
`Signature` matches `P`'s produced type.
[heading Description]
@@ -248,9 +248,9 @@
[*See also]: [classref boost::signals::function function class reference.]
[heading Model of]
-* [SignalConsumerConcept]
-* [SignalProducerConcept]
-* [ConnectableConcept] to any [SignalProducerConcept] type `P` where
+* [SignalConsumer]
+* [SignalProducer]
+* [Connectable] to any [SignalProducer] type `P` where
`Signature` matches `P`'s produced type.
[heading Description]
@@ -269,9 +269,9 @@
[section:chain chain]
[heading Model of]
-* [SignalConsumerConcept]
-* [SignalProducerConcept]
-* [ConnectableConcept] to any [SignalProducerConcept] type `P` where
+* [SignalConsumer]
+* [SignalProducer]
+* [Connectable] to any [SignalProducer] type `P` where
`Signature` matches `P`'s produced type.
[heading Description]
@@ -297,8 +297,8 @@
[*See also]: [classref boost::signals::socket_sender socket_sender class reference.]
[heading Model of]
-* [SignalConsumerConcept]
-* [ConnectableConcept] to any [SignalProducerConcept] type `P` where
+* [SignalConsumer]
+* [Connectable] to any [SignalProducer] type `P` where
`Signature` matches `P`'s produced type.
[heading Description]
@@ -318,7 +318,7 @@
[*See also]: [classref boost::signals::socket_receiver socket_receiver class reference.]
[heading Model of]
-* [SignalProducerConcept]
+* [SignalProducer]
[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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -1,19 +1,19 @@
[section Concepts]
[section:signalporttraits SignalPortTraits]
-A [PortTraitsConcept] type `T` is a [`[SignalPortTraitsConcept]] if
+A [PortTraits] type `T` is a [`[SignalPortTraits]] if
its mechanism is `signals::mechanism`, and it specifies the signature
of the underlying signal.
[heading Refinement of]
-* [PortTraitsConcept]
+* [PortTraits]
[heading Notation]
The following expressions are used in this document:
[variablelist
- [[PT] [A [SignalPortTraitsConcept] type.]]
- [[C] [A [ConnectableConcept] [SignalConsumerConcept].]]
+ [[PT] [A [SignalPortTraits] type.]]
+ [[C] [A [Connectable] [SignalConsumer].]]
[[p] [An object of type `p`.]]
[[c] [An object of type `c`.]]
]
@@ -25,7 +25,7 @@
[Mechanism]
[`PT::mechanism`]
[`dataflow::signals::mechanism`]
- [[MechanismConcept] type tag.]
+ [[Mechanism] type tag.]
]
[
[Signature]
@@ -39,21 +39,21 @@
[section SignalProducer]
-A [ProducerPortConcept] type `P` is a ['[SignalProducerConcept]] if its
-[PortTraitsConcept] is a [SignalPortTraitsConcept], and the `get_port` function
+A [ProducerPort] type `P` is a ['[SignalProducer]] if its
+[PortTraits] is a [SignalPortTraits], and the `get_port` function
returns the underlying `boost::signal`.
[heading Refinement of]
-* [ProducerPortConcept]
-* [ConnectableConcept] with [SignalConsumerConcept] of same signature.
+* [ProducerPort]
+* [Connectable] with [SignalConsumer] of same signature.
[heading Notation]
The following expressions are used in this document:
[variablelist
- [[`P`] [A [SignalProducerConcept] type.]]
- [[`PT`] [[PortTraitsConcept] of `P`]]
- [[`C`] [A [ConnectableConcept] [SignalConsumerConcept].]]
+ [[`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`.]]
@@ -85,21 +85,21 @@
[section SignalConsumer]
-A [ConsumerPortConcept] type `P` is a ['[SignalConsumerConcept]] if its
-[PortTraitsConcept] is a [SignalPortTraitsConcept], and the `get_port` function
+A [ConsumerPort] type `P` is a ['[SignalConsumer]] if its
+[PortTraits] is a [SignalPortTraits], and the `get_port` function
returns the underlying `boost::function`.
[heading Refinement of]
-* [ConsumerPortConcept]
-* [ConnectableConcept] with [SignalProducerConcept] of same signature.
+* [ConsumerPort]
+* [Connectable] with [SignalProducer] of same signature.
[heading Notation]
The following expressions are used in this document:
[variablelist
- [[`C`] [A [SignalConsumerConcept] type.]]
- [[`PT`] [[PortTraitsConcept] of `C`]]
- [[`P`] [A [ConnectableConcept] [SignalProducerConcept].]]
+ [[`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`.]]
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -5,10 +5,10 @@
[*See also]: [funcref boost::signals::connect connect function reference.]
[DataflowSignals] provides a [connect] function in the `boost::signals`
-namespace, which connects a [SignalProducerConcept] and [SignalConsumerConcept]
-which are [ConnectableConcept].
+namespace, which connects a [SignalProducer] and [SignalConsumer]
+which are [Connectable].
-Given a [SignalProducerConcept] `p` and [SignalConsumerConcept] `c`,
+Given a [SignalProducer] `p` and [SignalConsumer] `c`,
connect(p,c);
@@ -55,8 +55,8 @@
[section invoke function]
[DataflowSignals] provides an [invoke] function in the `boost::signals`
-namespace, which invokes a [InvocableConcept] [DataflowSignals]
-[ComponentConcept].
+namespace, which invokes a [Invocable] [DataflowSignals]
+[Component].
[endsect]
@@ -73,7 +73,7 @@
[heading Models]
* [SignalConsumer]
-* [ProxyPortConcept]
+* [ProxyPort]
[endsect][/slot_selector]
Copied: sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/binary_operable.qbk (from r41673, /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/binary_operable.qbk)
==============================================================================
--- /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/binary_operable.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/binary_operable.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -1,25 +1,25 @@
[section:binaryoperable BinaryOperable (Connectable, OnlyConnectable, Disconnectable, Extractable) ]
-A [ProducerPortConcept] `P` and [ConsumerPortConcept] `C` are /BinaryOperable/
+A [ProducerPort] `P` and [ConsumerPort] `C` are /BinaryOperable/
for a binary operation `O`, and mechanism `M`, if the implementation of
the binary operation `O` has been specialized for `M`, `P`, and `C`.
In this case,
-* If `O` is operations::connect, `P` and `C` are [ConnectableConcept]
-* If `O` is operations::connect_only, `P` and `C` are [OnlyConnectableConcept]
-* If `O` is operations::disconnect, `P` and `C` are [DisconnectableConcept]
-* If `O` is operations::extract, `P` and `C` are [ExtractableConcept]
+* If `O` is operations::connect, `P` and `C` are [Connectable]
+* If `O` is operations::connect_only, `P` and `C` are [OnlyConnectable]
+* If `O` is operations::disconnect, `P` and `C` are [Disconnectable]
+* If `O` is operations::extract, `P` and `C` are [Extractable]
[heading Notation]
The following expressions are used in this document:
[variablelist
- [[P] [A [ProducerPortConcept] type.]]
- [[C_C] [A [ConsumerPortConcept] [ConnectableConcept] with `P`]]
- [[C_O] [A [ConsumerPortConcept] [OnlyConnectableConcept] with `P`]]
- [[C_D] [A [ConsumerPortConcept] [DisconnectableConcept] with `P`]]
- [[C_E] [A [ConsumerPortConcept] [ExtractableConcept] with `P`]]
+ [[P] [A [ProducerPort] type.]]
+ [[C_C] [A [ConsumerPort] [Connectable] with `P`]]
+ [[C_O] [A [ConsumerPort] [OnlyConnectable] with `P`]]
+ [[C_D] [A [ConsumerPort] [Disconnectable] with `P`]]
+ [[C_E] [A [ConsumerPort] [Extractable] with `P`]]
[[p] [An object of type P.]]
[[c_c] [An object of type C_C.]]
[[c_o] [An object of type C_O.]]
Copied: sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/component.qbk (from r41673, /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/component.qbk)
==============================================================================
--- /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/component.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/component.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -1,17 +1,17 @@
[section:component Component, ComponentTraits]
-A ['[ComponentConcept]] is the fundamental data processing element. It can
-have a number of [PortConcept]s, and can also be [InvocableConcept].
+A ['[Component]] is the fundamental data processing element. It can
+have a number of [Port]s, and can also be [Invocable].
-The traits of a component are held in a ['[ComponentTraitsConcept]] type.
-There are multiple ways of registering the [ComponentTraitsConcept]
-for a [ComponentConcept] (see examples below).
+The traits of a component are held in a ['[ComponentTraits]] type.
+There are multiple ways of registering the [ComponentTraits]
+for a [Component] (see examples below).
[heading Notation]
[variablelist
- [[C] [A [ComponentConcept] type.]]
- [[CT] [The [ComponentTraitsConcept] type of `C`.]]
+ [[C] [A [Component] type.]]
+ [[CT] [The [ComponentTraits] type of `C`.]]
[[I] [An MPL Integral Constant in the range \[0, number of ports exposed by C).]]
[[c] [An object of type C.]]
]
@@ -24,7 +24,7 @@
[`component_traits_of<M, C>::type`]
[`CT`]
[
- The [ComponentTraitsConcept] of the component.
+ The [ComponentTraits] of the component.
]
]
[
@@ -38,10 +38,10 @@
]
[
[ GetComponentPort ]
- [`get_component_port<M, I>(c)`]
+ [`get_port<M, I>(c)`]
[]
[
- Returns the I'th [PortConcept] exposed by `C`
+ Returns the I'th [Port] exposed by `C`
]
]
]
@@ -52,10 +52,10 @@
[
[Port Traits]
[`CT::ports`]
- [MPL Sequence of [PortTraitsConcept] types]
+ [MPL Sequence of [PortTraits] types]
[
- An enumeration of the [PortTraitsConcept] of the exposed
- [PortConcept]s.
+ An enumeration of the [PortTraits] of the exposed
+ [Port]s.
]
]
]
@@ -78,19 +78,19 @@
[section:componentoperable ComponentOperable (Invocable) ]
-A [ComponentConcept] `P` is /ComponentOperable/
+A [Component] `P` is /ComponentOperable/
for a component operation `O`, and mechanism `M`, if the implementation of
the component operation `O` has been specialized for `M` and `P`
In this case,
-* If `O` is operations::invoke, `P` is [InvocableConcept]
+* If `O` is operations::invoke, `P` is [Invocable]
[heading Notation]
The following expressions are used in this document:
[variablelist
- [[C] [A [ComponentConcept] type.]]
+ [[C] [A [Component] type.]]
[[c] [An object of type P.]]
]
Copied: sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/concepts.qbk (from r41673, /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/concepts.qbk)
==============================================================================
--- /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/concepts.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/concepts.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -38,7 +38,7 @@
implementation.
In the Dataflow library, most port related class templates are keyed through
-a [MechanismConcept] type tag. For example, the [DataflowSignals] layer
+a [Mechanism] type tag. For example, the [DataflowSignals] layer
uses two mechanisms for its ports and related operations - one mechanism
is used for lasting connections between a `signal` and a `function`, while
another is used for one-time extractions of data.
@@ -55,7 +55,7 @@
a function that returns a value. Similarly, a consumer port could be anything
that consumes data - a function that takes an argument, a functor, etc.
-Ports are captured more formally by the [PortConcept] concept.
+Ports are captured more formally by the [Port] concept.
[heading Components]
@@ -64,20 +64,20 @@
might have one consumer port (consuming video to be processed) and one
producer port (producing filtered video).
-Typically, a component is embedded in a class, and the different [PortConcept]s
+Typically, a component is embedded in a class, and the different [Port]s
are accessible either through the class directly, or through its member
functions and variables.
-The Dataflow library also offers a [ComponentConcept] concept, which is
+The Dataflow library also offers a [Component] concept, which is
intented to provide compile-time introspection and other operations.
[heading Proxies]
-It is often the case that a port delegates its [PortConcept]
+It is often the case that a port delegates its [Port]
functionality to some other element. For example, a
class that is a [DataflowSignals] component might delegate its
-[ProducerPortConcept] functionality to a member boost::signal. It can
-do so by declaring itself a [ProxyProducerPortConcept] for the boost::signal.
+[ProducerPort] functionality to a member boost::signal. It can
+do so by declaring itself a [ProxyProducerPort] for the boost::signal.
[heading Port Operations]
@@ -89,8 +89,8 @@
which it collects data from.
Operations between two ports such as /connect/, /connect_only/, /disconnect/,
-and /extract/ are captured by the [BinaryOperableConcept] concept. Operations
-on a single port such as /disconnect_all/ are covered by the [UnaryOperableConcept]
+and /extract/ are captured by the [BinaryOperable] concept. Operations
+on a single port such as /disconnect_all/ are covered by the [UnaryOperable]
concept.
[/
@@ -132,7 +132,7 @@
causing it to consume data from connected producers, and producing data
for connected consumers.
-Invocation is captured more formally by the [InvocableConcept] concept.
+Invocation is captured more formally by the [Invocable] concept.
[section Port related]
Copied: sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/port.qbk (from r41673, /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/port.qbk)
==============================================================================
--- /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/port.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/port.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -1,7 +1,7 @@
[section PortCategory]
-A [PortCategoryConcept] designates a category of port in the Dataflow library.
-The library currently defines two [PortCategoryConcept]s:
+A [PortCategory] designates a category of port in the Dataflow library.
+The library currently defines two [PortCategory]s:
* `boost::dataflow::ports::producer`, and
* `boost::dataflow::ports::consumer`.
@@ -12,7 +12,7 @@
The following expressions are used in this document:
[variablelist
- [[PC] [A [PortCategoryConcept] type.]]
+ [[PC] [A [PortCategory] type.]]
]
[heading Requirements]
@@ -20,14 +20,22 @@
[table
[[Name] [Expression] [Result Type] [Description]]
[
- [Opposite PortCategory]
+ [Complementing PortCategory]
[`PC::complement`]
- [[PortCategoryConcept] type]
+ [[PortCategory] type]
[
- The complementing [PortCategoryConcept] of `PC`, meaning that it
- is possible to make connections between [PortConcept]s of
- [PortCategoryConcept] `PC` and [PortConcept]s of
- [PortCategoryConcept] `PC::complement`.
+ The complementing [PortCategory] of `PC`, meaning that it
+ is possible to make connections between [Port]s of
+ [PortCategory] `PC` and [Port]s of
+ [PortCategory] `PC::complement`.
+ ]
+ ]
+ [
+ [Is PortCategory Trait]
+ [[^[is_port_category]<T>::type]]
+ [Boolean MPL Metafunction that evaulates to true]
+ [
+ Trait encapsulating adherence to the [PortCategory] concept.
]
]
]
@@ -46,34 +54,29 @@
[section:port Port, PortTraits]
-A ['[PortConcept]] is the fundamental point of data production or consumption.
-In order for a type `P` to satisfy the [PortConcept] concept requirements,
-a [PortTraitsConcept] type (specifying the traits of the port)
+A ['[Port]] is the fundamental point of data production or consumption.
+In order for a type `P` to satisfy the [Port] concept requirements,
+a [PortTraits] type (specifying the traits of the port)
must be registered for the port. Registration can be
performed in multiple ways (see the examples below).
-[PortConcept] concept
-requirements are always relative to a particular a [MechanismConcept] `M` and
-[PortCategoryConcept] `PC`.
-
-* If `PC` is `ports::producer`, then `P` is a [ProducerPortConcept]
-* If `PC` If `ports::consumer`, then `P` is a [ConsumerPortConcept]
-
-A type can be a [PortConcept] for multiple mechanisms and/or port categories.
+[Port] concept
+requirements are always relative to a particular [Tag], so a type
+can be a [Port] for multiple [Tag]s.
[heading Port Refinements]
-* [KeyedPortConcept]
-* [ComplementedPortConcept]
+* [KeyedPort]
+* [ComplementedPort]
[heading Notation]
The following expressions are used in this document:
[variablelist
- [[`M`] [A [MechanismConcept] type.]]
- [[`PC`] [A [PortCategoryConcept] type.]]
- [[`P`] [A Port type, for [MechanismConcept] `M` and [PortCategoryConcept] `PC`.]]
- [[`PT`] [[PortTraitsConcept] of `P` for `M` and `PC`.]]
+ [[`T`] [A [Tag] type. If omitted, `T` defaults to [default_tag].]]
+ [[`PC`] [A [PortCategory] type.]]
+ [[`P`] [A Port type, for [Tag] `T`.]]
+ [[`PT`] [[PortTraits] of `P` for `T`.]]
[[`p`] [An object of type `P`]]
]
@@ -82,15 +85,15 @@
[[Name] [Expression] [Result Type] [Semantics]]
[
[Port Traits]
- [`port_traits_of<M, PC, P>::type`]
+ [[^[port_traits_of]<P, T>::type]]
[`PT`]
[
- The [PortTraitsConcept] of the port.
+ The [PortTraits] of the port.
]
]
[
[IsPort Trait]
- [`is_port<M, PC, P>::type`]
+ [[^[is_port]<P, T>::type]]
[Boolean metafunction that evaluates to true]
[
A trait encapsulating adherence to the Port
@@ -98,13 +101,11 @@
]
]
[
- [Get Port]
- [`get_port<M,PC>(p)`]
- [`get_port_result_type<M,PC,P>::type`]
+ [Get Default Port]
+ [`get_default_port<D,M,T>(p)`]
+ [p]
[
- Returns the underlying port object. With regular ports,
- this is typically a reference to `p`. With [ProxyPortConcept]
- objects, it is typically the proxied port object.
+ Returns the port object.
]
]
]
@@ -113,24 +114,23 @@
[table
[[Name] [Expression] [Result Type] [Semantics]]
[
- [Mechanism]
- [`PT::mechanism`]
- [any type]
- [[MechanismConcept] type tag.]
- ]
- [
[Port Category]
- [`PT::port_category`]
- [[PortCategoryConcept] type]
+ [`PT::category`]
+ [[PortCategory] type]
[The category of the port]
]
[
- [Port Concept]
- [`PT::port_concept`]
+ [Port ]
+ [`PT::concept`]
[`concepts::port`, `concepts::keyed_port`, `concepts::complemented_port`]
[The most refined producer concept that `P` satisfies.]
]
-
+ [
+ [Mechanism]
+ [`PT::tag`]
+ [any type]
+ [[Mechanism] type tag.]
+ ]
]
[heading Header]
@@ -142,54 +142,63 @@
#include <boost/dataflow/support.hpp>
```
+[heading Models]
+* [port]
+* [port_traits]
+
[heading Notes]
There is an intrusive as well as a non-intrusive way to register the
-[PortTraitsConcept] of a type `P`, thereby making it a [PortConcept].
+[PortTraits] of a type `P`, thereby making it a [Port].
-Non-intrusive registration is done by providing a specialization of
-the `register_port_traits` template (either directly, or through the provided
-macros DATAFLOW_PORT_TRAITS and DATAFLOW_PORT_TRAITS_ENABLE_IF).
+Non-intrusive registration is typically done by providing a specialization of
+the [register_port_traits] template (either directly, or through the provided
+macros [DATAFLOW_PORT_TRAITS] and [DATAFLOW_PORT_TRAITS_ENABLE_IF]). This will
+specialize [port_traits_of] for all cv-qualified versions of type `P`.
+If cv-qualified versions of type `P` should have different [PortTraits]s,
+[port_traits_of] should be specialized directly.
Intrusive registration can be done by providing
-a `P::port_traits` member type, which can be either a [PortTraitsConcept]
-type, or an MPL sequence of [PortTraitsConcept] types. Alternatively,
+a `P::port_traits` member type, which can be either a [PortTraits]
+type, or an MPL sequence of [PortTraits] types. Alternatively,
the Dataflow library provides a convenience class
-`port` which you can inherit instead of declaring the member type.
+`port` which you can inherit instead of declaring the member type. This
+provides the additional benefit of using the free functions in the
+`boost::dataflow` namespace using ADL.
The below examples illustrate the avaliable registration methods.
[heading Examples]
-All of the below examples use the following [MechanismConcept] and
-[PortTraitsConcept] types:
+All of the below examples use the following [Mechanism] and
+[PortTraits] types:
[port_registration_example_prep]
[heading Intrusive registration]
Intrusive registration is the easiest, but assumes you can modify the
-[PortConcept]:
+[Port]:
[port_registration_example_intrusive]
[heading Non-intrusive registration]
Non-intrusive registration is done by specializing the `register_port_traits`
-template. Since the `register_port_traits` template is keyed by [MechanismConcept]
-and [PortCategoryConcept], this is rather verbose:
+template. Since the `register_port_traits` template is keyed by [Mechanism]
+and [PortCategory], this is rather verbose:
[port_registration_example_non_intrusive]
To make things simpler, the Dataflow library provides a macro for non-intrusive
registration (the macro also performs a static check on the
-[PortTraitsConcept]).
+[PortTraits]).
[port_registration_example_non_intrusive_macro]
[heading Non-intrusive mass registration]
-The `register_port_traits` template has an Enable template parameter for use with
+The [register_port_traits] template has an Enable template parameter for use with
`boost::enable_if`. Hence, we can register a number of types at the same time:
[port_registration_example_non_intrusive_enable_if]
@@ -209,37 +218,37 @@
[section:complementedport ComplementedPort, ComplementedPortTraits]
-A ComplementedPort `P` is a [PortConcept] s.t. whenever it is
-[BinaryOperableConcept] with another [PortConcept] `P2`, `P2` is
+A ComplementedPort `P` is a [Port] s.t. whenever it is
+[BinaryOperable] with another [Port] `P2`, `P2` is
a particular type - `P`'s complement type.
-[ComplementedPortConcept]s are useful in situations where [PortConcept] types
-are [BinaryOperableConcept] in a one-to-one fashion (a pair of [PortConcept] types
+[ComplementedPort]s are useful in situations where [Port] types
+are [BinaryOperable] in a one-to-one fashion (a pair of [Port] types
are each other's port complements), or in a one-to-many fashion (a number
-of [PortConcept] types have the same complement port). An example of the
+of [Port] types have the same complement port). An example of the
latter is [DataflowSignals], where any `signal` of signature `T` has
a complement port of type `function<T>`, and can therefore model
-[ComplementedPortConcept], but `function<T>` is cannot because there are many `signal`
+[ComplementedPort], but `function<T>` is cannot because there are many `signal`
types to which it can be connected.
-The traits of a [ComplementedPortConcept] are captured by the
-[ComplementedPortTraitsConcept], which refines the [PortTraitsConcept] with
+The traits of a [ComplementedPort] are captured by the
+[ComplementedPortTraits], which refines the [PortTraits] with
an additional member type specifying the complement port type.
[heading ComplementedPort Refines]
-* [PortConcept]
+* [Port]
[heading ComplementedPortTraits Refines]
-* [PortTraitsConcept]
+* [PortTraits]
[heading Notation]
The following expressions are used in this document:
[variablelist
- [[`M`] [A [MechanismConcept] type.]]
- [[`PC`] [A [PortCategoryConcept] type.]]
- [[`P`] [A [ComplementedPortConcept] type, for [MechanismConcept] `M` and [PortCategoryConcept] `PC`.]]
- [[`PT`] [[ComplementedPortTraitsConcept] of `P` for `M` and `PC`.]]
+ [[`T`] [A [Tag] type. If omitted, `T` defaults to [default_tag].]]
+ [[`PC`] [A [PortCategory] type.]]
+ [[`P`] [A [ComplementedPort] type, for [Tag] `T`.]]
+ [[`PT`] [[ComplementedPortTraits] of `P` for `T`.]]
]
[heading ComplementedPort Requirements]
@@ -250,7 +259,7 @@
[`port_traits_of<M, PC, P>::type`]
[`PT`]
[
- The [ComplementedPortTraitsConcept] of the port.
+ The [ComplementedPortTraits] of the port.
]
]
]
@@ -261,17 +270,19 @@
[
[Complement Port Type]
[`PT::complement_port_type`]
- [Any [PortConcept] type]
+ [Any [Port] type]
[
- The complement port type of the port type `P`. If `P` is
- [BinaryOperableConcept] with another port type `P2`, then
- `get_port<PT::mechanism, PT::category::complement>(p2)` must
- return an object of type `PT::complement_port_type` or reference
- to such.
+ The complement port type of `P`. If `P` is
+ [BinaryOperable] with another port type `P2`, then `P2` must
+ be `PT::complement_port_type`.
]
]
]
+[heading Models]
+
+* [complemented_port_traits]
+
[endsect]
[section KeyedPort]
@@ -279,11 +290,11 @@
[section ProxyPort, ProxyPortTraits]
-A type `PP` is a ['[ProxyPortConcept]] for a mechanism `M` and port category `PC`
-if it specifies a [ProxyPortTraitsConcept] for that mechanism and port category.
+A type `PP` is a ['[ProxyPort]] for a mechanism `M` and port category `PC`
+if it specifies a [ProxyPortTraits] for that mechanism and port category.
If the proxied port type is a valid
-[PortConcept], then 'PP' satisfies the [PortConcept] requirements
+[Port], then 'PP' satisfies the [Port] requirements
in the same way.
[heading Notation]
@@ -300,7 +311,7 @@
[
[Proxy Port Traits]
[`proxy_port_traits_of<PP>::type`]
- [[ProxyPortTraitsConcept] type.]
+ [[ProxyPortTraits] type.]
[
The traits of the proxy port.
]
Copied: sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/unary_operable.qbk (from r41673, /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/unary_operable.qbk)
==============================================================================
--- /sandbox/SOC/2007/signals/libs/dataflow/doc/concepts/unary_operable.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/support/concepts/unary_operable.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -1,7 +1,7 @@
[section:unaryoperable UnnaryOperable (AllDisconnectable) ]
-A [PortConcept] `P` is /UnnaryOperable/
+A [Port] `P` is /UnnaryOperable/
for a unary operation `O`, and mechanism `M`, if the implementation of
the unnary operation `O` has been specialized for `M` and `P`
@@ -13,7 +13,7 @@
The following expressions are used in this document:
[variablelist
- [[P] [A [PortConcept] type.]]
+ [[P] [A [Port] type.]]
[[p] [An object of type P.]]
]
Added: sandbox/SOC/2007/signals/libs/dataflow/doc/support/support.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/support/support.qbk 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -0,0 +1,7 @@
+[section:support Generic Support Layer]
+
+[include concepts/concepts.qbk]
+
+[xinclude ../dataflow_support_doxygen.xml]
+
+[endsect]
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -3,18 +3,18 @@
# accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
-build-project VTK ;
-build-project signals ;
-build-project blueprint ;
+#build-project VTK ;
+#build-project signals ;
+#build-project blueprint ;
project dataflow/example
: requirements
<include>../../..
- <include>$(BOOST_ROOT)/boost
+ <include>$(BOOST_ROOT)
<define>BOOST_ALL_NO_LIB=1
;
# exe timing_example : timing_example.cpp ;
#exe edit_distance : edit_distance.cpp ;
#exe fibonacci : fibonacci.cpp ;
-
+exe example : example.cpp ;
Modified: sandbox/SOC/2007/signals/libs/dataflow/example/VTK/vtk_dataflow_support.hpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/example/VTK/vtk_dataflow_support.hpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/example/VTK/vtk_dataflow_support.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -376,9 +376,9 @@
//]
//[ vtk_specialize_connect
-// the include templates expect DATAFLOW_TEMPLATE_MECHANISM to have
+// the include templates expect DATAFLOW_TEMPLATE_TAG to have
// the mechanism type
-#define DATAFLOW_TEMPLATE_MECHANISM boost::dataflow::vtk::mechanism
+#define DATAFLOW_TEMPLATE_TAG boost::dataflow::vtk::mechanism
// the binary_operation.hpp template expects DATAFLOW_TEMPLATE_BINARY_OPERATION
# define DATAFLOW_TEMPLATE_BINARY_OPERATION connect
@@ -400,7 +400,7 @@
# undef DATAFLOW_TEMPLATE_BINARY_OPERATION
-#undef DATAFLOW_TEMPLATE_MECHANISM
+#undef DATAFLOW_TEMPLATE_TAG
// We now have connect and connect_only functions that each take a
// vtk ProducerPort and vtk ConsumerPort as arguments, and try to connect them.
Modified: sandbox/SOC/2007/signals/libs/dataflow/example/example.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/example/example.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/example/example.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -3,11 +3,15 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#include <boost/dataflow/support.hpp>
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/fusion/container/vector.hpp>
+#include <boost/fusion/include/mpl.hpp>
using namespace boost;
-
int main()
{
+ BOOST_MPL_ASSERT(( mpl::at<fusion::vector<mpl::true_>, mpl::int_<0> >::type ));
+ BOOST_MPL_ASSERT(( mpl::is_sequence<fusion::vector<int> > ));
}
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -13,11 +13,11 @@
;
run test_port.cpp ;
-run test_proxy_port.cpp ;
+#run test_proxy_port.cpp ;
run test_unary_op.cpp ;
run test_binary_op.cpp ;
run test_keyed_port.cpp ;
run test_component.cpp ;
-run test_reflective_component.cpp ;
+#run test_reflective_component.cpp ;
build-project signals ;
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/my_producer_consumer.hpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/my_producer_consumer.hpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/my_producer_consumer.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -18,14 +18,12 @@
struct my_producer_traits
: public df::port_traits<
- my_mechanism,
df::ports::producer,
df::concepts::port>
{};
struct my_consumer_traits
: public df::port_traits<
- my_mechanism,
df::ports::consumer,
df::concepts::port>
{};
Added: sandbox/SOC/2007/signals/libs/dataflow/test/my_producer_consumer_operations.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/my_producer_consumer_operations.hpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -0,0 +1,57 @@
+// 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_TEST_MY_PRODUCER_CONSUMER_OPERATIONS_HPP
+#define DATAFLOW_TEST_MY_PRODUCER_CONSUMER_OPERATIONS_HPP
+
+#include <boost/dataflow/support/binary_operation.hpp>
+
+
+bool connected = false;
+bool only_connected = false;
+bool disconnected = false;
+
+namespace boost { namespace dataflow { namespace extension {
+
+template<>
+struct binary_operation_impl<my_producer_traits, my_consumer_traits, operations::connect>
+{
+ typedef void result_type;
+
+ template<typename Producer, typename Consumer>
+ void operator()(Producer &, Consumer &)
+ {
+ connected = true;
+ }
+};
+
+template<>
+struct binary_operation_impl<my_producer_traits, my_consumer_traits, operations::connect_only>
+{
+ typedef void result_type;
+
+ template<typename Producer, typename Consumer>
+ void operator()(Producer &, Consumer &)
+ {
+ only_connected = true;
+ }
+};
+
+template<>
+struct binary_operation_impl<my_producer_traits, my_consumer_traits, operations::disconnect>
+{
+ typedef void result_type;
+
+ template<typename Producer, typename Consumer>
+ void operator()(Producer &, Consumer &)
+ {
+ disconnected = true;
+ }
+};
+
+}}}
+
+
+#endif
\ 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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -13,7 +13,7 @@
<define>BOOST_ALL_NO_LIB=1
;
-run test_result_of_defined.cpp ;
+#run test_result_of_defined.cpp ;
run test_bind_object.cpp ;
run test_connect.cpp ;
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_branching.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_branching.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_branching.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -36,7 +36,8 @@
banger
| counter
- | (floater.send_slot() >>= collector);
+ | floater.send_slot();
+ floater >>= collector;
banger();
BOOST_CHECK_EQUAL(counter.count(), 1);
@@ -51,10 +52,10 @@
signals::storage<void (float), signals::fused> collector(0.0f);
banger
- // floater connects to collector, banger to floater.send_slot()
- | (floater.send_slot() >>= collector)
- | counter; // and banger to counter
-
+ | counter
+ | floater.send_slot();
+ floater >>= collector;
+
banger();
BOOST_CHECK_EQUAL(counter.count(), 1);
BOOST_CHECK_EQUAL(collector.at<0>(), 2.5f);
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_chain.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_chain.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_chain.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -16,14 +16,14 @@
using namespace boost;
//[ test_chain_classes
-class UnfusedDoublerClass : public signals::filter<void (float)>
+class UnfusedDoublerClass : public signals::filter<UnfusedDoublerClass, void (float)>
{
public:
typedef void result_type;
void operator()(float x) {out(2*x);}
};
-class FusedDoublerClass : public signals::filter<void (float), signals::fused>
+class FusedDoublerClass : public signals::filter<FusedDoublerClass, void (float), signals::fused>
{
public:
typedef void result_type;
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_connect.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_connect.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_connect.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -22,16 +22,25 @@
int stored;
};
-int test_main(int, char* [])
+int stored = 0;
+
+void f_receiver(int x)
{
+ stored = x;
+};
+int test_main(int, char* [])
+{
+ namespace df = boost::dataflow;
+
boost::signal<void(int)> p;
receiver r;
-
+
+ connect(p, boost::function<void(int)>(f_receiver));
connect(p, r);
-
+
p(3);
-
+ BOOST_CHECK_EQUAL(stored, 3);
BOOST_CHECK_EQUAL(r.stored, 3);
return 0;
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -15,43 +15,7 @@
{
{
//[ test_disconnect_unfused
- signals::storage<void ()> banger;
- {
- signals::counter<void ()> counter;
- signals::storage<void (float)> floater;
- floater(2.5f);
- signals::storage<void (float)> collector(0.0f);
-
- banger
- | counter
- | (floater.send_slot() >>= collector);
-
- banger();
- BOOST_CHECK_EQUAL(counter.count(), 1);
- BOOST_CHECK_EQUAL(collector.at<0>(), 2.5f);
-
- #ifndef SIGNAL_NETWORK_THREAD_SAFE
- BOOST_CHECK((
- boost::is_base_of<
- boost::signals::trackable,
- signals::counter<void ()>
- >::type::value));
- BOOST_CHECK((
- boost::is_base_of<
- boost::signals::trackable,
- signals::storage<void (float)>
- >::type::value));
- #endif
-
- } // counter, floater, and collector are now destroyed and disconnected with Boost.Signals
-#ifdef SIGNAL_NETWORK_THREAD_SAFE
- // if [DataflowSignals] has detected thread safe signals, we need to
- // touch the signal to disconnect things that are destroyed:
- // unfortunatelly, this call hangs on MSVC!
- // banger();
-#endif
- BOOST_CHECK_EQUAL(banger.get_proxied_producer().num_slots(), 0u);
-
+ signals::storage<void ()> banger;
signals::counter<void ()> counter;
banger >>= counter;
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -4,8 +4,7 @@
// http://www.boost.org/LICENSE_1_0.txt)
#include <boost/dataflow/signals/component/filter.hpp>
-#include <boost/dataflow/signals/component/storage.hpp>
-#include <boost/dataflow/signals/connection.hpp>
+#include <boost/dataflow/signals/connection/operators.hpp>
#include <boost/fusion/sequence/intrinsic/at.hpp>
@@ -15,19 +14,36 @@
//[ test_filter_classes
-class DoublerClass : public signals::filter<void (float)>
+class DoublerClass : public signals::filter<DoublerClass, void (int)>
{
public:
- void operator()(float x) {out(2*x);}
+ void operator()(int x) {out(2*x);}
};
-class FusedDoublerClass : public signals::filter<void (float), signals::fused>
+struct receiver
+ : public boost::dataflow::port<boost::dataflow::signals::call_consumer>
+{
+ receiver() : stored(0) {}
+
+ void operator()(int x)
+ {
+ stored = x;
+ }
+ void operator()(const fusion::vector<int> &x)
+ {
+ stored = fusion::at_c<0>(x);
+ }
+
+ int stored;
+};
+
+class FusedDoublerClass : public signals::filter<FusedDoublerClass, void (int), signals::fused>
{
public:
- void operator()(const fusion::vector<float> &x)
+ void operator()(const fusion::vector<int> &x)
{
// this could be more general but I'm having problems with the general approach...
- fusion::vector<float> y;
+ fusion::vector<int> y;
fusion::at_c<0>(y) = 2 * fusion::at_c<0>(x);
fused_out(y);
}
@@ -37,17 +53,17 @@
int test_main(int, char* [])
{
+ namespace df=boost::dataflow;
{
//[ test_filter_unfused
DoublerClass doubler1, doubler2;
- signals::storage<void (float)> floater(1.0f);
- signals::storage<void (float)> collector(0.0f);
-
- floater >>= doubler1 >>= doubler2 >>= collector;
- floater.send();
+ receiver collector;
+
+ doubler1 >>= doubler2 >>= collector;
+ doubler1(1);
- BOOST_CHECK_EQUAL(collector.at<0>(), 4.0f);
+ BOOST_CHECK_EQUAL(collector.stored, 4);
//]
}
@@ -55,13 +71,12 @@
//[ test_filter_fused
FusedDoublerClass doubler1, doubler2;
- signals::storage<void (float), signals::fused> floater(1.0f);
- signals::storage<void (float), signals::fused> collector(0.0f);
+ receiver collector;
- floater >>= doubler1 >>= doubler2 >>= collector;
- floater.send();
+ doubler1 >>= doubler2 >>= collector;
+ doubler1(1);
- BOOST_CHECK_EQUAL(collector.at<0>(), 4.0f);
+ BOOST_CHECK_EQUAL(collector.stored, 4.0f);
//]
}
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_junction.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_junction.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_junction.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -29,14 +29,14 @@
BOOST_CHECK_EQUAL(counter1.count(), 2);
BOOST_CHECK_EQUAL(counter2.count(), 2);
- junction.disable();
+ junction.close();
banger1.send();
banger2.send();
BOOST_CHECK_EQUAL(counter1.count(), 2);
BOOST_CHECK_EQUAL(counter2.count(), 2);
- junction.enable();
+ junction.open();
banger1.send();
banger2.send();
@@ -59,14 +59,14 @@
BOOST_CHECK_EQUAL(counter1.count(), 2);
BOOST_CHECK_EQUAL(counter2.count(), 2);
- junction.disable();
+ junction.close();
banger1();
banger2();
BOOST_CHECK_EQUAL(counter1.count(), 2);
BOOST_CHECK_EQUAL(counter2.count(), 2);
- junction.enable();
+ junction.open();
banger1();
banger2();
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 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -14,7 +14,7 @@
//[ test_multi_args_class1
-class SignalFloatDuplicator : public signals::filter<void (float, float)>
+class SignalFloatDuplicator : public signals::filter<SignalFloatDuplicator, void (float, float)>
{
public:
typedef void result_type;
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_out.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_out.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_multi_out.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -12,7 +12,7 @@
//[ test_multi_out_classes
-class SignalOutIntFloat : public signals::filter<void (float)>
+class SignalOutIntFloat : public signals::filter<SignalOutIntFloat, void (float)>
{
public:
SignalOutIntFloat(float x) : x(x) {}
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_pull.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_pull.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_pull.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -11,7 +11,7 @@
using namespace boost;
//[ test_pull_classes
-class PullDoubler : public signals::filter<float ()>
+class PullDoubler : public signals::filter<PullDoubler, float ()>
{
public:
float operator()()
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_storage.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_storage.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/signals/test_storage.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -31,7 +31,9 @@
// `-------------' `-----------'
//
// -------------------------------------------------------------
- banger >>= floater.send_slot() >>= collector;
+
+ banger >>= floater.send_slot();
+ floater >>= collector;
// signal from banger is will invoke floater.send(), which causes
// floater to output 2.5
@@ -39,6 +41,7 @@
BOOST_CHECK_EQUAL(floater.at<0>(), 2.5f);
BOOST_CHECK_EQUAL(collector.at<0>(), 2.5f);
+ floater.close();
floater(1.5f); // change the value in floater
invoke(floater); // we can also signal floater directly
BOOST_CHECK_EQUAL(collector.at<0>(), 1.5f);
@@ -53,13 +56,15 @@
signals::storage<void (float), signals::fused> collector(0.0f);
// create the network (banger to floater.send, floater to collector)
- banger >>= floater.send_slot() >>= collector;
+ banger >>= floater.send_slot();
+ floater >>= collector;
// signal from banger causes floater to output 2.5
banger();
BOOST_CHECK_EQUAL(collector.at<0>(), 2.5f);
// change the value in floater
+ floater.close();
floater(1.5f);
invoke(floater); // we can also signal floater directly
BOOST_CHECK_EQUAL(collector.at<0>(), 1.5f);
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/test_binary_op.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/test_binary_op.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/test_binary_op.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -4,63 +4,31 @@
// http://www.boost.org/LICENSE_1_0.txt)
#include "my_producer_consumer.hpp"
-#include <boost/dataflow/support/binary_operation.hpp>
-
-bool connected = false;
-bool only_connected = false;
-bool disconnected = false;
-
-namespace boost { namespace dataflow { namespace extension {
-
-template<>
-struct binary_operation_impl<operations::connect, my_producer_traits, my_consumer_traits>
-{
- template<typename Producer, typename Consumer>
- void operator()(Producer &, Consumer &)
- {
- connected = true;
- }
-};
-
-template<>
-struct binary_operation_impl<operations::connect_only, my_producer_traits, my_consumer_traits>
-{
- template<typename Producer, typename Consumer>
- void operator()(Producer &, Consumer &)
- {
- only_connected = true;
- }
-};
-
-template<>
-struct binary_operation_impl<operations::disconnect, my_producer_traits, my_consumer_traits>
-{
- template<typename Producer, typename Consumer>
- void operator()(Producer &, Consumer &)
- {
- disconnected = true;
- }
-};
-
-}}}
+#include "my_producer_consumer_operations.hpp"
#include <boost/test/included/test_exec_monitor.hpp>
namespace df = boost::dataflow;
+struct whatever;
+
int test_main(int, char* [])
{
my_producer p;
my_consumer c;
- df::binary_operation<df::operations::connect, my_mechanism>(p, c);
+ df::binary_operation<df::operations::connect, df::default_tag>(p, c);
BOOST_CHECK(connected);
- df::binary_operation<df::operations::connect_only, my_mechanism>(p, c);
+ df::binary_operation<df::operations::connect_only, df::default_tag>(p, c);
BOOST_CHECK(only_connected);
- df::binary_operation<df::operations::disconnect, my_mechanism>(p, c);
- BOOST_CHECK(disconnected);
+ df::binary_operation<df::operations::disconnect, df::default_tag>(p, c);
+ BOOST_CHECK(disconnected);
+
+ connected = false;
+ df::binary_operation<df::operations::connect, whatever, df::default_tag>(p, c);
+ BOOST_CHECK(connected);
return 0;
} // int test_main(int, char* [])
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/test_component.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/test_component.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/test_component.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -3,19 +3,45 @@
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
+#include "my_producer_consumer.hpp"
+#include "my_producer_consumer_operations.hpp"
+
#include <boost/dataflow/support/component_operation.hpp>
-#include <boost/mpl/vector.hpp>
+#include <boost/dataflow/support/fusion_component.hpp>
+#include <boost/mpl/map.hpp>
-bool invoked = false;
+using namespace boost;
+
+namespace df=boost::dataflow;
-struct my_mechanism;
+bool invoked = false;
-struct my_component_traits : public boost::dataflow::component_traits<boost::mpl::vector< > >
+struct my_component_traits : public boost::dataflow::fusion_component_traits<
+ boost::fusion::vector<
+ my_producer &,
+ my_consumer &
+ >,
+ mpl::map<
+ mpl::pair<
+ df::default_port_selector<df::directions::outgoing>,
+ mpl::int_<0> >,
+ mpl::pair<
+ df::default_port_selector<dataflow::directions::incoming>,
+ mpl::int_<1> >
+ >
+>
{};
-struct my_component
+struct my_component : public boost::dataflow::component<my_component_traits>
{
- typedef my_component_traits component_traits;
+ my_producer p;
+ my_consumer c;
+
+ template<typename Component>
+ my_component_traits::port_result_types get_ports(Component &)
+ {
+ return my_component_traits::port_result_types(p, c);
+ }
};
namespace boost { namespace dataflow { namespace extension {
@@ -41,7 +67,17 @@
my_component c;
df::component_operation<df::operations::invoke>(c);
- BOOST_CHECK(invoked);
+ BOOST_CHECK(invoked);
+
+ BOOST_CHECK_EQUAL((&df::get_port<boost::mpl::int_<0> >(c)), &c.p);
+ BOOST_CHECK_EQUAL((&df::get_port<boost::mpl::int_<1> >(c)), &c.c);
+ BOOST_CHECK_EQUAL((&df::get_port_c<0>(c)), &c.p);
+ BOOST_CHECK_EQUAL((&df::get_port_c<1>(c)), &c.c);
+
+ my_component c2;
+
+ df::binary_operation<df::operations::connect, df::default_mechanism, df::default_tag>(c, c2);
+ BOOST_CHECK(connected);
return 0;
} // int test_main(int, char* [])
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/test_keyed_port.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/test_keyed_port.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/test_keyed_port.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -17,14 +17,12 @@
struct my_other_producer_traits
: public df::port_traits<
- my_mechanism,
df::ports::producer,
df::concepts::port>
{};
struct my_other_consumer_traits
: public df::port_traits<
- my_mechanism,
df::ports::consumer,
df::concepts::port>
{};
@@ -38,8 +36,10 @@
namespace boost { namespace dataflow { namespace extension {
template<>
-struct binary_operation_impl<operations::connect, my_producer_traits, my_consumer_traits>
+struct binary_operation_impl<my_producer_traits, my_consumer_traits, operations::connect>
{
+ typedef void result_type;
+
template<typename Producer, typename Consumer>
void operator()(Producer &, Consumer &)
{
@@ -48,8 +48,10 @@
};
template<>
-struct binary_operation_impl<operations::connect, my_other_producer_traits, my_other_consumer_traits>
+struct binary_operation_impl<my_other_producer_traits, my_other_consumer_traits, operations::connect>
{
+ typedef void result_type;
+
template<typename Producer, typename Consumer>
void operator()(Producer &, Consumer &)
{
@@ -73,13 +75,12 @@
> map_type;
df::port_map<
- my_mechanism,
df::ports::producer,
map_type
> producer_map(map_type(producer, other_producer));
- df::binary_operation<df::operations::connect, my_mechanism>(producer_map, consumer);
- df::binary_operation<df::operations::connect, my_mechanism>(producer_map, other_consumer);
+ connect(producer_map, consumer);
+ connect(producer_map, other_consumer);
BOOST_CHECK_EQUAL(connected, 1);
BOOST_CHECK(connected_other);
@@ -90,20 +91,19 @@
boost::fusion::pair<my_other_consumer_traits, my_other_consumer &>
> proxy_map_type;
- typedef
+/* typedef
df::port_map<
- my_mechanism,
df::ports::producer,
proxy_map_type
> proxy_type;
proxy_type proxy_map(proxy_map_type(consumer, other_consumer));
- BOOST_CHECK(( df::is_proxy_port<my_mechanism, df::ports::consumer, proxy_type>::value ));
+// BOOST_CHECK(( df::is_proxy_port<my_mechanism, df::ports::consumer, proxy_type>::value ));
BOOST_CHECK(( df::is_port<my_mechanism, df::ports::consumer, proxy_type>::value ));
- df::binary_operation<df::operations::connect, my_mechanism>(producer, proxy_map);
+ df::binary_operation<df::operations::connect>(producer, proxy_map);
- BOOST_CHECK_EQUAL(connected, 2);
+ BOOST_CHECK_EQUAL(connected, 2);*/
return 0;
} // int test_main(int, char* [])
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/test_port.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/test_port.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/test_port.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -13,10 +13,13 @@
// for different port registrations
//[ port_registration_example_prep
-struct some_mechanism;
+typedef df::port_traits<df::ports::producer, df::concepts::port> producer_traits;
+typedef df::port_traits<df::ports::consumer, df::concepts::port> consumer_traits;
-typedef df::port_traits<some_mechanism, df::ports::producer, df::concepts::port> producer_traits;
-typedef df::port_traits<some_mechanism, df::ports::consumer, df::concepts::port> consumer_traits;
+struct some_tag;
+struct whatever;
+
+typedef df::port_traits<df::ports::consumer, df::concepts::port, some_tag> other_consumer_traits;
//]
@@ -29,11 +32,12 @@
typedef producer_traits port_traits;
};
-// Intrusive registration of multiple ports
+// Intrusive registration of a multiple ports
struct intrusive_producer_consumer_port
{
- // intrusive_filter_port is a ProducerPort and a ConsumerPort
- typedef boost::mpl::vector<producer_traits, consumer_traits> port_traits;
+ // intrusive_producer_port is a ProducerPort for the default_tag,
+ // and a ConsumerPort for some_tag
+ typedef boost::mpl::vector<producer_traits, other_consumer_traits> port_traits;
};
//]
@@ -46,10 +50,9 @@
namespace boost { namespace dataflow {
-// register_port_traits holds the PortTraits type of a Port, keyed by Mechanism
-// and PortCategory
+// register_port_traits holds the PortTraits type of a Port
template<>
-struct register_port_traits<some_mechanism, df::ports::producer, non_intrusive_port>
+struct register_port_traits<non_intrusive_port>
{
typedef producer_traits type;
};
@@ -79,13 +82,11 @@
namespace boost { namespace dataflow {
-// register_port_traits holds the PortTraits type of a Port, keyed by Mechanism
-// and PortCategory
+// register_port_traits holds the PortTraits type of a Port
template<typename T>
struct register_port_traits<
- some_mechanism,
- df::ports::producer,
T,
+ default_tag,
typename boost::enable_if<
boost::is_base_of<non_intrusive_port_base, T>
>::type>
@@ -131,36 +132,29 @@
BOOST_CHECK(!df::is_port_traits<incomplete>::value);
BOOST_CHECK(!df::is_port_traits<empty>::value);
- BOOST_CHECK(( df::is_port<my_mechanism, df::ports::producer, my_producer>::value ));
- BOOST_CHECK(( df::is_port<my_mechanism, df::ports::consumer, my_consumer>::value ));
+ BOOST_CHECK(( df::is_port<my_producer>::value ));
+ BOOST_CHECK(( df::is_port<my_consumer>::value ));
- BOOST_CHECK(( !df::is_port<my_mechanism, df::ports::producer, incomplete>::value ));
- BOOST_CHECK(( !df::is_port<my_mechanism, df::ports::producer, empty>::value ));
+ BOOST_CHECK(( !df::is_port<empty>::value ));
my_producer p;
-
- BOOST_CHECK_EQUAL(&p, (&df::get_port<my_mechanism, df::ports::producer>(p) ));
- BOOST_CHECK(( boost::is_same<df::get_port_result_type<my_mechanism, df::ports::producer, my_producer>::type, my_producer &>::value ));
-
- const volatile my_producer cp(p);
-
- BOOST_CHECK_EQUAL(&cp, (&df::get_port<my_mechanism, df::ports::producer>(cp)));
- BOOST_CHECK(( boost::is_same<df::get_port_result_type<my_mechanism, df::ports::producer, const volatile my_producer>::type, const volatile my_producer &>::value ));
-
+
// check registrations
//[ port_registration_check_example
- BOOST_CHECK(( df::is_port<some_mechanism, df::ports::producer, intrusive_producer_port>::value ));
-
- BOOST_CHECK(( df::is_port<some_mechanism, df::ports::producer, intrusive_producer_consumer_port>::value ));
- BOOST_CHECK(( df::is_port<some_mechanism, df::ports::consumer, intrusive_producer_consumer_port>::value ));
+ BOOST_CHECK(( df::is_port<intrusive_producer_port>::value ));
- BOOST_CHECK(( df::is_port<some_mechanism, df::ports::producer, non_intrusive_port>::value ));
+ BOOST_CHECK(( df::is_port<intrusive_producer_consumer_port, some_tag>::value ));
+
+ BOOST_CHECK(( df::is_port<non_intrusive_port>::value ));
- BOOST_CHECK(( df::is_port<some_mechanism, df::ports::producer, non_intrusive_port2>::value ));
+ BOOST_CHECK(( df::is_port<non_intrusive_port2>::value ));
- BOOST_CHECK(( df::is_port<some_mechanism, df::ports::producer, non_intrusive_port_descendant>::value ));
+ BOOST_CHECK(( df::is_port<non_intrusive_port_descendant>::value ));
- BOOST_CHECK(( df::is_port<some_mechanism, df::ports::producer, non_intrusive_port_descendant2>::value ));
+ BOOST_CHECK(( df::is_port<non_intrusive_port_descendant2>::value ));
+
+ BOOST_CHECK(( df::has_default_port<my_producer, whatever, whatever>::value ));
+ BOOST_CHECK_EQUAL(( &df::get_default_port<whatever, whatever, df::default_tag>(p)), &p );
//]
return 0;
} // int test_main(int, char* [])
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/test_reflective_component.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/test_reflective_component.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/test_reflective_component.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -31,7 +31,7 @@
namespace boost { namespace dataflow { namespace extension {
template<>
-struct get_component_port_impl<my_component_traits>
+struct get_port_impl<my_component_traits>
{
template<typename FArgs> struct result;
@@ -72,8 +72,8 @@
{
my_component c;
- my_consumer &cc = df::get_component_port<boost::mpl::int_<0> >(c);
- my_producer &cp = df::get_component_port<boost::mpl::int_<1> >(c);
+ my_consumer &cc = df::get_port<boost::mpl::int_<0> >(c);
+ my_producer &cp = df::get_port<boost::mpl::int_<1> >(c);
BOOST_CHECK_EQUAL(&cc, &c.consumer);
BOOST_CHECK_EQUAL(&cp, &c.producer);
Modified: sandbox/SOC/2007/signals/libs/dataflow/test/test_unary_op.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/test/test_unary_op.cpp (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/test/test_unary_op.cpp 2007-12-04 01:17:07 EST (Tue, 04 Dec 2007)
@@ -11,10 +11,12 @@
namespace boost { namespace dataflow { namespace extension {
template<>
-struct unary_operation_impl<operations::disconnect_all, my_producer_traits>
+struct unary_operation_impl<my_producer_traits, operations::disconnect_all>
{
- template<typename Producer>
- void operator()(Producer &)
+ typedef void result_type;
+
+ template<typename Port>
+ void operator()(Port &)
{
disconnected = true;
}
@@ -29,10 +31,15 @@
int test_main(int, char* [])
{
my_producer p;
+ my_consumer c;
+
+ BOOST_CHECK((df::is_unary_operable<my_producer, df::operations::disconnect_all>::value));
- df::unary_operation<df::operations::disconnect_all, my_mechanism, df::ports::producer>(p);
+ df::unary_operation<df::operations::disconnect_all, df::default_tag>(p);
BOOST_CHECK(disconnected);
+ BOOST_CHECK((!df::is_unary_operable<my_consumer, df::operations::disconnect_all>::value));
+
return 0;
} // int test_main(int, char* [])
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