|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r51779 - in sandbox/dataflow-rewrite: boost/dataflow/blueprint boost/dataflow/generic boost/dataflow/managed boost/dataflow/vivid libs/dataflow/build libs/dataflow/build/xcodeide/dataflow.xcodeproj libs/dataflow/example/vivid libs/dataflow/src/managed libs/dataflow/test/blueprint libs/dataflow/test/generic libs/dataflow/test/managed libs/dataflow/test/vivid
From: stipe_at_[hidden]
Date: 2009-03-15 00:07:15
Author: srajko
Date: 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
New Revision: 51779
URL: http://svn.boost.org/trac/boost/changeset/51779
Log:
added set_context, vivid does vectors...
Added:
sandbox/dataflow-rewrite/boost/dataflow/generic/set_context.hpp (contents, props changed)
sandbox/dataflow-rewrite/boost/dataflow/vivid/vector_widget.hpp (contents, props changed)
sandbox/dataflow-rewrite/libs/dataflow/test/generic/test_set_context.cpp (contents, props changed)
Text files modified:
sandbox/dataflow-rewrite/boost/dataflow/blueprint/factory.hpp | 33 +++++++++++++++++++++++++++------
sandbox/dataflow-rewrite/boost/dataflow/blueprint/port.hpp | 7 +++++++
sandbox/dataflow-rewrite/boost/dataflow/blueprint/port_adapter.hpp | 11 +++++++----
sandbox/dataflow-rewrite/boost/dataflow/blueprint/vector.hpp | 4 ++++
sandbox/dataflow-rewrite/boost/dataflow/generic/port_binary_operation.hpp | 38 +++++++++++++++++++-------------------
sandbox/dataflow-rewrite/boost/dataflow/managed/component.hpp | 8 ++++++--
sandbox/dataflow-rewrite/boost/dataflow/managed/io_component.hpp | 10 ++++++++++
sandbox/dataflow-rewrite/boost/dataflow/managed/port.hpp | 7 ++++++-
sandbox/dataflow-rewrite/boost/dataflow/vivid/entity_widget.hpp | 7 ++++++-
sandbox/dataflow-rewrite/boost/dataflow/vivid/network_window.hpp | 36 ++++++++++++++++++++++++++----------
sandbox/dataflow-rewrite/libs/dataflow/build/Jamfile | 10 ++++++++--
sandbox/dataflow-rewrite/libs/dataflow/build/specializable_operation.hpp.py | 6 +++---
sandbox/dataflow-rewrite/libs/dataflow/build/xcodeide/dataflow.xcodeproj/project.pbxproj | 6 ++++++
sandbox/dataflow-rewrite/libs/dataflow/example/vivid/Jamfile | 23 +++++++++++++++++++++--
sandbox/dataflow-rewrite/libs/dataflow/example/vivid/vivid_graph_example.cpp | 5 +++--
sandbox/dataflow-rewrite/libs/dataflow/example/vivid/vivid_managed_example.cpp | 17 ++++++++---------
sandbox/dataflow-rewrite/libs/dataflow/src/managed/component.cpp | 19 +++++++++++++++----
sandbox/dataflow-rewrite/libs/dataflow/test/blueprint/test_factory.cpp | 5 +++--
sandbox/dataflow-rewrite/libs/dataflow/test/generic/Jamfile | 2 ++
sandbox/dataflow-rewrite/libs/dataflow/test/generic/my_framework_with_context.hpp | 1 +
sandbox/dataflow-rewrite/libs/dataflow/test/managed/test_io_component.cpp | 3 +++
sandbox/dataflow-rewrite/libs/dataflow/test/vivid/test_factory_window.cpp | 3 ++-
22 files changed, 193 insertions(+), 68 deletions(-)
Modified: sandbox/dataflow-rewrite/boost/dataflow/blueprint/factory.hpp
==============================================================================
--- sandbox/dataflow-rewrite/boost/dataflow/blueprint/factory.hpp (original)
+++ sandbox/dataflow-rewrite/boost/dataflow/blueprint/factory.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -11,6 +11,7 @@
#include <boost/dataflow/blueprint/port_adapter.hpp>
+#include <boost/dataflow/blueprint/static_vector_adapter.hpp>
#include <boost/dataflow/utility/containing_ptr.hpp>
#include <boost/bind.hpp>
@@ -89,15 +90,35 @@
function_type operator[](const std::string& k)
{ return m_components[k]; }
- template<typename T>
- void add_port(const std::string &s)
+ struct port_adapter_selector
{
- m_components[s] = boost::bind(boost::factory<port_adapter<BlueprintFramework, utility::containing_ptr<T> > *>(), _1);
+ template<typename T>
+ struct apply
+ {
+ typedef port_adapter<BlueprintFramework, utility::containing_ptr<T> > type;
+ };
+ };
+
+ struct static_vector_adapter_selector
+ {
+ template<typename T>
+ struct apply
+ {
+ typedef static_vector_adapter<BlueprintFramework, utility::containing_ptr<T> > type;
+ };
+ };
+
+ template<typename AdapterSelector, typename T>
+ void add(const std::string &s)
+ {
+ typedef typename AdapterSelector::template apply<T>::type adapter_type;
+ m_components[s] = boost::bind(boost::factory<adapter_type *>(), _1);
}
- template<typename T, typename T0>
- void add_port(const std::string &s, const T0 &t0)
+ template<typename AdapterSelector, typename T, typename T0>
+ void add(const std::string &s, const T0 &t0)
{
- m_components[s] = boost::bind(boost::factory<port_adapter<BlueprintFramework, utility::containing_ptr<T> > *>(), _1, t0);
+ typedef typename AdapterSelector::template apply<T>::type adapter_type;
+ m_components[s] = boost::bind(boost::factory<adapter_type *>(), _1, t0);
}
void add_entity(const std::string &s, const function_type &f)
{
Modified: sandbox/dataflow-rewrite/boost/dataflow/blueprint/port.hpp
==============================================================================
--- sandbox/dataflow-rewrite/boost/dataflow/blueprint/port.hpp (original)
+++ sandbox/dataflow-rewrite/boost/dataflow/blueprint/port.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -27,6 +27,13 @@
{
typedef ports::producer_consumer category;
};
+ const std::type_info &category_type_info() const
+ { return *m_category_type_info; }
+protected:
+ void set_category_type_info(const std::type_info &ti)
+ { m_category_type_info = &ti; }
+private:
+ const std::type_info *m_category_type_info;
};
} } } // namespace boost::dataflow::blueprint
Modified: sandbox/dataflow-rewrite/boost/dataflow/blueprint/port_adapter.hpp
==============================================================================
--- sandbox/dataflow-rewrite/boost/dataflow/blueprint/port_adapter.hpp (original)
+++ sandbox/dataflow-rewrite/boost/dataflow/blueprint/port_adapter.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -22,16 +22,19 @@
typedef framework_entity_adapter<BlueprintFramework, PortOrRef, Base> base_type;
public:
port_adapter(blueprint::framework_context<BlueprintFramework> &fo)
- : base_type(fo)
- {}
+ : base_type(fo)
+ { initialize(); }
template<typename T>
port_adapter(blueprint::framework_context<BlueprintFramework> &fo, const T &t)
: base_type(fo, t)
- {}
+ { initialize(); }
template<typename T>
port_adapter(blueprint::framework_context<BlueprintFramework> &fo, T &t)
: base_type(fo, t)
- {}
+ { initialize(); }
+private:
+ void initialize()
+ { base_type::set_category_type_info(typeid(typename traits_of<typename base_type::entity_type>::type::category)); }
};
} } } // namespace boost::dataflow::blueprint
Modified: sandbox/dataflow-rewrite/boost/dataflow/blueprint/vector.hpp
==============================================================================
--- sandbox/dataflow-rewrite/boost/dataflow/blueprint/vector.hpp (original)
+++ sandbox/dataflow-rewrite/boost/dataflow/blueprint/vector.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -59,6 +59,10 @@
{
return m_ptr->clone();
};
+ bool operator!=(port_iterator_base<BlueprintFramework> const& other) const
+ {
+ return !this->equal(other);
+ }
bool operator==(port_iterator_base<BlueprintFramework> const& other) const
{
return this->equal(other);
Modified: sandbox/dataflow-rewrite/boost/dataflow/generic/port_binary_operation.hpp
==============================================================================
--- sandbox/dataflow-rewrite/boost/dataflow/generic/port_binary_operation.hpp (original)
+++ sandbox/dataflow-rewrite/boost/dataflow/generic/port_binary_operation.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -31,7 +31,7 @@
typedef detail::not_specialized result_type;
template<typename T1,typename T2>
- result_type operator()(T1 &t1,T2 &t2,const Operation &operation)
+ result_type operator()(T1 &t1,T2 &t2,const Operation & operation)
{
// Error: port_binary_operation_impl has not been
// specialized appropriately.
@@ -48,7 +48,7 @@
typedef bool result_type;
template<typename T1,typename T2>
- result_type operator()(T1 &t1,T2 &t2,const Operation &operation)
+ result_type operator()(T1 &t1,T2 &t2,const Operation & operation)
{
return
!is_same<
@@ -113,7 +113,7 @@
extension::port_binary_operation_impl<
typename traits_of<T1, Framework1>::type,typename traits_of<T2, Framework2>::type,Operation
>
- (T1,T2,Operation)
+ (T1,T2,const Operation)
>::type type;
};
@@ -124,7 +124,7 @@
inline typename result_of::port_binary_operation<
T1,T2,Operation,Framework1,Framework2
>::type
-port_binary_operation_framework(T1 &t1,T2 &t2,const Operation &operation=Operation())
+port_binary_operation_framework(T1 &t1,T2 &t2,const Operation & operation=Operation())
{
return extension::port_binary_operation_impl<
typename traits_of<T1, Framework1>::type,typename traits_of<T2, Framework2>::type,Operation
@@ -135,7 +135,7 @@
inline typename result_of::port_binary_operation<
T1,T2,Operation,typename default_framework_of<T1>::type,typename default_framework_of<T2>::type
>::type
-port_binary_operation(T1 &t1,T2 &t2,const Operation &operation=Operation())
+port_binary_operation(T1 &t1,T2 &t2,const Operation & operation=Operation())
{
typedef typename default_framework_of<T1>::type Framework1;
typedef typename default_framework_of<T2>::type Framework2;
@@ -146,7 +146,7 @@
template<typename Operation,typename Framework1,typename Framework2,typename T1,typename T2>
inline bool
-port_binary_operation_will_succeed_framework(T1 &t1,T2 &t2,const Operation &operation=Operation())
+port_binary_operation_will_succeed_framework(T1 &t1,T2 &t2,const Operation & operation=Operation())
{
return extension::port_binary_operation_will_succeed_impl<
typename traits_of<T1, Framework1>::type,typename traits_of<T2, Framework2>::type,Operation
@@ -155,7 +155,7 @@
template<typename Operation,typename T1,typename T2>
inline bool
-port_binary_operation_will_succeed(T1 &t1,T2 &t2,const Operation &operation=Operation())
+port_binary_operation_will_succeed(T1 &t1,T2 &t2,const Operation & operation=Operation())
{
typedef typename default_framework_of<T1>::type Framework1;
typedef typename default_framework_of<T2>::type Framework2;
@@ -168,7 +168,7 @@
inline typename result_of::port_binary_operation<
T1,T2,Operation,Framework1,Framework2
>::type
-port_binary_operation_framework(const T1 &t1,T2 &t2,const Operation &operation=Operation())
+port_binary_operation_framework(const T1 &t1,T2 &t2,const Operation & operation=Operation())
{
return extension::port_binary_operation_impl<
typename traits_of<T1, Framework1>::type,typename traits_of<T2, Framework2>::type,Operation
@@ -179,7 +179,7 @@
inline typename result_of::port_binary_operation<
T1,T2,Operation,typename default_framework_of<T1>::type,typename default_framework_of<T2>::type
>::type
-port_binary_operation(const T1 &t1,T2 &t2,const Operation &operation=Operation())
+port_binary_operation(const T1 &t1,T2 &t2,const Operation & operation=Operation())
{
typedef typename default_framework_of<T1>::type Framework1;
typedef typename default_framework_of<T2>::type Framework2;
@@ -190,7 +190,7 @@
template<typename Operation,typename Framework1,typename Framework2,typename T1,typename T2>
inline bool
-port_binary_operation_will_succeed_framework(const T1 &t1,T2 &t2,const Operation &operation=Operation())
+port_binary_operation_will_succeed_framework(const T1 &t1,T2 &t2,const Operation & operation=Operation())
{
return extension::port_binary_operation_will_succeed_impl<
typename traits_of<T1, Framework1>::type,typename traits_of<T2, Framework2>::type,Operation
@@ -199,7 +199,7 @@
template<typename Operation,typename T1,typename T2>
inline bool
-port_binary_operation_will_succeed(const T1 &t1,T2 &t2,const Operation &operation=Operation())
+port_binary_operation_will_succeed(const T1 &t1,T2 &t2,const Operation & operation=Operation())
{
typedef typename default_framework_of<T1>::type Framework1;
typedef typename default_framework_of<T2>::type Framework2;
@@ -212,7 +212,7 @@
inline typename result_of::port_binary_operation<
T1,T2,Operation,Framework1,Framework2
>::type
-port_binary_operation_framework(T1 &t1,const T2 &t2,const Operation &operation=Operation())
+port_binary_operation_framework(T1 &t1,const T2 &t2,const Operation & operation=Operation())
{
return extension::port_binary_operation_impl<
typename traits_of<T1, Framework1>::type,typename traits_of<T2, Framework2>::type,Operation
@@ -223,7 +223,7 @@
inline typename result_of::port_binary_operation<
T1,T2,Operation,typename default_framework_of<T1>::type,typename default_framework_of<T2>::type
>::type
-port_binary_operation(T1 &t1,const T2 &t2,const Operation &operation=Operation())
+port_binary_operation(T1 &t1,const T2 &t2,const Operation & operation=Operation())
{
typedef typename default_framework_of<T1>::type Framework1;
typedef typename default_framework_of<T2>::type Framework2;
@@ -234,7 +234,7 @@
template<typename Operation,typename Framework1,typename Framework2,typename T1,typename T2>
inline bool
-port_binary_operation_will_succeed_framework(T1 &t1,const T2 &t2,const Operation &operation=Operation())
+port_binary_operation_will_succeed_framework(T1 &t1,const T2 &t2,const Operation & operation=Operation())
{
return extension::port_binary_operation_will_succeed_impl<
typename traits_of<T1, Framework1>::type,typename traits_of<T2, Framework2>::type,Operation
@@ -243,7 +243,7 @@
template<typename Operation,typename T1,typename T2>
inline bool
-port_binary_operation_will_succeed(T1 &t1,const T2 &t2,const Operation &operation=Operation())
+port_binary_operation_will_succeed(T1 &t1,const T2 &t2,const Operation & operation=Operation())
{
typedef typename default_framework_of<T1>::type Framework1;
typedef typename default_framework_of<T2>::type Framework2;
@@ -256,7 +256,7 @@
inline typename result_of::port_binary_operation<
T1,T2,Operation,Framework1,Framework2
>::type
-port_binary_operation_framework(const T1 &t1,const T2 &t2,const Operation &operation=Operation())
+port_binary_operation_framework(const T1 &t1,const T2 &t2,const Operation & operation=Operation())
{
return extension::port_binary_operation_impl<
typename traits_of<T1, Framework1>::type,typename traits_of<T2, Framework2>::type,Operation
@@ -267,7 +267,7 @@
inline typename result_of::port_binary_operation<
T1,T2,Operation,typename default_framework_of<T1>::type,typename default_framework_of<T2>::type
>::type
-port_binary_operation(const T1 &t1,const T2 &t2,const Operation &operation=Operation())
+port_binary_operation(const T1 &t1,const T2 &t2,const Operation & operation=Operation())
{
typedef typename default_framework_of<T1>::type Framework1;
typedef typename default_framework_of<T2>::type Framework2;
@@ -278,7 +278,7 @@
template<typename Operation,typename Framework1,typename Framework2,typename T1,typename T2>
inline bool
-port_binary_operation_will_succeed_framework(const T1 &t1,const T2 &t2,const Operation &operation=Operation())
+port_binary_operation_will_succeed_framework(const T1 &t1,const T2 &t2,const Operation & operation=Operation())
{
return extension::port_binary_operation_will_succeed_impl<
typename traits_of<T1, Framework1>::type,typename traits_of<T2, Framework2>::type,Operation
@@ -287,7 +287,7 @@
template<typename Operation,typename T1,typename T2>
inline bool
-port_binary_operation_will_succeed(const T1 &t1,const T2 &t2,const Operation &operation=Operation())
+port_binary_operation_will_succeed(const T1 &t1,const T2 &t2,const Operation & operation=Operation())
{
typedef typename default_framework_of<T1>::type Framework1;
typedef typename default_framework_of<T2>::type Framework2;
Added: sandbox/dataflow-rewrite/boost/dataflow/generic/set_context.hpp
==============================================================================
--- (empty file)
+++ sandbox/dataflow-rewrite/boost/dataflow/generic/set_context.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -0,0 +1,210 @@
+/*=================================---------------------------------------------
+ Copyright 2007,2008 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__GENERIC__SET_CONTEXT_HPP
+#define BOOST__DATAFLOW__GENERIC__SET_CONTEXT_HPP
+
+
+#include <boost/mpl/assert.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/dataflow/generic/framework_entity/default_framework_of.hpp>
+#include <boost/dataflow/generic/framework_entity/traits_of.hpp>
+#include <boost/dataflow/detail/not_specialized.hpp>
+
+
+#include <boost/dataflow/generic/framework_entity.hpp>
+namespace boost { namespace dataflow {
+
+namespace extension
+{
+ template<typename Traits1,typename Enable=void>
+ struct set_context_impl
+ {
+ BOOST_MPL_ASSERT(( is_same<Enable, void> ));
+
+ typedef detail::not_specialized result_type;
+
+ template<typename T1,typename Context>
+ result_type operator()(T1 &t1,Context & context)
+ {
+ // Error: set_context_impl has not been
+ // specialized appropriately.
+ BOOST_MPL_ASSERT(( mpl::bool_<sizeof(T1)==0> ));
+ return result_type();
+ }
+ };
+
+ template<typename Traits1,typename Enable=void>
+ struct set_context_will_succeed_impl
+ {
+ BOOST_MPL_ASSERT(( is_same<Enable, void> ));
+
+ typedef bool result_type;
+
+ template<typename T1,typename Context>
+ result_type operator()(T1 &t1,Context & context)
+ {
+ return
+ !is_same<
+ typename extension::set_context_impl<
+ Traits1
+ >::result_type,
+ detail::not_specialized
+ >::value;
+ }
+ };
+}
+
+namespace detail
+{
+
+ template<typename T1,typename Context,typename Framework1=typename default_framework_of<T1>::type,typename Enable=void>
+ struct has_set_context_specialized
+ : public mpl::true_
+ {};
+
+ template<typename T1,typename Context,typename Framework1>
+ struct has_set_context_specialized<
+ T1,Context,Framework1
+ ,
+ typename enable_if<
+ is_same<
+ typename extension::set_context_impl<
+ typename traits_of<T1, Framework1>::type
+ >::result_type,
+ detail::not_specialized>
+ >::type>
+ : public mpl::false_
+ {};
+
+}
+
+template<typename T1,typename Framework1=typename default_framework_of<T1>::type,typename Enable=void>
+struct has_set_context
+ : public mpl::false_
+{
+ BOOST_MPL_ASSERT((mpl::and_<is_framework_entity<T1,Framework1> >));
+};
+
+template<typename T1,typename Framework1>
+struct has_set_context<
+ T1,Framework1,
+ typename enable_if<
+ detail::has_set_context_specialized<
+ T1,Framework1>
+ >::type>
+ : public mpl::true_
+{
+ BOOST_MPL_ASSERT((mpl::and_<is_framework_entity<T1,Framework1> >));
+};
+
+namespace result_of {
+
+ template<typename T1,typename Context,typename Framework1=typename default_framework_of<T1>::type>
+ struct set_context
+ {
+ typedef typename boost::result_of<
+ extension::set_context_impl<
+ typename traits_of<T1, Framework1>::type
+ >
+ (T1,Context)
+ >::type type;
+ };
+
+}
+
+
+template<typename Context,typename Framework1,typename T1>
+inline typename result_of::set_context<
+ T1,Context,Framework1
+ >::type
+set_context_framework(T1 &t1,Context & context=Context())
+{
+ return extension::set_context_impl<
+ typename traits_of<T1, Framework1>::type
+ >()(t1,context);
+}
+
+template<typename Context,typename T1>
+inline typename result_of::set_context<
+ T1,Context,typename default_framework_of<T1>::type
+ >::type
+set_context(T1 &t1,Context & context=Context())
+{
+ typedef typename default_framework_of<T1>::type Framework1;
+ return extension::set_context_impl<
+ typename traits_of<T1, Framework1>::type
+ >()(t1,context);
+}
+
+template<typename Context,typename Framework1,typename T1>
+inline bool
+set_context_will_succeed_framework(T1 &t1,Context & context=Context())
+{
+ return extension::set_context_will_succeed_impl<
+ typename traits_of<T1, Framework1>::type
+ >()(t1,context);
+}
+
+template<typename Context,typename T1>
+inline bool
+set_context_will_succeed(T1 &t1,Context & context=Context())
+{
+ typedef typename default_framework_of<T1>::type Framework1;
+ return extension::set_context_will_succeed_impl<
+ typename traits_of<T1, Framework1>::type
+ >()(t1,context);
+}
+
+template<typename Context,typename Framework1,typename T1>
+inline typename result_of::set_context<
+ T1,Context,Framework1
+ >::type
+set_context_framework(const T1 &t1,Context & context=Context())
+{
+ return extension::set_context_impl<
+ typename traits_of<T1, Framework1>::type
+ >()(t1,context);
+}
+
+template<typename Context,typename T1>
+inline typename result_of::set_context<
+ T1,Context,typename default_framework_of<T1>::type
+ >::type
+set_context(const T1 &t1,Context & context=Context())
+{
+ typedef typename default_framework_of<T1>::type Framework1;
+ return extension::set_context_impl<
+ typename traits_of<T1, Framework1>::type
+ >()(t1,context);
+}
+
+template<typename Context,typename Framework1,typename T1>
+inline bool
+set_context_will_succeed_framework(const T1 &t1,Context & context=Context())
+{
+ return extension::set_context_will_succeed_impl<
+ typename traits_of<T1, Framework1>::type
+ >()(t1,context);
+}
+
+template<typename Context,typename T1>
+inline bool
+set_context_will_succeed(const T1 &t1,Context & context=Context())
+{
+ typedef typename default_framework_of<T1>::type Framework1;
+ return extension::set_context_will_succeed_impl<
+ typename traits_of<T1, Framework1>::type
+ >()(t1,context);
+}
+
+}}
+
+
+#endif // BOOST__DATAFLOW__GENERIC__SET_CONTEXT_HPP
Modified: sandbox/dataflow-rewrite/boost/dataflow/managed/component.hpp
==============================================================================
--- sandbox/dataflow-rewrite/boost/dataflow/managed/component.hpp (original)
+++ sandbox/dataflow-rewrite/boost/dataflow/managed/component.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -17,11 +17,15 @@
class BOOST_EXPORT_SYMBOLS component
{
public:
+ component()
+ : m_network_context(0), m_topological_sort_index(0)
+ {}
component(network &network_context);
component(const component &other);
virtual ~component();
+ void set_network_context(network &network_context);
network &network_context()
- { return m_network_context; }
+ { return *m_network_context; }
virtual void invoke(){};
void topological_sort_index(unsigned index)
{
@@ -33,7 +37,7 @@
}
void claim_port(port_base &p);
private:
- network &m_network_context;
+ network *m_network_context;
unsigned m_topological_sort_index;
};
Modified: sandbox/dataflow-rewrite/boost/dataflow/managed/io_component.hpp
==============================================================================
--- sandbox/dataflow-rewrite/boost/dataflow/managed/io_component.hpp (original)
+++ sandbox/dataflow-rewrite/boost/dataflow/managed/io_component.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -115,9 +115,19 @@
{
fusion::for_each(m_ports, detail::set_port_context(*this));
}
+
template<int Index>
typename fusion::result_of::at_c<ports_type, Index>::type port()
{ return fusion::at_c<Index>(m_ports); }
+
+ template<int Index>
+ const typename fusion::result_of::value_at_c<ports_type, Index>::type::value_type &get()
+ { return fusion::at_c<Index>(m_ports).get(); }
+
+ template<int Index>
+ void set(const typename fusion::result_of::value_at_c<ports_type, Index>::type::value_type &value)
+ { fusion::at_c<Index>(m_ports).set(value); }
+
ports_type &ports()
{ return m_ports; }
protected:
Modified: sandbox/dataflow-rewrite/boost/dataflow/managed/port.hpp
==============================================================================
--- sandbox/dataflow-rewrite/boost/dataflow/managed/port.hpp (original)
+++ sandbox/dataflow-rewrite/boost/dataflow/managed/port.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -37,6 +37,8 @@
template<typename T>
void connect(port<T, ports::producer> &producer, port<T, ports::consumer> &consumer)
{
+ BOOST_ASSERT(&producer.component_context().network_context());
+ BOOST_ASSERT(&producer.component_context().network_context() == &consumer.component_context().network_context());
if(consumer.connected())
disconnect(consumer.connected_producer(), consumer);
producer.m_consumers.insert(&consumer);
@@ -60,6 +62,7 @@
class port<T, ports::producer> : public port_base
{
public:
+ typedef T value_type;
typedef producer_port_traits<T> dataflow_traits;
port(component &component_context) : port_base(component_context), m_value()
@@ -74,7 +77,7 @@
T &get()
{ return m_value; }
private:
- T m_value;
+ value_type m_value;
typedef std::set<port<T, ports::consumer> *> consumers_type;
consumers_type m_consumers;
@@ -91,7 +94,9 @@
class port<T, ports::consumer> : public port_base
{
public:
+ typedef T value_type;
typedef consumer_port_traits<T> dataflow_traits;
+
port(component &component_context)
: port_base(component_context), m_producer(0)
{
Modified: sandbox/dataflow-rewrite/boost/dataflow/vivid/entity_widget.hpp
==============================================================================
--- sandbox/dataflow-rewrite/boost/dataflow/vivid/entity_widget.hpp (original)
+++ sandbox/dataflow-rewrite/boost/dataflow/vivid/entity_widget.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -15,10 +15,13 @@
#include <boost/guigl/widget/labeled_button.hpp>
#include <boost/guigl/view/impl/draggable.hpp>
#include <boost/scoped_ptr.hpp>
+#include <boost/function.hpp>
+
namespace boost { namespace dataflow { namespace vivid {
BOOST_PARAMETER_UNTYPED_NAME(entity);
+BOOST_PARAMETER_UNTYPED_NAME(click_callback);
template<typename BlueprintFramework>
class entity_widget
@@ -34,7 +37,9 @@
entity_widget(const Args &args)
: base_type(args)
, m_entity(args[_entity])
- {}
+ {
+ this->on_click.connect(boost::bind(args[_click_callback], this));
+ }
void draggable_on_drag(const guigl::position_type &position)
{
guigl::position_type difference(position - base_type::drag_origin());
Modified: sandbox/dataflow-rewrite/boost/dataflow/vivid/network_window.hpp
==============================================================================
--- sandbox/dataflow-rewrite/boost/dataflow/vivid/network_window.hpp (original)
+++ sandbox/dataflow-rewrite/boost/dataflow/vivid/network_window.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -13,6 +13,7 @@
#include <boost/dataflow/blueprint/port_binary_operation.hpp>
#include <boost/dataflow/blueprint/operation_adapter.hpp>
#include <boost/dataflow/vivid/entity_widget.hpp>
+#include <boost/dataflow/vivid/vector_widget.hpp>
#include <boost/guigl/draw.hpp>
#include <boost/guigl/geometry.hpp>
#include <boost/guigl/window.hpp>
@@ -46,8 +47,8 @@
glColor3f(0,1,0);
for(typename std::vector<connection_type>::iterator it=m_connections.begin(); it!= m_connections.end(); it++)
{
- guigl::draw::vertex(guigl::geometry::midpoint(*it->first));
- guigl::draw::vertex(guigl::geometry::midpoint(*it->second));
+ guigl::draw::vertex(guigl::geometry::root_midpoint(*it->first));
+ guigl::draw::vertex(guigl::geometry::root_midpoint(*it->second));
}
glEnd();
}
@@ -71,7 +72,9 @@
typedef blueprint::framework_entity<BlueprintFramework> framework_entity_type;
typedef blueprint::framework_context<BlueprintFramework> framework_context_type;
typedef entity_widget<BlueprintFramework> entity_widget_type;
+ typedef vector_widget<BlueprintFramework> vector_widget_type;
typedef blueprint::port<BlueprintFramework> port_type;
+ typedef blueprint::vector<BlueprintFramework> vector_type;
public:
network_window()
: m_window(( guigl::_label="Network", guigl::_size=guigl::size_type(800, 600) ))
@@ -90,15 +93,28 @@
void add_entity(std::auto_ptr<framework_entity_type> entity)
{
- entity_widget_type *widget = m_layout.create<entity_widget_type>((
- _entity=entity.release(),
- guigl::_background(.5,.5,.5),
- guigl::_label="entity" ));
+ if(dynamic_cast<port_type *> (entity.get()))
+ {
+ entity_widget_type *widget = m_layout.create<entity_widget_type>((
+ _entity=entity.release(),
+ guigl::_background(.5,.5,.5),
+ guigl::_label="entity",
+ _click_callback= boost::bind(&network_window::clicked, this, _1)));
+
+ (*m_network_widget) << widget;
+ }
+ else if(dynamic_cast<vector_type *> (entity.get()))
+ {
+ vector_widget_type *widget = m_layout.create<vector_widget_type>((
+ _entity=entity.release(),
+ guigl::_background(.5,.5,.5),
+ guigl::_label="entity",
+ _click_callback= boost::bind(&network_window::clicked, this, _1) ));
+
+ (*m_network_widget) << widget;
+ }
- (*m_network_widget) << widget;
guigl::window::redraw(*m_network_widget);
-
- widget->on_click.connect(boost::bind(&network_window::clicked, this, widget));
}
framework_context_type &framework_context()
@@ -141,7 +157,7 @@
network_widget<BlueprintFramework> *m_network_widget;
guigl::layout::grid m_layout;
entity_widget_type *m_dragged;
-
+
blueprint::operation *m_selected_operation;
boost::ptr_vector<blueprint::operation> m_operations;
};
Added: sandbox/dataflow-rewrite/boost/dataflow/vivid/vector_widget.hpp
==============================================================================
--- (empty file)
+++ sandbox/dataflow-rewrite/boost/dataflow/vivid/vector_widget.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -0,0 +1,77 @@
+/*=================================---------------------------------------------
+ Copyright 2007,2008 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__VIVID__VECTOR_WIDGET_HPP
+#define BOOST__DATAFLOW__VIVID__VECTOR_WIDGET_HPP
+
+
+#include <boost/dataflow/vivid/entity_widget.hpp>
+#include <boost/dataflow/blueprint/vector.hpp>
+
+#include <boost/guigl/widget/compound.hpp>
+#include <boost/guigl/layout/grid.hpp>
+
+namespace boost { namespace dataflow { namespace vivid {
+
+template<typename BlueprintFramework>
+class vector_widget
+ : public guigl::view::draggable<vector_widget<BlueprintFramework>, guigl::button::right_type,
+ guigl::widget::compound>
+{
+ typedef blueprint::port<BlueprintFramework> port_type;
+ typedef blueprint::vector<BlueprintFramework> vector_type;
+ typedef entity_widget<BlueprintFramework> entity_widget_type;
+
+public:
+ typedef guigl::view::draggable<vector_widget<BlueprintFramework>, guigl::button::right_type,
+ guigl::widget::compound> base_type;
+
+ template<typename Args>
+ vector_widget(const Args &args)
+ : base_type(args)
+ , m_entity(dynamic_cast<vector_type *>(args[_entity]))
+ {
+ guigl::layout::grid layout((guigl::_vertical=3, guigl::_grid_size=this->size()));
+ guigl::widget::compound *consumer_ports = layout.create<guigl::widget::compound>((guigl::_background=guigl::color_type(0.5,0,0)));
+ layout.next();
+ guigl::widget::compound *producer_ports = layout.create<guigl::widget::compound>((guigl::_background=guigl::color_type(0,0,0.5)));
+
+ guigl::layout::grid consumer_layout((guigl::_horizontal=3, guigl::_grid_size=consumer_ports->size()));
+ guigl::layout::grid producer_layout((guigl::_horizontal=3, guigl::_grid_size=producer_ports->size()));
+ blueprint::port_iterator<BlueprintFramework> it = m_entity->begin();
+ blueprint::port_iterator<BlueprintFramework> end = m_entity->end();
+ for(;it!=end;++it)
+ {
+ port_type *port;
+ if((port = dynamic_cast<port_type *>(&*it)))
+ {
+ bool consumer = port->category_type_info() == typeid(ports::consumer);
+ *(consumer ? consumer_ports : producer_ports)
+ << (consumer ? consumer_layout : producer_layout).create<entity_widget_type>((_entity=port, guigl::_label=(consumer ? "<" : ">"), _click_callback=args[_click_callback]));
+ }
+ }
+
+ *this << consumer_ports;
+ layout.next();
+ *this << producer_ports;
+ }
+ void draggable_on_drag(const guigl::position_type &position)
+ {
+ guigl::position_type difference(position - base_type::drag_origin());
+ base_type::set_position(base_type::position() + difference);
+ guigl::window::redraw(*this);
+ }
+ vector_type &entity()
+ { return *m_entity; }
+private:
+ boost::scoped_ptr<vector_type> m_entity;
+};
+
+} } }
+
+#endif // BOOST__DATAFLOW__VIVID__VECTOR_WIDGET_HPP
Modified: sandbox/dataflow-rewrite/libs/dataflow/build/Jamfile
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/build/Jamfile (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/build/Jamfile 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -12,10 +12,11 @@
make port_binary_operation.hpp : specializable_operation.hpp.py : @in2out ;
make entities.hpp : specializable_operation.hpp.py : @entities ;
+make set_context.hpp : specializable_operation.hpp.py : @set_context ;
actions in2out
{
- python $(TOP)/libs/dataflow/build/file_template.py template=$(>) erase="y" into=$(<) NAME="port_binary_operation" CHECK="are_port_binary_operable" TEMPLATES="Operation" EXTRA_ARGS="Operation" ARITY=2 HAS_TRAITS="is_port" INCLUDES="<boost/dataflow/generic/port/port.hpp>"
+ python $(TOP)/libs/dataflow/build/file_template.py template=$(>) erase="y" into=$(<) NAME="port_binary_operation" CHECK="are_port_binary_operable" TEMPLATES="Operation" EXTRA_ARGS="const Operation" ARITY=2 HAS_TRAITS="is_port" INCLUDES="<boost/dataflow/generic/port/port.hpp>"
}
actions entities
@@ -23,6 +24,11 @@
python $(TOP)/libs/dataflow/build/file_template.py template=$(>) erase="y" into=$(<) NAME="entities" CHECK="has_entities" ARITY=1 HAS_TRAITS="is_framework_entity" INCLUDES="<boost/dataflow/generic/framework_entity.hpp>"
}
+actions set_context
+{
+ python $(TOP)/libs/dataflow/build/file_template.py template=$(>) erase="y" into=$(<) NAME="set_context" CHECK="has_set_context" INNER_TEMPLATES="Context" EXTRA_ARGS="Context" ARITY=1 HAS_TRAITS="is_framework_entity" INCLUDES="<boost/dataflow/generic/framework_entity.hpp>"
+}
+
install port_binary_operation_result : port_binary_operation.hpp : <location>$(TOP)/boost/dataflow/generic ;
-install get_port_result : get_port.hpp : <location>$(TOP)/boost/dataflow/generic/static_vector ;
install entities_result : entities.hpp : <location>$(TOP)/boost/dataflow/generic ;
+install set_context_result : set_context.hpp : <location>$(TOP)/boost/dataflow/generic ;
Modified: sandbox/dataflow-rewrite/libs/dataflow/build/specializable_operation.hpp.py
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/build/specializable_operation.hpp.py (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/build/specializable_operation.hpp.py 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -47,9 +47,9 @@
targs = [("T" + x + " &t" + x) for x in arity_range]
targs_names = [("t" + x) for x in arity_range]
-extra_args_args = [("const " + x + " &" + x.lower()) for x in extra_args]
-extra_args_names = [(x.lower()) for x in extra_args]
-default_extra_args_args = [(extra_args_args[x] + '=' + extra_args[x] + '()') for x in range(len(extra_args))]
+extra_args_args = [(x + " & " + x.rpartition(" ")[2].lower()) for x in extra_args]
+extra_args_names = [(x.rpartition(" ")[2].lower()) for x in extra_args]
+default_extra_args_args = [(extra_args_args[x] + '=' + extra_args[x].rpartition(" ")[2] + '()') for x in range(len(extra_args))]
content = """
namespace boost { namespace dataflow {
Modified: sandbox/dataflow-rewrite/libs/dataflow/build/xcodeide/dataflow.xcodeproj/project.pbxproj
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/build/xcodeide/dataflow.xcodeproj/project.pbxproj (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/build/xcodeide/dataflow.xcodeproj/project.pbxproj 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -119,6 +119,7 @@
087535C70E9C1BCF00AD4E99 /* framework_entity_adapter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = framework_entity_adapter.hpp; sourceTree = "<group>"; };
0875360D0E9C29BC00AD4E99 /* port_adapter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = port_adapter.hpp; sourceTree = "<group>"; };
08960FE40E8B60C400FC2A70 /* specializable_operation.hpp.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = specializable_operation.hpp.py; sourceTree = "<group>"; };
+ 0896F70B0F0A8163000EA0D2 /* vector_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = vector_widget.hpp; sourceTree = "<group>"; };
0897C7860E838AEA00DD0CF9 /* framework.qbk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = framework.qbk; sourceTree = "<group>"; };
08982F6D0E8C5F8F008C1918 /* test_port_binary_operation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_port_binary_operation.cpp; sourceTree = "<group>"; };
0898B4700E83E6E1004F3E91 /* port_binary_operation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = port_binary_operation.hpp; sourceTree = "<group>"; };
@@ -206,6 +207,8 @@
08B8F1C00E512F45000545B8 /* test_framework_entity_traits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_framework_entity_traits.cpp; sourceTree = "<group>"; };
08B8F1D00E513569000545B8 /* test_framework.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_framework.cpp; sourceTree = "<group>"; };
08BA454B0EDCF1A00053808D /* my_dynamic_vector.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = my_dynamic_vector.hpp; sourceTree = "<group>"; };
+ 08C39EC30F01B009001F5448 /* set_context.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = set_context.hpp; sourceTree = "<group>"; };
+ 08C39ECA0F01B3C0001F5448 /* test_set_context.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_set_context.cpp; sourceTree = "<group>"; };
08D18D770EBE25E800B1A160 /* static_vector.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = static_vector.hpp; sourceTree = "<group>"; };
08D6B0BA0EDE06A8005821A8 /* test_entities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_entities.cpp; sourceTree = "<group>"; };
08D6B0DE0EDE1F55005821A8 /* static_vector_adapter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = static_vector_adapter.hpp; sourceTree = "<group>"; };
@@ -348,6 +351,7 @@
08AA903B0EAD3BF100409A2E /* factory_window.hpp */,
08A53F850EAC07E6000B9C17 /* blueprint_component.hpp */,
08B44C1B0EB63549004B133F /* entity_widget.hpp */,
+ 0896F70B0F0A8163000EA0D2 /* vector_widget.hpp */,
);
path = vivid;
sourceTree = "<group>";
@@ -369,6 +373,7 @@
08A77ACD0E4F941C00B8793E /* generic */ = {
isa = PBXGroup;
children = (
+ 08C39EC30F01B009001F5448 /* set_context.hpp */,
08AD7BC10EDD1715002E9432 /* dynamic_vector */,
08AD7BB30EDD1332002E9432 /* entities.hpp */,
08AB81A90EC7A1E300A2B98A /* static_vector */,
@@ -425,6 +430,7 @@
08BA454B0EDCF1A00053808D /* my_dynamic_vector.hpp */,
08AB81BB0EC7A50200A2B98A /* test_static_vector.cpp */,
08AD7BB50EDD13F2002E9432 /* test_dynamic_vector.cpp */,
+ 08C39ECA0F01B3C0001F5448 /* test_set_context.cpp */,
);
path = generic;
sourceTree = "<group>";
Modified: sandbox/dataflow-rewrite/libs/dataflow/example/vivid/Jamfile
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/example/vivid/Jamfile (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/example/vivid/Jamfile 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -7,5 +7,24 @@
#----------------------------------------------===============================*/
-exe vivid_graph_example : vivid_graph_example.cpp /boost_guigl//boost_guigl/<link>static ;
-exe vivid_managed_example : vivid_managed_example.cpp /boost_guigl//boost_guigl/<link>static ;
\ No newline at end of file
+exe vivid_graph_example
+ :
+ vivid_graph_example.cpp
+ /boost_guigl//boost_guigl/<use-window-manager>platform_glut
+ ;
+
+exe vivid_managed_example
+ :
+ vivid_managed_example.cpp
+ /boost_guigl//boost_guigl/<use-window-manager>platform_glut
+ ../../build/managed//dataflow_managed
+ ;
+
+install $(TOP)/bin.v2/examples
+ :
+ vivid_graph_example
+ vivid_managed_example
+ :
+ <install-dependencies>on <install-type>EXE <install-type>LIB
+ ;
+
Modified: sandbox/dataflow-rewrite/libs/dataflow/example/vivid/vivid_graph_example.cpp
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/example/vivid/vivid_graph_example.cpp (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/example/vivid/vivid_graph_example.cpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -38,9 +38,10 @@
df::vivid::network_window<graph_blueprint_framework> network_window;
factory_window.set_network_window(network_window);
- df::blueprint::factory<graph_blueprint_framework> factory;
+ typedef df::blueprint::factory<graph_blueprint_framework> factory_type;
+ factory_type factory;
- factory.add_port<df::ugraph::vertex>("vertex");
+ factory.add<factory_type::port_adapter_selector, df::ugraph::vertex>("vertex", boost::ref(network_window.framework_context().object()));
network_window.framework_context().register_operation<df::ugraph::vertex, df::ugraph::vertex, df::operations::connect>();
factory_window.set_factory(factory);
Modified: sandbox/dataflow-rewrite/libs/dataflow/example/vivid/vivid_managed_example.cpp
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/example/vivid/vivid_managed_example.cpp (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/example/vivid/vivid_managed_example.cpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -121,16 +121,14 @@
class example_factory : public df::blueprint::factory<managed_blueprint_framework>
{
public:
- example_factory()
+ example_factory(df::managed::network &m_network)
{
-/* add_component<io>("io", boost::ref(m_network));
- add_component<not_operation>("not", boost::ref(m_network));
- add_component<and_operation>("and", boost::ref(m_network));
- add_component<or_operation>("or", boost::ref(m_network));
- add_component<update_network>("upd", boost::ref(m_network));*/
+ add<static_vector_adapter_selector, io>("io", boost::ref(m_network));
+ add<static_vector_adapter_selector, not_operation>("not", boost::ref(m_network));
+ add<static_vector_adapter_selector, and_operation>("and", boost::ref(m_network));
+ add<static_vector_adapter_selector, or_operation>("or", boost::ref(m_network));
+ add<static_vector_adapter_selector, update_network>("upd", boost::ref(m_network));
}
-private:
- df::managed::network m_network;
};
int main()
@@ -141,8 +139,9 @@
df::vivid::factory_window<managed_blueprint_framework> factory_window;
df::vivid::network_window<managed_blueprint_framework> network_window;
factory_window.set_network_window(network_window);
+ network_window.framework_context().register_operation<df::managed::port<bool, df::ports::producer>, df::managed::port<bool, df::ports::consumer>, df::operations::connect>();
- example_factory factory;
+ example_factory factory(network_window.framework_context().object());
factory_window.set_factory(factory);
Modified: sandbox/dataflow-rewrite/libs/dataflow/src/managed/component.cpp
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/src/managed/component.cpp (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/src/managed/component.cpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -13,19 +13,30 @@
namespace boost { namespace dataflow { namespace managed {
-component::component(network &network_context) : m_network_context(network_context), m_topological_sort_index(0)
+component::component(network &network_context) : m_network_context(&network_context), m_topological_sort_index(0)
{
- network_context.register_component(this);
+ if(m_network_context)
+ m_network_context->register_component(this);
};
component::component(const component &other) : m_network_context(other.m_network_context), m_topological_sort_index(0)
{
- m_network_context.register_component(this);
+ if(m_network_context)
+ m_network_context->register_component(this);
+}
+
+void component::set_network_context(network &network_context)
+{
+ if(m_network_context)
+ m_network_context->unregister_component(this);
+
+ m_network_context = &network_context;
+ m_network_context->register_component(this);
}
component::~component()
{
- m_network_context.unregister_component(this);
+ m_network_context->unregister_component(this);
}
void component::claim_port(port_base &p)
Modified: sandbox/dataflow-rewrite/libs/dataflow/test/blueprint/test_factory.cpp
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/test/blueprint/test_factory.cpp (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/test/blueprint/test_factory.cpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -20,8 +20,9 @@
BOOST_AUTO_TEST_CASE( test_default )
{
- df::blueprint::factory<my_blueprint_framework> factory;
- factory.add_port<my_port_producer>("my_port_producer");
+ typedef df::blueprint::factory<my_blueprint_framework> factory_type;
+ factory_type factory;
+ factory.add<factory_type::port_adapter_selector, my_port_producer>("my_port_producer");
df::blueprint::framework_context<my_blueprint_framework> fo;
df::blueprint::framework_entity<my_blueprint_framework> *entity = factory["my_port_producer"](fo);
Modified: sandbox/dataflow-rewrite/libs/dataflow/test/generic/Jamfile
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/test/generic/Jamfile (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/test/generic/Jamfile 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -22,3 +22,5 @@
run test_static_vector.cpp ;
run test_dynamic_vector.cpp ;
run test_entities.cpp ;
+
+run test_set_context.cpp ;
Modified: sandbox/dataflow-rewrite/libs/dataflow/test/generic/my_framework_with_context.hpp
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/test/generic/my_framework_with_context.hpp (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/test/generic/my_framework_with_context.hpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -12,6 +12,7 @@
#include <boost/dataflow/generic/framework.hpp>
+namespace df=boost::dataflow;
struct my_object
{};
Added: sandbox/dataflow-rewrite/libs/dataflow/test/generic/test_set_context.cpp
==============================================================================
--- (empty file)
+++ sandbox/dataflow-rewrite/libs/dataflow/test/generic/test_set_context.cpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -0,0 +1,39 @@
+/*=================================---------------------------------------------
+ Copyright 2008 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)
+-----------------------------------------------===============================*/
+
+
+#include <boost/dataflow/generic/set_context.hpp>
+#include "my_ports_with_context.hpp"
+
+
+#define BOOST_TEST_MAIN
+#include <boost/test/unit_test.hpp>
+
+namespace df=boost::dataflow;
+
+namespace boost { namespace dataflow { namespace extension {
+
+ template<>
+ struct set_context_impl<my_port_with_context_traits>
+ {
+ typedef void result_type;
+
+ void operator()(my_port_with_context &context, my_object &object)
+ {
+ }
+ };
+
+}}}
+
+BOOST_AUTO_TEST_CASE( test )
+{
+ my_object object;
+ my_port_with_context port(object);
+
+ df::set_context(port, object);
+}
\ No newline at end of file
Modified: sandbox/dataflow-rewrite/libs/dataflow/test/managed/test_io_component.cpp
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/test/managed/test_io_component.cpp (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/test/managed/test_io_component.cpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -23,6 +23,9 @@
BOOST_CHECK_EQUAL(&at_c<0>(df::entities(c)), &c.port<0>());
BOOST_CHECK_EQUAL(&at_c<1>(df::entities(c)), &c.port<1>());
+
+ c.set<1>(true);
+ c.get<1>();
} // int test_main(int, char* [])
Modified: sandbox/dataflow-rewrite/libs/dataflow/test/vivid/test_factory_window.cpp
==============================================================================
--- sandbox/dataflow-rewrite/libs/dataflow/test/vivid/test_factory_window.cpp (original)
+++ sandbox/dataflow-rewrite/libs/dataflow/test/vivid/test_factory_window.cpp 2009-03-15 00:07:12 EDT (Sun, 15 Mar 2009)
@@ -20,8 +20,9 @@
{
df::vivid::factory_window<my_blueprint_framework> window;
+ typedef df::blueprint::factory<my_blueprint_framework> factory_type;
df::blueprint::factory<my_blueprint_framework> factory;
- factory.add_port<my_port_producer>("my_port_producer");
+ factory.add<factory_type::port_adapter_selector, my_port_producer>("my_port_producer");
window.set_factory(factory);
}
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