$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: srajko_at_[hidden]
Date: 2007-06-03 13:50:26
Author: srajko
Date: 2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
New Revision: 4423
URL: http://svn.boost.org/trac/boost/changeset/4423
Log:
convert components to use fusion
Added:
   sandbox/SOC/2007/signals/boost/signal_network/counter.hpp
   sandbox/SOC/2007/signals/boost/signal_network/detail/serialize_fusion_vector.hpp
   sandbox/SOC/2007/signals/boost/signal_network/detail/unfused_inherited.hpp
   sandbox/SOC/2007/signals/boost/signal_network/detail/unfused_typed_class.hpp
   sandbox/SOC/2007/signals/libs/signal_network/test/test_chain.cpp
   sandbox/SOC/2007/signals/libs/signal_network/test/test_counter.cpp
   sandbox/SOC/2007/signals/libs/signal_network/test/test_function.cpp
   sandbox/SOC/2007/signals/libs/signal_network/test/test_junction.cpp
   sandbox/SOC/2007/signals/libs/signal_network/test/test_mutex.cpp
   sandbox/SOC/2007/signals/libs/signal_network/test/test_socket.cpp
   sandbox/SOC/2007/signals/libs/signal_network/test/test_storage.cpp
Removed:
   sandbox/SOC/2007/signals/boost/signal_network/collector.hpp
   sandbox/SOC/2007/signals/boost/signal_network/detail/chain_template.hpp
   sandbox/SOC/2007/signals/boost/signal_network/detail/function_template.hpp
   sandbox/SOC/2007/signals/boost/signal_network/detail/junction_template.hpp
   sandbox/SOC/2007/signals/boost/signal_network/detail/mutex_template.hpp
   sandbox/SOC/2007/signals/boost/signal_network/detail/selector_template.hpp
   sandbox/SOC/2007/signals/boost/signal_network/detail/socket_receiver_template.hpp
   sandbox/SOC/2007/signals/boost/signal_network/detail/socket_sender_template.hpp
   sandbox/SOC/2007/signals/boost/signal_network/detail/storage_template.hpp
   sandbox/SOC/2007/signals/libs/signal_network/test/test.cpp
Text files modified: 
   sandbox/SOC/2007/signals/boost/signal_network/chain.hpp                   |    65 +++++++++++++++++++-                    
   sandbox/SOC/2007/signals/boost/signal_network/detail/connect_template.hpp |     2                                         
   sandbox/SOC/2007/signals/boost/signal_network/filter.hpp                  |    15 ++++                                    
   sandbox/SOC/2007/signals/boost/signal_network/function.hpp                |    36 ++++++++++-                             
   sandbox/SOC/2007/signals/boost/signal_network/junction.hpp                |    42 +++++++++++-                            
   sandbox/SOC/2007/signals/boost/signal_network/mutex.hpp                   |    33 +++++++++                               
   sandbox/SOC/2007/signals/boost/signal_network/selector.hpp                |    40 ++++++++----                            
   sandbox/SOC/2007/signals/boost/signal_network/socket_receiver.hpp         |    38 ++++++++++-                             
   sandbox/SOC/2007/signals/boost/signal_network/socket_sender.hpp           |    53 +++++++++++++++-                        
   sandbox/SOC/2007/signals/boost/signal_network/storage.hpp                 |   111 +++++++++++++++++++++++------------     
   sandbox/SOC/2007/signals/boost/signal_network/timed_generator.hpp         |     2                                         
   sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/build.vcproj    |    32 +--------                               
   sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/example.vcproj  |     4                                         
   sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/test.vcproj     |    28 ++++++++                                
   sandbox/SOC/2007/signals/libs/signal_network/example/example.cpp          |   126 ++++++++++++++++++++++----------------- 
   sandbox/SOC/2007/signals/libs/signal_network/test/Jamfile.v2              |    17 ++--                                    
   16 files changed, 475 insertions(+), 169 deletions(-)
Modified: sandbox/SOC/2007/signals/boost/signal_network/chain.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/chain.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/chain.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -1,11 +1,68 @@
+// 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 SIGNAL_NETWORK_CHAIN_HPP
 #define SIGNAL_NETWORK_CHAIN_HPP
 
 #include <boost/signal_network/filter.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/fusion/sequence/adapted/mpl.hpp>
+#include <boost/signal_network/detail/unfused_inherited.hpp>
+
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+template<typename T, typename Signature>
+class chain : public filter_base
+{
+public:
+    typedef boost::function_types::parameter_types<Signature> parameter_types;
+    typedef typename boost::fusion::result_of::as_vector<parameter_types >::type parameter_vector;
 
-#define SIGNAL_NETWORK_TEMPLATE_CLASS chain
-#define SIGNAL_NETWORK_TEMPLATE_BASE filter_base
-#define SIGNAL_NETWORK_TEMPLATE_TYPENAME_T
-#include <boost/signal_network/detail/loader.hpp>
+    typedef boost::fusion::unfused_inherited<chain<T, Signature>,
+        typename mpl::vector<size_t, T *>::type,
+        typename boost::function_types::parameter_types<Signature> > unfused;
 
+	chain(size_t copies, T *component=NULL)
+	{
+		initialize(copies, component);
+	}
+	~chain()
+	{
+		delete[] components;
+	}
+    template <class Seq>
+    struct result
+    {
+        typedef typename boost::function_traits<Signature>::result_type type;
+    };
+    typename boost::function_traits<Signature>::result_type 
+    operator()(const parameter_vector &vec_par)
+    {
+        return boost::fusion::fused<T &>(components[0])(vec_par);
+    }
+	boost::signal<Signature> &default_signal()
+	{
+		return components[size-1].default_signal();
+	}
+private:
+	void initialize(size_t copies, T *component=NULL)
+	{
+		size = copies;
+		components = new T[copies];
+		for (size_t i=0; i<copies-1; i++)
+		{
+			if (component) components[i] = *component;
+			components[i] >>= components[i+1];
+		}
+		if (component) components[size-1] = *component;
+	}
+	T *components;
+	size_t size;
+
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
+
 #endif // SIGNAL_NETWORK_CHAIN_HPP
Deleted: sandbox/SOC/2007/signals/boost/signal_network/collector.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/collector.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
+++ (empty file)
@@ -1,44 +0,0 @@
-#ifndef SIGNAL_NETWORK_COLLECTOR_HPP
-#define SIGNAL_NETWORK_COLLECTOR_HPP
-
-#include <boost/type_traits.hpp>
-#include <boost/call_traits.hpp>
-#include <boost/signal_network/detail/defines.hpp>
-
-SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
-
-///	Stores data received via a signal so that it can be retrieved.
-/**	\param Signature Signature of the signal that collector can receive.
-	\todo Currently collector only supports signatures of type void (type).
-
-	Example:
-	\dontinclude example.cpp
-	\skip simple_test
-	\until end void simple_test
-*/
-template<typename Signature>
-class collector
-{
-public:
-	/// Type of the stored value
-	typedef typename boost::remove_reference<typename boost::function_traits<Signature>::arg1_type>::type arg1_value_type;
-	
-	/// The default constructor will not initialize the stored value.
-	collector(){}
-	/// This constructor will initialize the stored value to what is provided.
-	collector(typename boost::call_traits<arg1_value_type>::param_type init) : arg1_value(init) {}
-	/// Stores the value in the signal.
-	void operator()(typename boost::function_traits<Signature>::arg1_type arg1)
-	{
-		arg1_value = arg1;
-	}
-	/// Returns the last stored value.
-	typename call_traits<arg1_value_type>::const_reference operator()() {return arg1_value;}
-private:
-	/// Stored value.
-	typename arg1_value_type arg1_value;
-};
-
-SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
-
-#endif // SIGNAL_NETWORK_COLLECTOR_HPP
\ No newline at end of file
Added: sandbox/SOC/2007/signals/boost/signal_network/counter.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/boost/signal_network/counter.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -0,0 +1,45 @@
+// 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 SIGNAL_NETWORK_COUNTER_HPP
+#define SIGNAL_NETWORK_COUNTER_HPP
+
+#include <boost/signal_network/detail/defines.hpp>
+#include <boost/signal_network/detail/unfused_inherited.hpp>
+#include <boost/signal_network/filter.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/fusion/sequence/adapted/mpl.hpp>
+
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+template<typename Signature, typename T=int>
+class counter : public fused_filter<Signature>
+{
+public:
+    typedef boost::fusion::unfused_inherited<counter<Signature, T>,
+        typename mpl::vector<>::type,
+        typename boost::function_types::parameter_types<Signature> > unfused;
+
+    counter() : count_(0) {}
+    template <class Seq>
+    struct result
+    {
+        typedef typename boost::function_traits<Signature>::result_type type;
+    };
+    typename boost::function_traits<Signature>::result_type 
+    operator()(const typename fused_filter<Signature>::parameter_vector &vec_par)
+    {
+        count_++;
+        return static_cast<typename boost::function_traits<Signature>::result_type>
+            (fused_out(vec_par));
+    }
+    T count() {return count_;}
+private:
+    T count_;
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
+
+#endif // SIGNAL_NETWORK_COUNT_HPP
\ No newline at end of file
Deleted: sandbox/SOC/2007/signals/boost/signal_network/detail/chain_template.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/detail/chain_template.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
+++ (empty file)
@@ -1,39 +0,0 @@
-#ifndef SIGNAL_NETWORK_TEMPLATE_BODY
-
-	chain_impl(size_t copies, T *component=NULL)
-	{
-		initialize(copies, component);
-	}
-	~chain_impl()
-	{
-		delete[] components;
-	}
-	SIGNAL_NETWORK_FUNCTION(SIGNAL_NETWORK_DEFAULT_SLOT,Signature,SIGNAL_NETWORK_TEMPLATE_ARITY)
-	{
-		SIGNAL_NETWORK_RETURN(_return) components[0](SIGNAL_NETWORK_ARG_NAMES(SIGNAL_NETWORK_TEMPLATE_ARITY));
-	}
-	boost::signal<Signature> &default_signal()
-	{
-		return components[size-1].default_signal();
-	}
-private:
-	void initialize(size_t copies, T *component=NULL)
-	{
-		size = copies;
-		components = new T[copies];
-		for (size_t i=0; i<copies-1; i++)
-		{
-			if (component) components[i] = *component;
-			components[i] >>= components[i+1];
-		}
-		if (component) components[size-1] = *component;
-	}
-	T *components;
-	size_t size;
-
-#else
-public:
-	chain(size_t copies) : SIGNAL_NETWORK_TEMPLATE_CLASS_IMPL_BASE(copies) {}
-	chain(size_t copies, T &component) : SIGNAL_NETWORK_TEMPLATE_CLASS_IMPL_BASE(copies, &component) {}
-
-#endif
\ No newline at end of file
Modified: sandbox/SOC/2007/signals/boost/signal_network/detail/connect_template.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/detail/connect_template.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/detail/connect_template.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -2,7 +2,7 @@
                 static void connect(boost::signal<Signature> &signal, T &link)
                 {
                         signal.connect(boost::bind(
-			(typename slot_type<T, Signature>::type) &T::operator(),
+			static_cast<typename slot_type<T, Signature>::type>( &T::operator() ),
                                 boost::ref(link) SIGNAL_NETWORK_BIND_ARGS(SIGNAL_NETWORK_TEMPLATE_ARITY)));
                 }
 #else
Deleted: sandbox/SOC/2007/signals/boost/signal_network/detail/function_template.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/detail/function_template.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
+++ (empty file)
@@ -1,15 +0,0 @@
-#ifndef SIGNAL_NETWORK_TEMPLATE_BODY
-public:
-	function_impl() {}
-
-	void operator()(SIGNAL_NETWORK_ARG_TYPENAMES(SIGNAL_NETWORK_TEMPLATE_ARITY))
-	{
-		out(func(SIGNAL_NETWORK_ARG_NAMES(SIGNAL_NETWORK_TEMPLATE_ARITY)));
-	}
-
-protected:
-	boost::function<Signature> func;
-#else
-public:
-	function(boost::function<Signature> f) {SIGNAL_NETWORK_TEMPLATE_CLASS_IMPL_BASE::func = f;}
-#endif
\ No newline at end of file
Deleted: sandbox/SOC/2007/signals/boost/signal_network/detail/junction_template.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/detail/junction_template.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
+++ (empty file)
@@ -1,25 +0,0 @@
-/*
- *  signal_junction_template.h
- *  Utility
- *
- *  Created by Stjepan Rajko on 3/9/07.
- *  Copyright 2007 __MyCompanyName__. All rights reserved.
- *
- */
-
-#ifndef SIGNAL_NETWORK_TEMPLATE_BODY
-
-junction_impl() : enabled(true) {}
-void enable() {enabled = true;}
-void disable() {enabled = false;}
-SIGNAL_NETWORK_FUNCTION(SIGNAL_NETWORK_DEFAULT_SLOT,Signature,SIGNAL_NETWORK_TEMPLATE_ARITY)
-{
-	if (enabled)
-		SIGNAL_NETWORK_RETURN(_return) SIGNAL_NETWORK_TEMPLATE_BASE::out(SIGNAL_NETWORK_ARG_NAMES(SIGNAL_NETWORK_TEMPLATE_ARITY));
-}
-private:
-volatile bool enabled;
-
-#else
-
-#endif
\ No newline at end of file
Deleted: sandbox/SOC/2007/signals/boost/signal_network/detail/mutex_template.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/detail/mutex_template.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
+++ (empty file)
@@ -1,11 +0,0 @@
-#ifndef SIGNAL_NETWORK_TEMPLATE_BODY
-	SIGNAL_NETWORK_FUNCTION(SIGNAL_NETWORK_DEFAULT_SLOT,Signature,SIGNAL_NETWORK_TEMPLATE_ARITY)
-		{
-			boost::mutex::scoped_lock lock(mutex_);
-			SIGNAL_NETWORK_RETURN(_return) SIGNAL_NETWORK_TEMPLATE_BASE::out(SIGNAL_NETWORK_ARG_NAMES(SIGNAL_NETWORK_TEMPLATE_ARITY));
-		}
-	private:
-		boost::mutex mutex_;
-#else
-
-#endif
Deleted: sandbox/SOC/2007/signals/boost/signal_network/detail/selector_template.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/detail/selector_template.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
+++ (empty file)
@@ -1,11 +0,0 @@
-#ifndef SIGNAL_NETWORK_TEMPLATE_BODY
-
-	selector_impl() : selected(0) {}
-	void select(int source) {selected = source;}
-	BOOST_PP_REPEAT_FROM_TO(1,_inputs_inc,SIGNAL_NETWORK_SELECTOR_INPUT,SIGNAL_NETWORK_TEMPLATE_ARITY)
-private:
-	volatile int selected;
-
-#else
-
-#endif
\ No newline at end of file
Added: sandbox/SOC/2007/signals/boost/signal_network/detail/serialize_fusion_vector.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/boost/signal_network/detail/serialize_fusion_vector.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -0,0 +1,83 @@
+#ifndef BOOST_SERIALIZE_FUSION_VECTOR_HPP
+#define BOOST_SERIALIZE_FUSION_VECTOR_HPP
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// vector.hpp - non-intrusive serialization of boost::fusion::vector
+//
+// copyright (c) 2005   
+// troy d. straszheim <troy_at_[hidden]>
+// http://www.resophonic.com
+//
+// copyright 2007 Stjepan Rajko
+// 
+// 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)
+//
+// See http://www.boost.org for updates, documentation, and revision history.
+//
+
+#include <boost/fusion/sequence/container/vector/vector.hpp>
+
+namespace boost {
+  namespace serialization {
+    namespace detail {
+      namespace vector {
+
+	// primary template, serializes a vector in the
+	// constructor.   Class is called like a template function.
+	template <class Archive, class Tuple, int i=0, bool stop=false>
+	struct serialize_impl
+	{
+	  serialize_impl(Archive &ar, Tuple& t)
+	  { 
+	    char tag[3] = "T?";
+	    tag[1] = '0' + i; 
+        ar & make_nvp(tag, boost::fusion::at_c<i>(t));
+	    serialize_impl<Archive, Tuple, i+1, 
+            i+1 < boost::fusion::result_of::size<Tuple>::value ? false : true>(ar, t);
+	  }
+	};
+
+	// no-op called by the primary template when "i" is out of
+	// bounds.
+	template <class Archive, class Tuple, int i>
+	struct serialize_impl<Archive, Tuple, i, true>
+	{
+	  serialize_impl(Archive &ar, Tuple& t) { }
+	};
+
+      } // namespace vector
+    } // namespace detail
+
+    // 
+    // primary interface functions.  Serialize a vector...
+    //
+    template <class Archive, 
+	      typename T0, typename T1, typename T2, typename T3, typename T4,
+	      typename T5, typename T6, typename T7, typename T8, typename T9>
+    void 
+    serialize (Archive & ar,
+	       boost::fusion::vector<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9> & t,
+	       unsigned int version)
+    {
+      detail::vector::serialize_impl<
+        Archive,
+        boost::fusion::vector<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9>
+      >(ar, t); 
+    }
+    
+    //
+    // Serialize a "null" vector is a no-op
+    //
+    template <class Archive>
+    void
+    serialize (Archive & ar, 
+	       boost::fusion::vector<> & nullvector, 
+	       unsigned int version)
+    {
+    }
+  } // namespace serialization
+} // namespace boost
+
+#endif // BOOST_SERIALIZE_FUSION_VECTOR_HPP
\ No newline at end of file
Deleted: sandbox/SOC/2007/signals/boost/signal_network/detail/socket_receiver_template.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/detail/socket_receiver_template.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
+++ (empty file)
@@ -1,30 +0,0 @@
-#ifndef SIGNAL_NETWORK_TEMPLATE_BODY
-
-public:
-	socket_receiver_impl(asio::ip::tcp::socket &socket) :
-		socket_(socket),
-		stream(std::ios::in | std::ios::out | std::ios::binary) {}
-	void operator()()
-	{
-		int received_size = socket_.receive(asio::buffer(buffer, bufferSize));
-		stream.str(empty_string);
-		stream.write((char *)buffer, received_size);
-		boost::archive::binary_iarchive archive(stream);
-		BOOST_PP_REPEAT_FROM_TO(1,SIGNAL_NETWORK_TEMPLATE_ARITY_INC,SIGNAL_NETWORK_SOCKET_UNPACK,_)
-		
-		storage<Signature>::operator()();
-	}
-
-private:
-	asio::ip::tcp::socket &socket_;
-	std::stringstream stream;
-	std::string empty_string;
-	boost::archive::binary_iarchive *archive;
-	enum { bufferSize = 20000 };
-	unsigned char buffer[bufferSize];
-#else
-
-public:
-	socket_receiver(asio::ip::tcp::socket &socket) : SIGNAL_NETWORK_TEMPLATE_CLASS_IMPL_BASE (socket) {}
-
-#endif
\ No newline at end of file
Deleted: sandbox/SOC/2007/signals/boost/signal_network/detail/socket_sender_template.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/detail/socket_sender_template.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
+++ (empty file)
@@ -1,24 +0,0 @@
-#ifndef SIGNAL_NETWORK_TEMPLATE_BODY
-
-public:
-	socket_sender_impl(asio::ip::tcp::socket &socket) :
-		socket_(socket),
-		stream(std::ios::in | std::ios::out | std::ios::binary) {};
-	SIGNAL_NETWORK_FUNCTION(SIGNAL_NETWORK_DEFAULT_SLOT,Signature,SIGNAL_NETWORK_TEMPLATE_ARITY)
-	{
-		boost::archive::binary_oarchive archive (stream);
-		BOOST_PP_REPEAT_FROM_TO(1,SIGNAL_NETWORK_TEMPLATE_ARITY_INC,SIGNAL_NETWORK_SOCKET_PACK,_)
-		boost::asio::write(socket_, asio::buffer(stream.str()),
-		boost::asio::transfer_all());
-		stream.str(empty_string);
-	}
-private:
-	asio::ip::tcp::socket &socket_;
-	std::stringstream stream;
-	std::string empty_string;
-
-#else
-
-public:
-	socket_sender(asio::ip::tcp::socket &socket) : SIGNAL_NETWORK_TEMPLATE_CLASS_IMPL_BASE(socket) {}
-#endif
\ No newline at end of file
Deleted: sandbox/SOC/2007/signals/boost/signal_network/detail/storage_template.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/detail/storage_template.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
+++ (empty file)
@@ -1,37 +0,0 @@
-/*
- *  signal_storage_template.h
- *  Utility
- *
- *  Created by Stjepan Rajko on 3/9/07.
- *  Copyright 2007 __MyCompanyName__. All rights reserved.
- *
- */
-
-#ifndef SIGNAL_NETWORK_TEMPLATE_BODY
-
-SIGNAL_NETWORK_ARGVAR_TYPEDEFS(SIGNAL_NETWORK_TEMPLATE_ARITY)
-BOOST_PP_IF(SIGNAL_NETWORK_TEMPLATE_ARITY,SIGNAL_NETWORK_STORAGE_SIGNAL,BOOST_PP_EMPTY)()
-typename SIGNAL_NETWORK_TEMPLATE_BASE::result_type operator()()
-{
-	SIGNAL_NETWORK_RETURN(_return) SIGNAL_NETWORK_TEMPLATE_BASE::out(SIGNAL_NETWORK_ARGVAR_NAMES(SIGNAL_NETWORK_TEMPLATE_ARITY));
-}
-BOOST_PP_REPEAT_FROM_TO(1,SIGNAL_NETWORK_TEMPLATE_ARITY_INC,SIGNAL_NETWORK_RETURN_STORED,_)
-
-protected:
-SIGNAL_NETWORK_ARGVARS(SIGNAL_NETWORK_TEMPLATE_ARITY)
-
-#else
-#define SIGNAL_NETWORK_ARGVAR_REPEAT_TYPEDEF(z,n,text) typedef typename SIGNAL_NETWORK_TEMPLATE_CLASS_IMPL_BASE::arg##n##_value_type arg##n##_value_type;
-#define SIGNAL_NETWORK_ARGVAR_REPEAT_TYPEDEFS(n) BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(n,1),SIGNAL_NETWORK_ARGVAR_REPEAT_TYPEDEF,_)
-
-public:
-	typedef SIGNAL_NETWORK_TEMPLATE_CLASS_IMPL_BASE base_class;
-	storage() {}
-	BOOST_PP_IF(SIGNAL_NETWORK_TEMPLATE_ARITY,
-				storage(SIGNAL_NETWORK_ARGVAR_TYPENAMES(SIGNAL_NETWORK_TEMPLATE_ARITY,typename base_class:: ))
-			{operator()(SIGNAL_NETWORK_ARGVAR_NAMES(SIGNAL_NETWORK_TEMPLATE_ARITY));},
-		BOOST_PP_EMPTY())
-
-#undef SIGNAL_NETWORK_ARGVAR_REPEAT_TYPEDEF
-#undef SIGNAL_NETWORK_ARGVAR_REPEAT_TYPEDEFS
-#endif
Added: sandbox/SOC/2007/signals/boost/signal_network/detail/unfused_inherited.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/boost/signal_network/detail/unfused_inherited.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -0,0 +1,145 @@
+/*=============================================================================
+    Copyright (c) 2006-2007 Tobias Schwinger
+    Copyright (c) 2007 Stjepan Rajko
+  
+    Use modification and distribution are 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).
+==============================================================================*/
+
+#if !defined(BOOST_FUSION_FUNCTIONAL_ADAPTER_UNFUSED_INHERITED_HPP_INCLUDED)
+#if !defined(BOOST_PP_IS_ITERATING)
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/sequence/container/vector/vector.hpp>
+#include <boost/fusion/sequence/conversion/as_vector.hpp>
+#include <boost/fusion/algorithm/transformation/pop_back.hpp>
+
+#include <boost/fusion/functional/adapter/limits.hpp>
+#include <boost/fusion/functional/adapter/detail/has_type.hpp>
+#include <boost/fusion/functional/adapter/detail/nullary_call_base.hpp>
+
+#include <boost/mpl/size.hpp>
+
+
+namespace boost { namespace fusion
+{
+
+    template <class Function, class CSequence, class Sequence, typename Enable=void> class unfused_inherited;
+
+    //----- ---- --- -- - -  -   -
+
+    #define  BOOST_PP_ITERATION_PARAMS_1 (3, (0,BOOST_FUSION_UNFUSED_TYPED_MAX_ARITY, <boost/signal_network/detail/unfused_inherited.hpp>))
+    #include BOOST_PP_ITERATE() 
+}}
+
+#define BOOST_FUSION_FUNCTIONAL_ADAPTER_UNFUSED_INHERITED_HPP_INCLUDED
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+# if BOOST_PP_ITERATION_DEPTH()== 2
+
+#define CONSTRUCTOR_ARGS BOOST_PP_FRAME_ITERATION(1)
+#define OPERATOR_ARGS BOOST_PP_FRAME_ITERATION(2)
+
+        template <class Function, class CSequence, class Sequence>
+        class unfused_inherited<Function, CSequence, Sequence,
+            typename boost::enable_if<
+            boost::mpl::and_<
+                boost::mpl::equal_to<
+                    boost::fusion::result_of::size<CSequence>,
+                    boost::mpl::int_<CONSTRUCTOR_ARGS> >,
+                boost::mpl::equal_to<
+                    boost::fusion::result_of::size<Sequence>,
+                    boost::mpl::int_<OPERATOR_ARGS> >
+            >  >::type >
+    : public Function
+    {
+        typedef typename result_of::as_vector<CSequence>::type carg_vector_t;
+        typedef typename result_of::as_vector<Sequence>::type arg_vector_t;
+
+    public:
+        using Function::operator();
+
+#define M(z,i,s) \
+    typename result_of::value_at_c<s,i>::type a##i
+#define ADAPTED_ARGS(z,i,s) \
+    typename detail::call_param<typename result_of::value_at_c<s,i>::type>::type a##i
+
+        unfused_inherited(BOOST_PP_ENUM(CONSTRUCTOR_ARGS,ADAPTED_ARGS,carg_vector_t))
+            : Function(BOOST_PP_ENUM_PARAMS(CONSTRUCTOR_ARGS,a))
+        { }
+
+#if OPERATOR_ARGS>0
+        inline typename Function::template result<arg_vector_t>::type
+        operator()(BOOST_PP_ENUM(OPERATOR_ARGS,M,arg_vector_t)) const
+        {
+            arg_vector_t arg(BOOST_PP_ENUM_PARAMS(OPERATOR_ARGS,a));
+            return Function::operator()(arg);
+        }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+        void//inline typename Function::template result<arg_vector_t>::type 
+        operator()(BOOST_PP_ENUM(OPERATOR_ARGS,M,arg_vector_t)) 
+        {
+            arg_vector_t arg(BOOST_PP_ENUM_PARAMS(OPERATOR_ARGS,a));
+            return Function::operator()(arg);
+        }
+#endif
+
+#else
+        inline typename Function::template result<arg_vector_t>::type
+        operator()() const
+        {
+            arg_vector_t arg;
+            return Function::operator()(arg);
+        }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+        inline typename Function::template result<arg_vector_t>::type 
+        operator()() 
+        {
+            arg_vector_t arg;
+            return Function::operator()(arg);
+        }
+#endif
+
+#endif
+
+#undef M
+#undef ADAPTED_ARGS
+
+    };
+
+#undef CONSTRUCTOR_ARGS
+#undef OPERATOR_ARGS
+
+#else
+
+#define  BOOST_PP_ITERATION_PARAMS_2 (3, (0,BOOST_FUSION_UNFUSED_TYPED_MAX_ARITY,<boost/signal_network/detail/unfused_inherited.hpp>))
+#include BOOST_PP_ITERATE()
+
+#endif
+
+#endif // defined(BOOST_PP_IS_ITERATING)
+#endif
+
Added: sandbox/SOC/2007/signals/boost/signal_network/detail/unfused_typed_class.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/boost/signal_network/detail/unfused_typed_class.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -0,0 +1,119 @@
+/*=============================================================================
+    Copyright (c) 2006-2007 Tobias Schwinger
+    Copyright (c) 2007 Stjepan Rajko
+  
+    Use modification and distribution are 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).
+==============================================================================*/
+
+#if !defined(BOOST_FUSION_FUNCTIONAL_ADAPTER_UNFUSED_TYPED_CLASS_HPP_INCLUDED)
+#if !defined(BOOST_PP_IS_ITERATING)
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#include <boost/fusion/support/detail/access.hpp>
+#include <boost/fusion/sequence/intrinsic/value_at.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/sequence/container/vector/vector.hpp>
+#include <boost/fusion/sequence/conversion/as_vector.hpp>
+#include <boost/fusion/algorithm/transformation/pop_back.hpp>
+
+#include <boost/fusion/functional/adapter/limits.hpp>
+#include <boost/fusion/functional/adapter/detail/has_type.hpp>
+#include <boost/fusion/functional/adapter/detail/nullary_call_base.hpp>
+
+#include <boost/mpl/size.hpp>
+
+
+namespace boost { namespace fusion
+{
+
+    template <class Function, class Sequence, typename Enable=void> class unfused_typed_class;
+
+    //----- ---- --- -- - -  -   -
+
+    #define  BOOST_PP_ITERATION_PARAMS_1 (3, (0,BOOST_FUSION_UNFUSED_TYPED_MAX_ARITY, <boost/signal_network/detail/unfused_typed_class.hpp>))
+    #include BOOST_PP_ITERATE()
+}}
+
+#define BOOST_FUSION_FUNCTIONAL_ADAPTER_UNFUSED_TYPED_CLASS_HPP_INCLUDED
+#else // defined(BOOST_PP_IS_ITERATING)
+///////////////////////////////////////////////////////////////////////////////
+//
+//  Preprocessor vertical repetition code
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#define OPERATOR_ARGS BOOST_PP_ITERATION()
+#define CONSTRUCTOR_ARGS BOOST_PP_ITERATION()
+
+        template <class Function, class Sequence>
+        class unfused_typed_class<Function, Sequence,
+            typename boost::enable_if<
+                typename boost::mpl::equal_to<
+                    typename boost::fusion::result_of::size<Sequence>::type,
+                    typename boost::mpl::int_<OPERATOR_ARGS>::type >::type           
+            >::type>
+    : public Function
+    {
+        typedef typename result_of::as_vector<Sequence>::type carg_vector_t;
+        typedef typename result_of::as_vector<Sequence>::type arg_vector_t;
+
+    public:
+
+        using Function::operator();
+
+        inline explicit unfused_typed_class()
+        { }
+
+#define M(z,i,s)                                                                \
+    typename result_of::value_at_c<s,i>::type a##i
+
+#if CONSTRUCTOR_ARGS>0
+
+        inline explicit unfused_typed_class(BOOST_PP_ENUM(CONSTRUCTOR_ARGS,M,carg_vector_t))
+            : Function(carg_vector_t(BOOST_PP_ENUM_PARAMS(CONSTRUCTOR_ARGS,a)))
+        { }
+
+#endif
+
+#if OPERATOR_ARGS>0
+        inline typename Function::template result<arg_vector_t>::type
+        operator()(BOOST_PP_ENUM(OPERATOR_ARGS,M,arg_vector_t)) const
+        {
+            arg_vector_t arg(BOOST_PP_ENUM_PARAMS(OPERATOR_ARGS,a));
+            return Function::operator()(arg);
+        }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+        inline typename Function::template result<arg_vector_t>::type 
+        operator()(BOOST_PP_ENUM(OPERATOR_ARGS,M,arg_vector_t)) 
+        {
+            arg_vector_t arg(BOOST_PP_ENUM_PARAMS(OPERATOR_ARGS,a));
+            return Function::operator()(arg);
+        }
+#endif
+
+#endif
+
+#undef M
+
+    }; 
+#undef CONSTRUCTOR_ARGS
+#undef OPERATOR_ARGS
+
+#endif // defined(BOOST_PP_IS_ITERATING)
+#endif
+
Modified: sandbox/SOC/2007/signals/boost/signal_network/filter.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/filter.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/filter.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -11,6 +11,8 @@
 #include <boost/bind.hpp>
 #include <boost/signal_network/base.hpp>
 #include <boost/type_traits/is_base_of.hpp>
+#include <boost/fusion/functional/adapter/fused.hpp>
+#include <boost/fusion/sequence/conversion/as_vector.hpp>
 
 SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
 
@@ -45,6 +47,19 @@
         signal_type out;
 }; // class filter
 
+template<typename Signature>
+class fused_filter : public filter<Signature>
+{
+public:
+    fused_filter() : fused_out(filter<Signature>::out) {}
+
+protected:
+    typedef boost::function_types::parameter_types<Signature> parameter_types;
+    typedef typename boost::fusion::result_of::as_vector<parameter_types >::type parameter_vector;
+
+    boost::fusion::fused<typename filter<Signature>::signal_type const &> fused_out;
+}; // class filter
+
 SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
 
 #endif // SIGNAL_NETWORK_FILTER_HPP
Modified: sandbox/SOC/2007/signals/boost/signal_network/function.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/function.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/function.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -11,10 +11,38 @@
 #include <boost/signal_network/filter.hpp>
 #include <boost/signal_network/detail/defines.hpp>
 #include <boost/function.hpp>
+#include <boost/signal_network/detail/unfused_inherited.hpp>
+#include <boost/mpl/vector.hpp>
 
-#define SIGNAL_NETWORK_TEMPLATE_CLASS function
-#define SIGNAL_NETWORK_TEMPLATE_BASE filter<void (typename boost::function_traits<Signature>::result_type)>
-#define SIGNAL_NETWORK_TEMPLATE_NO_RETURNS
-#include <boost/signal_network/detail/loader.hpp>
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+template<typename Signature>
+class function : public filter<void (typename boost::function_traits<Signature>::result_type)>
+{
+    typedef boost::function_types::parameter_types<Signature> ParTypes;
+public:
+    typedef boost::fusion::unfused_inherited<function<Signature>,
+        typename mpl::vector<boost::function<Signature> >::type,
+        typename boost::function_types::parameter_types<Signature> > unfused;
+
+    function(boost::function<Signature> f) :
+      func(f),
+      fused_func(boost::fusion::fused<boost::function<Signature> const &>(func)) {}
+    template <class Seq>
+    struct result
+    {
+        typedef void type;
+    };
+    template <class Seq>
+    void operator()(const Seq &vec_par)
+    {
+        out(fused_func(vec_par));
+    }
+protected:
+   	boost::function<Signature> func;
+    boost::fusion::fused<boost::function<Signature> const &> fused_func;
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
 
 #endif // SIGNAL_NETWORK_FUNCTION_HPP
\ No newline at end of file
Modified: sandbox/SOC/2007/signals/boost/signal_network/junction.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/junction.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/junction.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -1,5 +1,3 @@
-// junction.hpp
-
 // 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
@@ -12,9 +10,41 @@
 #include <boost/signal_network/detail/defines.hpp>
 #include <boost/utility/enable_if.hpp>
 #include <boost/type_traits.hpp>
+#include <boost/signal_network/detail/unfused_inherited.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/fusion/sequence/adapted/mpl.hpp>
+
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+template<typename Signature>
+class junction : public fused_filter<Signature>
+{
+public:
+    typedef boost::fusion::unfused_inherited<junction<Signature>,
+        typename mpl::vector<>::type,
+        typename boost::function_types::parameter_types<Signature> > unfused;
+
+    junction() : enabled(true) {}
+    void enable() {enabled = true;}
+    void disable() {enabled = false;}
+
+    template <class Seq>
+    struct result
+    {
+        typedef typename boost::function_traits<Signature>::result_type type;
+    };
+
+    typename boost::function_traits<Signature>::result_type 
+    operator()(const typename fused_filter<Signature>::parameter_vector &vec_par)
+    {
+    	if (enabled)
+             return static_cast<typename boost::function_traits<Signature>::result_type>
+                 (fused_out(vec_par));
+    }
+private:
+    volatile bool enabled;
+};
 
-#define SIGNAL_NETWORK_TEMPLATE_CLASS junction
-#define SIGNAL_NETWORK_TEMPLATE_BASE filter<Signature>
-#include <boost/signal_network/detail/loader.hpp>
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
 
-#endif
+#endif
\ No newline at end of file
Modified: sandbox/SOC/2007/signals/boost/signal_network/mutex.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/mutex.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/mutex.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -11,9 +11,36 @@
 #include <boost/signal_network/filter.hpp>
 #include <boost/signal_network/detail/defines.hpp>
 #include <boost/thread/mutex.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/fusion/sequence/adapted/mpl.hpp>
+#include <boost/signal_network/detail/unfused_inherited.hpp>
 
-#define SIGNAL_NETWORK_TEMPLATE_CLASS mutex
-#define SIGNAL_NETWORK_TEMPLATE_BASE filter<Signature>
-#include <boost/signal_network/detail/loader.hpp>
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+template<typename Signature>
+class mutex : public fused_filter<Signature>
+{
+public:
+    typedef boost::fusion::unfused_inherited<mutex<Signature>,
+        typename mpl::vector<>::type,
+        typename boost::function_types::parameter_types<Signature> > unfused;
+
+    template <class Seq>
+    struct result
+    {
+        typedef typename boost::function_traits<Signature>::result_type type;
+    };
+    typename boost::function_traits<Signature>::result_type 
+    operator()(const typename fused_filter<Signature>::parameter_vector &vec_par)
+    {
+		boost::mutex::scoped_lock lock(mutex_);
+        return static_cast<typename boost::function_traits<Signature>::result_type>
+                 (fused_out(vec_par));
+    }
+	private:
+		boost::mutex mutex_;
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
 
 #endif // SIGNAL_NETWORK_MUTEX_HPP
Modified: sandbox/SOC/2007/signals/boost/signal_network/selector.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/selector.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/selector.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -11,19 +11,33 @@
 #include <boost/signal_network/filter.hpp>
 #include <boost/signal_network/detail/defines.hpp>
 
-#define SIGNAL_NETWORK_SELECTOR_INPUT(z,n,_arity) \
-	SIGNAL_NETWORK_FUNCTION(input##n, Signature, _arity) \
-	{ \
-		if (selected == n) \
-			SIGNAL_NETWORK_TEMPLATE_BASE::out(SIGNAL_NETWORK_ARG_NAMES(_arity)); \
-	} \
-	slot_selector_t<selector_impl<_inputs, Signature, _arity>, Signature> slot##n () \
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+/*
+template<typename Signature>
+class selector : public fused_filter<Signature>
+{
+	selector() : selected(0) {}
+	void select(int source) {selected = source;}
+	
+    template <class Seq>
+    struct result
+    {
+        typedef typename boost::function_traits<Signature>::result_type type;
+    };
+    typename boost::function_traits<Signature>::result_type 
+    operator()(const VecPar &vec_par)
+    {
+    	if (selected == n)
+             return static_cast<typename boost::function_traits<Signature>::result_type>
+                 (fused_out(vec_par));
+    }
+    template<int N>
+    slot_selector_t<selector<Signature>, Signature> slot()
         {return slot_selector<Signature>(*this, &selector_impl<_inputs, Signature, _arity>::input##n);}
-
-#define SIGNAL_NETWORK_TEMPLATE_CLASS selector
-#define SIGNAL_NETWORK_TEMPLATE_BASE filter<Signature>
-#define SIGNAL_NETWORK_TEMPLATE_ITERATE2
-
-#include <boost/signal_network/detail/loader.hpp>
+private:
+	volatile int selected;
+};
+*/
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
 
 #endif // SIGNAL_NETWORK_SELECTOR_HPP
Modified: sandbox/SOC/2007/signals/boost/signal_network/socket_receiver.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/socket_receiver.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/socket_receiver.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -12,13 +12,41 @@
 #include <sstream>
 #include <boost/asio.hpp>
 #include <boost/archive/binary_iarchive.hpp>
+#include <boost/lambda/lambda.hpp>
+#include <boost/fusion/algorithm/iteration/for_each.hpp>
+#include <boost/signal_network/detail/serialize_fusion_vector.hpp>
 
-#define SIGNAL_NETWORK_SOCKET_UNPACK(z,n,text) archive & storage<Signature>::arg##n##_value;
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
 
-#define SIGNAL_NETWORK_TEMPLATE_CLASS socket_receiver
-#define SIGNAL_NETWORK_TEMPLATE_BASE storage<Signature>
-#include <boost/signal_network/detail/loader.hpp>
+template<typename Signature>
+class socket_receiver : public storage<Signature>
+{
+public:
+    typedef boost::fusion::unfused_typed_class<socket_receiver<Signature>,
+        typename boost::function_types::parameter_types<Signature> > unfused;
+
+	socket_receiver(asio::ip::tcp::socket &socket) :
+		socket_(socket),
+		stream(std::ios::in | std::ios::out | std::ios::binary) {}
+	void operator()()
+	{
+		int received_size = socket_.receive(asio::buffer(buffer, bufferSize));
+		stream.str(empty_string);
+		stream.write((char *)buffer, received_size);
+		boost::archive::binary_iarchive archive(stream);
+        archive & storage::stored;
+		storage<Signature>::operator()();
+	}
+
+private:
+	asio::ip::tcp::socket &socket_;
+	std::stringstream stream;
+	std::string empty_string;
+	boost::archive::binary_iarchive *archive;
+	enum { bufferSize = 20000 };
+	unsigned char buffer[bufferSize];
+};
 
-#undef SIGNAL_NETWORK_SOCKET_UNPACK
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
 
 #endif
\ No newline at end of file
Modified: sandbox/SOC/2007/signals/boost/signal_network/socket_sender.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/socket_sender.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/socket_sender.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -8,16 +8,61 @@
 #ifndef SIGNAL_NETWORK_SOCKET_SENDER_HPP
 #define SIGNAL_NETWORK_SOCKET_SENDER_HPP
 
+#include <boost/mpl/vector.hpp>
 #include <boost/signal_network/filter.hpp>
 #include <boost/asio.hpp>
 #include <boost/archive/binary_oarchive.hpp>
 #include <sstream>
+#include <boost/signal_network/detail/unfused_inherited.hpp>
+#include <boost/signal_network/detail/serialize_fusion_vector.hpp>
 
-#define SIGNAL_NETWORK_SOCKET_PACK(z,n,text) archive & arg##n;
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+template<typename Signature>
+class socket_sender
+{
+public:
+    typedef boost::fusion::unfused_inherited<socket_sender<Signature>,
+        typename mpl::vector<asio::ip::tcp::socket &>::type,
+        typename boost::function_types::parameter_types<Signature> > unfused;
+
+    typedef boost::function_types::parameter_types<Signature> ParTypes;
 
-#define SIGNAL_NETWORK_TEMPLATE_CLASS socket_sender
-#include <boost/signal_network/detail/loader.hpp>
+    socket_sender(asio::ip::tcp::socket & socket) :
+        socket(& socket),
+		stream(std::ios::in | std::ios::out | std::ios::binary)
+    { }
+    socket_sender() :
+        socket(NULL),
+		stream(std::ios::in | std::ios::out | std::ios::binary)
+    { }
+    virtual ~socket_sender()
+    {
+    }
 
-#undef SIGNAL_NETWORK_SOCKET_PACK
+    template<class Seq>
+    struct result
+    { 
+        typedef void type;
+    };
+    template <class Seq>
+    void operator()(const Seq &vec_par)
+    {
+        if (socket)
+        {
+    		boost::archive::binary_oarchive archive (stream);
+            archive & vec_par;
+    		boost::asio::write(*socket, asio::buffer(stream.str()),
+        		boost::asio::transfer_all());
+    		stream.str(empty_string);
+        }
+    }
+private:
+	asio::ip::tcp::socket *socket;
+	std::stringstream stream;
+	std::string empty_string;
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
 
 #endif
Modified: sandbox/SOC/2007/signals/boost/signal_network/storage.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/storage.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/storage.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -13,6 +13,16 @@
 #include <boost/type_traits.hpp>
 #include <boost/call_traits.hpp>
 
+#include <boost/function_types/parameter_types.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/mpl/transform.hpp>
+#include <boost/fusion/sequence/intrinsic/at.hpp>
+#include <boost/fusion/sequence/adapted/mpl.hpp>
+#include <boost/fusion/functional/adapter/fused.hpp>
+
+#include <boost/signal_network/detail/unfused_typed_class.hpp>
+
 SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
 
 namespace detail {
@@ -22,46 +32,71 @@
 struct storable : public boost::remove_const<typename boost::remove_reference<T>::type > {};
 
 }
-SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
 
-#define SIGNAL_NETWORK_ARGVAR_TYPEDEF(z,n,text) typedef typename boost::signal_network::signet::detail::storable<typename boost::function_traits<Signature>::arg##n##_type>::type arg##n##_value_type;
-#define SIGNAL_NETWORK_ARGVAR_TYPEDEFS(n) BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(n,1),SIGNAL_NETWORK_ARGVAR_TYPEDEF,_)
+template<typename Signature>
+class storage : public boost::signal_network::signet::filter<Signature>
+{
+public:
+    typedef boost::signal_network::signet::filter<Signature> base_type;
+
+    typedef boost::function_types::parameter_types<Signature> ParTypes;
+    typedef typename boost::mpl::transform<
+        typename boost::mpl::transform<ParTypes, boost::remove_reference<boost::mpl::_> >::type,
+        boost::remove_const<boost::mpl::_> >::type StorableTypes;
+    typedef typename boost::fusion::result_of::as_vector<StorableTypes >::type VecStorable;
+
+    typedef boost::fusion::unfused_typed_class<storage<Signature>,
+        typename boost::function_types::parameter_types<Signature> > unfused;
+
+    storage(const VecStorable &vec_par) : fused_out(out), stored(vec_par) {}
+    storage() : fused_out(out) {}
+
+    template<class Seq>
+    struct result
+    { 
+        typedef void type;
+    };
+
+    void operator()()
+    {
+        fused_out(stored);
+    }
+    template <class Seq>
+    void operator()(const Seq &vec_par)
+    {
+        stored = vec_par;
+    }
+    const VecStorable &value()
+    {
+        return stored;
+    }
+    template<int N>
+    typename boost::fusion::result_of::at_c<VecStorable, N>::type value_()
+    {
+        return boost::fusion::at_c<N>(stored);
+    }
+    template<int N>
+    typename boost::mpl::at_c<ParTypes, N>::type value_exact()
+    {
+        return boost::fusion::at_c<N>(stored);
+    }
+    template<int N>
+   	slot_selector_t<storage<Signature>,// typename boost::call_traits<
+        typename boost::mpl::at_c<ParTypes, N>::type ()
+        >//::param_type ()>
+    slot()
+	{
+        return boost::signal_network::slot_selector<//typename boost::call_traits<
+            typename boost::mpl::at_c<ParTypes, N>::type
+         ()>(*this, &storage<Signature>::value_exact<N>);
+    }
+
+protected:
+    VecStorable stored;
+    boost::fusion::fused<typename base_type::signal_type const &> fused_out;
+};
 
-#define SIGNAL_NETWORK_ARGVAR(z,n,text) arg##n##_value_type arg##n##_value;
-#define SIGNAL_NETWORK_ARGVARS(n) BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(n,1),SIGNAL_NETWORK_ARGVAR,_)
-
-#define SIGNAL_NETWORK_ARGVAR_TYPENAME(n,text) typename boost::call_traits<text arg##n##_value_type>::param_type arg##n##_value
-#define SIGNAL_NETWORK_ARGVAR_TYPENAME_COMMA(z,n,text) SIGNAL_NETWORK_ARGVAR_TYPENAME(n,text) BOOST_PP_COMMA()
-#define SIGNAL_NETWORK_ARGVAR_TYPENAMES(n,text) BOOST_PP_REPEAT_FROM_TO(1,n,SIGNAL_NETWORK_ARGVAR_TYPENAME_COMMA,text) BOOST_PP_IF(n,SIGNAL_NETWORK_ARGVAR_TYPENAME(n,text),BOOST_PP_EMPTY())
-
-#define SIGNAL_NETWORK_ARGVAR_NAME(n) arg##n##_value
-#define SIGNAL_NETWORK_ARGVAR_NAME_COMMA(z,n,text) SIGNAL_NETWORK_ARGVAR_NAME(n) BOOST_PP_COMMA()
-#define SIGNAL_NETWORK_ARGVAR_NAMES(n) BOOST_PP_REPEAT_FROM_TO(1,n,SIGNAL_NETWORK_ARGVAR_NAME_COMMA,_) BOOST_PP_IF(n,SIGNAL_NETWORK_ARGVAR_NAME(n),BOOST_PP_EMPTY())
-
-#define SIGNAL_NETWORK_SET_ARGVAR(z,n,text) this->arg##n##_value = arg##n##_value;
-//#define SIGNAL_NETWORK_SET_ARGVAR_COMMA(z,n,text) SIGNAL_NETWORK_SET_ARGVAR(n) BOOST_PP_COMMA()
-//#define SIGNAL_NETWORK_SET_ARGVARS(n) BOOST_PP_REPEAT_FROM_TO(1,n,SIGNAL_NETWORK_SET_ARGVAR_COMMA,_) BOOST_PP_IF(n,SIGNAL_NETWORK_SET_ARGVAR(n),BOOST_PP_EMPTY())
-#define SIGNAL_NETWORK_SET_ARGVARS(n) BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_INC(n),SIGNAL_NETWORK_SET_ARGVAR,_)
-
-#define SIGNAL_NETWORK_RETURN_STORED(z,n,text) \
-	typename boost::call_traits<arg##n##_value_type>::param_type value##n() {return arg##n##_value;} \
-	slot_selector_t<storage_impl<Signature, SIGNAL_NETWORK_TEMPLATE_ARITY>, typename boost::call_traits<arg##n##_value_type>::param_type ()> slot##n () \
-	{return slot_selector<typename boost::call_traits<arg##n##_value_type>::param_type ()>(*this, &storage_impl<Signature, SIGNAL_NETWORK_TEMPLATE_ARITY>::value##n);} \
-	arg##n##_value_type value_exact##n() {return arg##n##_value;} \
-	slot_selector_t<storage_impl<Signature, SIGNAL_NETWORK_TEMPLATE_ARITY>, arg##n##_value_type ()> slot_exact##n () \
-	{return slot_selector<arg##n##_value_type ()>(*this, &storage_impl<Signature, SIGNAL_NETWORK_TEMPLATE_ARITY>::value_exact##n);}
-
-
-#define SIGNAL_NETWORK_STORAGE_SIGNAL() \
-void operator()(SIGNAL_NETWORK_ARGVAR_TYPENAMES(SIGNAL_NETWORK_TEMPLATE_ARITY,BOOST_PP_EMPTY())) \
-{ \
-	SIGNAL_NETWORK_SET_ARGVARS(SIGNAL_NETWORK_TEMPLATE_ARITY) \
-}
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
 
-#define SIGNAL_NETWORK_TEMPLATE_CLASS storage
-#define SIGNAL_NETWORK_TEMPLATE_BASE filter<Signature>
-#define SIGNAL_NETWORK_TEMPLATE_ITERATE_MAIN_CLASS
-#include <boost/signal_network/detail/loader.hpp>
 
-#undef SIGNAL_NETWORK_STORAGE_SIGNAL
 #endif // SIGNAL_NETWORK_GENERATOR_HPP
\ No newline at end of file
Modified: sandbox/SOC/2007/signals/boost/signal_network/timed_generator.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/timed_generator.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/timed_generator.hpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -21,7 +21,7 @@
 
 */
 template<class Signature>
-class timed_generator : public storage<Signature>
+class timed_generator : public storage<Signature>::unfused
 {
 public:
         /// Default constructor.  Starts the thread, but signals won't be sent until the enable() function is called.
Modified: sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/build.vcproj
==============================================================================
--- sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/build.vcproj	(original)
+++ sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/build.vcproj	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -69,10 +69,6 @@
 				>
                         </File>
                         <File
-				RelativePath="..\..\..\..\boost\signal_network\collector.hpp"
-				>
-			</File>
-			<File
                                 RelativePath="..\..\..\..\boost\signal_network\filter.hpp"
 				>
                         </File>
@@ -116,10 +112,6 @@
                                 Name="detail"
 				>
                                 <File
-					RelativePath="..\..\..\..\boost\signal_network\detail\chain_template.hpp"
-					>
-				</File>
-				<File
                                         RelativePath="..\..\..\..\boost\signal_network\detail\connect_slot_template.hpp"
 					>
                                 </File>
@@ -132,14 +124,6 @@
 					>
                                 </File>
                                 <File
-					RelativePath="..\..\..\..\boost\signal_network\detail\function_template.hpp"
-					>
-				</File>
-				<File
-					RelativePath="..\..\..\..\boost\signal_network\detail\junction_template.hpp"
-					>
-				</File>
-				<File
                                         RelativePath="..\..\..\..\boost\signal_network\detail\loader.hpp"
 					>
                                 </File>
@@ -148,11 +132,7 @@
 					>
                                 </File>
                                 <File
-					RelativePath="..\..\..\..\boost\signal_network\detail\mutex_template.hpp"
-					>
-				</File>
-				<File
-					RelativePath="..\..\..\..\boost\signal_network\detail\selector_template.hpp"
+					RelativePath="..\..\..\..\boost\signal_network\detail\serialize_fusion_vector.hpp"
 					>
                                 </File>
                                 <File
@@ -160,23 +140,23 @@
 					>
                                 </File>
                                 <File
-					RelativePath="..\..\..\..\boost\signal_network\detail\socket_receiver_template.hpp"
+					RelativePath="..\..\..\..\boost\signal_network\detail\template_loader.hpp"
 					>
                                 </File>
                                 <File
-					RelativePath="..\..\..\..\boost\signal_network\detail\socket_sender_template.hpp"
+					RelativePath="..\..\..\..\boost\signal_network\detail\template_loader2.hpp"
 					>
                                 </File>
                                 <File
-					RelativePath="..\..\..\..\boost\signal_network\detail\storage_template.hpp"
+					RelativePath="..\..\..\..\boost\signal_network\detail\unfused_inherited.hpp"
 					>
                                 </File>
                                 <File
-					RelativePath="..\..\..\..\boost\signal_network\detail\template_loader.hpp"
+					RelativePath="..\..\..\..\boost\signal_network\detail\unfused_typed_class.hpp"
 					>
                                 </File>
                                 <File
-					RelativePath="..\..\..\..\boost\signal_network\detail\template_loader2.hpp"
+					RelativePath="..\..\..\..\boost\signal_network\detail\unfused_typed_class2.hpp"
 					>
                                 </File>
                         </Filter>
Modified: sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/example.vcproj
==============================================================================
--- sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/example.vcproj	(original)
+++ sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/example.vcproj	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -28,7 +28,7 @@
                                 CleanCommandLine="bjam --v2 --clean ../../$(ProjectName) $(ConfigurationName)"
                                 Output="$(OutDir)\example.exe"
                                 PreprocessorDefinitions=""
-				IncludeSearchPath="..\../example"
+				IncludeSearchPath="../../../"
                                 ForcedIncludes=""
                                 AssemblySearchPath=""
                                 ForcedUsingAssemblies=""
@@ -48,7 +48,7 @@
                                 CleanCommandLine="bjam --v2 --clean ../../$(ProjectName) $(ConfigurationName)"
                                 Output="$(OutDir)\example.exe"
                                 PreprocessorDefinitions=""
-				IncludeSearchPath=""
+				IncludeSearchPath="../../../../"
                                 ForcedIncludes=""
                                 AssemblySearchPath=""
                                 ForcedUsingAssemblies=""
Modified: sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/test.vcproj
==============================================================================
--- sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/test.vcproj	(original)
+++ sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/test.vcproj	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -66,6 +66,34 @@
                                 RelativePath="..\..\test\test.cpp"
 				>
                         </File>
+			<File
+				RelativePath="..\..\test\test_chain.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\test\test_counter.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\test\test_function.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\test\test_junction.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\test\test_mutex.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\test\test_socket.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\test\test_storage.cpp"
+				>
+			</File>
                 </Filter>
                 <File
                         RelativePath="..\..\test\Jamfile.v2"
Modified: sandbox/SOC/2007/signals/libs/signal_network/example/example.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/signal_network/example/example.cpp	(original)
+++ sandbox/SOC/2007/signals/libs/signal_network/example/example.cpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -6,6 +6,8 @@
 // http://www.boost.org/LICENSE_1_0.txt)
 
 #define _CRT_SECURE_NO_DEPRECATE 1
+#include <boost/fusion/sequence/generation/make_vector.hpp>
+
 
 #include <boost/test/unit_test.hpp>
 using boost::unit_test::test_suite;
@@ -115,29 +117,29 @@
 void simple_test()
 {
         // instantiate all of the components we need
-	signet::storage<void ()> banger;
-	signet::storage<void (float)> floater(2.5f);
-	signet::storage<void (float)> collector(0.0f);
+    signet::storage<void ()>::unfused banger;
+	signet::storage<void (float)>::unfused floater(2.5f);
+	signet::storage<void (float)>::unfused collector(0.0f);
 
         // create the network
         banger >>= floater >>= collector;
 
         banger(); // signal from banger will now cause floater to output 2.5
-	BOOST_CHECK(collector.value1() == 2.5f);
+	BOOST_CHECK(collector.value_<0>() == 2.5f);
 
         floater(1.5f); // change the value in floater
         floater(); // we can also signal floater directly
-	BOOST_CHECK(collector.value1() == 1.5f);
+	BOOST_CHECK(collector.value_<0>() == 1.5f);
 } // end void simple_test()
 
 void branching_test()
 {
-	signet::storage<void ()> banger;
+    signet::storage<void ()>::unfused banger;
         SignalVoidCounter counter;
-	signet::storage<void (float)> floater;
+    signet::storage<void (float)>::unfused floater;
         floater(2.5f);
 
-	signet::storage<void (float)> collector(0.0f);
+    signet::storage<void (float)>::unfused collector(0.0f);
         
         banger
                 | (floater >>= collector) // floater connects to collector, banger to floater
@@ -145,17 +147,17 @@
                 
         banger();
         BOOST_CHECK(counter.GetCount() == 1);
-	BOOST_CHECK(collector.value1() == 2.5f);
+	BOOST_CHECK(collector.value_<0>() == 2.5f);
 } // end void branching_test()
 
 void disconnect_test()
 {
-	signet::storage<void ()> banger;
+    signet::storage<void ()>::unfused banger;
         {
                 SignalVoidCounter counter;
-		signet::storage<void (float)> floater;
+        signet::storage<void (float)>::unfused floater;
                 floater(2.5f);
-		signet::storage<void (float)> collector(0.0f);
+        signet::storage<void (float)>::unfused collector(0.0f);
 
                 banger
                         | counter
@@ -163,7 +165,7 @@
 
                 banger();
                 BOOST_CHECK(counter.GetCount() == 1);
-		BOOST_CHECK(collector.value1() == 2.5f);
+		BOOST_CHECK(collector.value_<0>() == 2.5f);
         } // counter, floater, and collector are now destroyed and disconnected with Boost.Signals
 #ifdef SIGNAL_NETWORK_THREAD_SAFE
         // if Signal Network has detected thread safe signals, we need to
@@ -184,10 +186,10 @@
 
 void multi_type_test()
 {
-	signet::storage<void ()> banger;
-	signet::storage<void (int)> inter;
+    signet::storage<void ()>::unfused banger;
+	signet::storage<void (int)>::unfused inter;
         inter(2);
-	signet::storage<void (float)> floater;
+	signet::storage<void (float)>::unfused floater;
         floater(3.3f);
         SignalIntFloatCollector collector;
 
@@ -239,8 +241,8 @@
 
 void multi_num_args_test()
 {
-	signet::storage<void ()> banger;
-	signet::storage<void (float)> floater;
+	signet::storage<void ()>::unfused banger;
+	signet::storage<void (float)>::unfused floater;
         floater(2.5f);
         SignalFloatDuplicator duplicator;
         SignalMultiCollector collector;
@@ -260,16 +262,16 @@
 } // end void multi_num_args_test()
 
 
-class SignalMultiInheritedCollector : public signet::storage<void (float)>, public SignalVoidCounter, public SignalFloat2Collector
+class SignalMultiInheritedCollector : public signet::storage<void (float)>::unfused, public SignalVoidCounter, public SignalFloat2Collector
 {
 public:
-	SignalMultiInheritedCollector() : signet::storage<void (float)>(0) {}
+    SignalMultiInheritedCollector() : signet::storage<void (float)>::unfused(0) {}
 };
 
 void multi_num_args_inherited_test()
 {
-	signet::storage<void ()> banger;
-	signet::storage<void (float)> floater;
+	signet::storage<void ()>::unfused banger;
+	signet::storage<void (float)>::unfused floater;
         floater(2.5f);
         SignalFloatDuplicator duplicator;
         SignalMultiInheritedCollector collector;
@@ -278,12 +280,12 @@
                 | (SignalVoidCounter &) collector
                 |
                 (floater
-			| (signet::storage<void (float)> &) collector
+			| (signet::storage<void (float)>::unfused &) collector
                         | (duplicator >>= (SignalFloat2Collector &) collector));
 
         banger();
         BOOST_CHECK(collector.GetCount() == 1);
-	BOOST_CHECK(collector.value1() == 2.5f); // calls the collector<float>'s operator()
+	BOOST_CHECK(collector.value_<0>() == 2.5f); // calls the collector<float>'s operator()
         BOOST_CHECK(collector.GetLast1() == optional<float>(2.5f));
         BOOST_CHECK(collector.GetLast2() == optional<float>(2.5f));
 } // end void multi_num_args_inherited_test()
@@ -344,7 +346,7 @@
 
 void multi_in_test()
 {
-	signet::storage<void ()> banger;
+	signet::storage<void ()>::unfused banger;
         Signal2VoidCounter counter;
         
         banger
@@ -367,9 +369,9 @@
 
 void junction_test()
 {
-	signet::storage<void ()> banger1, banger2;
+	signet::storage<void ()>::unfused banger1, banger2;
         SignalVoidCounter counter1, counter2;
-	signet::junction<void ()> junction;
+    signet::junction<void ()>::unfused junction;
         
         banger1 >>= junction >>= counter1;
         banger2 >>= junction >>= counter2;
@@ -397,11 +399,11 @@
 
 void selector_test()
 {
-	signet::storage<void ()> banger;
-	signet::storage<void (float)> floater1, floater2;
+/*	signet::storage<void ()>::unfused banger;
+	signet::storage<void (float)>::unfused floater1, floater2;
         floater1(1.0f);
         floater2(2.0f);
-	signet::storage<void (float)> collector(0.0f);
+	signet::storage<void (float)>::unfused collector(0.0f);
         signet::selector<2, void (float)> selector;
 
         banger >>= floater1 >>= selector.slot1();
@@ -410,15 +412,15 @@
 
         selector.select(0);
         banger();
-	BOOST_CHECK(collector.value1() == 0.0f);
+	BOOST_CHECK(collector.value_<0>() == 0.0f);
 
         selector.select(1);
         banger();
-	BOOST_CHECK(collector.value1() == 1.0f);
+	BOOST_CHECK(collector.value_<0>() == 1.0f);
 
         selector.select(2);
         banger();
-	BOOST_CHECK(collector.value1() == 2.0f);
+	BOOST_CHECK(collector.value_<0>() == 2.0f);*/
 } // end void selector_test()
 
 #include <iostream>
@@ -436,7 +438,7 @@
 {
         signet::timed_generator<void ()> banger1;
         signet::timed_generator<void ()> banger2;
-	signet::mutex<void ()> lock;
+    signet::mutex<void ()>::unfused lock;
         SignalVoidCounter counter;
         ticker tick;
 
@@ -461,13 +463,13 @@
 void filter_test()
 {
         DoublerClass doubler1, doubler2;
-	signet::storage<void (float)> floater(1.0f);
-	signet::storage<void (float)> collector(0.0f);
+	signet::storage<void (float)>::unfused floater(1.0f);
+	signet::storage<void (float)>::unfused collector(0.0f);
 
         floater >>= doubler1 >>= doubler2 >>= collector;
         floater();
 
-	BOOST_CHECK(collector.value1() == 4.0f);
+	BOOST_CHECK(collector.value_<0>() == 4.0f);
 } // end void filter_test()
 
 float DoublerFunc(float  x)
@@ -477,27 +479,27 @@
 
 void function_test()
 {
-	signet::function<float(float)> double_fun1(&DoublerFunc);
-	signet::function<float(float)> double_fun2(&DoublerFunc);
-	signet::storage<void (float)> floater(1.0f);
-	signet::storage<void (float)> collector(0.0f);
+    signet::function<float(float)>::unfused double_fun1(&DoublerFunc);
+    signet::function<float(float)>::unfused double_fun2(&DoublerFunc);
+	signet::storage<void (float)>::unfused floater(1.0f);
+	signet::storage<void (float)>::unfused collector(0.0f);
 
         floater >>= double_fun1 >>= double_fun2 >>= collector;
         floater();
 
-	BOOST_CHECK(collector.value1() == 4.0f);
+	BOOST_CHECK(collector.value_<0>() == 4.0f);
 } // end void function_test()
 
 void chain_test()
 {
-	signet::chain<DoublerClass, void(float)> doubling_chain(4);
-	signet::storage<void (float)> floater(1.0f);
-	signet::storage<void (float)> collector(0.0f);
+    signet::chain<DoublerClass, void(float)>::unfused doubling_chain(4, NULL);
+	signet::storage<void (float)>::unfused floater(1.0f);
+	signet::storage<void (float)>::unfused collector(0.0f);
 
         floater >>= doubling_chain >>= collector;
         floater();
 
-	BOOST_CHECK(collector.value1() == 16.0f);
+	BOOST_CHECK(collector.value_<0>() == 16.0f);
 } // end void chain_test
 
 class PullDoubler : public signet::filter<float ()>
@@ -511,10 +513,10 @@
 
 void pull_test()
 {
-	signet::storage<void(float)> generator(1.0f);
+	signet::storage<void(float)>::unfused generator(1.0f);
         PullDoubler doubler;
 
-	doubler >>= generator.slot_exact1();
+	doubler >>= generator.slot<0>();
 
         BOOST_CHECK(doubler() == 2.0f);
 } // end void pull_test
@@ -540,9 +542,9 @@
         acceptor.accept(socket);
 
         // instantiate the components - a float generator, a filter that adds 2, and a sender
-	signet::storage<void (float)> generator(1.0f);
-	signet::function<float(float)> add2(boost::bind(std::plus<float>(), _1, 2.0f));
-	signet::socket_sender<void (float)> sender(socket);
+	signet::storage<void (float)>::unfused generator(1.0f);
+    signet::function<float(float)>::unfused add2(boost::bind(std::plus<float>(), _1, 2.0f));
+    signet::socket_sender<void (float)>::unfused sender(socket);
 
         // create the network
         generator >>= add2 >>= sender;
@@ -565,8 +567,8 @@
         socket.connect(endpoint_recv);
 
         // instatiate the components
-	signet::socket_receiver<void (float)> receiver(socket);
-	signet::storage<void (float)> collector(0.0f);
+    signet::socket_receiver<void (float)> receiver(socket);
+	signet::storage<void (float)>::unfused collector(0.0f);
 
         // set up the network
         receiver >>= collector;
@@ -574,13 +576,29 @@
         // this receiver is synchronous - we have to tell it to receive a signal
         receiver();
 
-	BOOST_CHECK(collector.value1() == 3.0f);
+	BOOST_CHECK(collector.value_<0>() == 3.0f);
 
         t.join();
 } // end void asio_test
 
 test_suite* init_unit_test_suite(int argc, char* argv[])
 {
+    signet::storage<void (int, int)> s;
+    boost::fusion::vector<int, int> val(4, 5);
+    s(val);
+    std::cout << s.value_<0>() << s.value_<1>() << std::endl;
+    signet::storage<void (int, int) >::unfused s2;
+
+    s >>= s2;
+    s();
+    std::cout << s2.value_<0>() << s2.value_<1>() << std::endl;
+
+    signet::storage<void (int, int) >::unfused s3(5, 6);
+    std::cout << s3.value_<0>() << s3.value_<1>() << std::endl;
+    s3(7, 8);
+    std::cout << s3.value_<0>() << s3.value_<1>() << std::endl;
+
+
     test_suite* test = BOOST_TEST_SUITE( "Utility test suite" );
 
         test->add(BOOST_TEST_CASE(&simple_test));
Modified: sandbox/SOC/2007/signals/libs/signal_network/test/Jamfile.v2
==============================================================================
--- sandbox/SOC/2007/signals/libs/signal_network/test/Jamfile.v2	(original)
+++ sandbox/SOC/2007/signals/libs/signal_network/test/Jamfile.v2	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -3,20 +3,21 @@
 # accompanying file LICENSE_1_0.txt or copy at
 # http://www.boost.org/LICENSE_1_0.txt)
 
-
 import testing ;
 
 project
     : requirements 
       <include>../../..
-      <library>/boost/test//boost_unit_test_framework/<link>static
       <library>/boost/signals//boost_signals/<link>static
-      <library>/boost/thread//boost_thread/<link>static
       <library>/boost/system//boost_system/<link>static
-      <library>/boost/serialization//boost_serialization/<link>static
       <define>BOOST_ALL_NO_LIB=1
     ;
-    
-test-suite signal_network
-    : [ run test.cpp ]
-    ;
\ No newline at end of file
+
+run test_storage.cpp ;
+run test_counter.cpp ;
+run test_junction.cpp ;
+run test_function.cpp ;
+run test_chain.cpp ;
+run test_mutex.cpp /boost/thread//boost_thread/<link>static ;
+run test_socket.cpp /boost/serialization//boost_serialization/<link>static
+ /boost/thread//boost_thread/<link>static ;
\ No newline at end of file
Deleted: sandbox/SOC/2007/signals/libs/signal_network/test/test.cpp
==============================================================================
--- sandbox/SOC/2007/signals/libs/signal_network/test/test.cpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
+++ (empty file)
@@ -1,604 +0,0 @@
-// SignalLinkTests.cpp
-
-// 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)
-
-#define _CRT_SECURE_NO_DEPRECATE 1
-
-#include <boost/test/unit_test.hpp>
-using boost::unit_test::test_suite;
-
-#define BOOST_SIGNALS_STATIC_LINK
-#include <boost/optional.hpp>
-#include <boost/signal_network/filter.hpp>
-#include <boost/signal_network/storage.hpp>
-#include <boost/signal_network/junction.hpp>
-#include <boost/signal_network/selector.hpp>
-#include <boost/signal_network/mutex.hpp>
-#include <boost/signal_network/timed_generator.hpp>
-#include <boost/signal_network/function.hpp>
-#include <boost/signal_network/chain.hpp>
-
-#ifdef WIN32
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#define _WIN32_WINDOWS
-#endif
-#include <boost/signal_network/socket_receiver.hpp>
-#include <boost/signal_network/socket_sender.hpp>
-#undef _WIN32_WINDOWS
-
-// for access to connection operators >>= and |
-using namespace boost::signal_network;
-using namespace boost;
-
-class SignalVoidCounter
-#ifdef SIGNAL_NETWORK_TRACKABLE
-	// Two base signals implementations are supported currently
-	// (Boost.Signals by Doug Gregor and the
-	// thread_safe_signals version under implementation by Frank Mori Hess).
-	// SIGNAL_NETWORK_TRACKABLE is defined if you are using Boost.Signals
-	// - in this case, we want to make our component trackable so that
-	// it gets disconnected automatically when this object is destroyed.
-	: public boost::signals::trackable
-#endif
-{
-	volatile int cnt;
-public:
-	SignalVoidCounter() : cnt(0) {}
-	void operator()()
-	{
-		cnt++; // whenever a void() signal is received, increase the counter
-	}
-	int GetCount()
-	{
-		return cnt;
-	}
-}; // end class SignalVoidCounter
-
-class SignalIntFloatCollector
-{
-	optional<int> last_int;
-	optional<float> last_float;
-public:
-	void operator()(int x)
-	{
-		last_int = x;
-	}
-	void operator()(float x)
-	{
-		last_float = x;
-	}
-	optional<int> GetLastInt()
-	{
-		return last_int;
-	}
-	optional<float> GetLastFloat()
-	{
-		return last_float;
-	}
-}; // end class SignalIntFloatCollector
-
-class SignalFloatDoubler : public signet::filter<void (float, float)>
-{
-public:
-	void operator()(float val) {out(val, val*2);}
-};
-
-class SignalFloatDuplicator : public signet::filter<void (float, float)>
-{
-public:
-	void operator()(float val) {out(val, val);}
-};
-
-class SignalFloat2Collector
-{
-	optional<float> last1, last2;
-public:
-	void operator()(float val1, float val2)
-	{
-		last1 = val1;
-		last2 = val2;
-	}
-	optional<float> GetLast1()
-	{
-		return last1;
-	}
-	optional<float> GetLast2()
-	{
-		return last2;
-	}
-};
-
-void simple_test()
-{
-	// instantiate all of the components we need
-	signet::storage<void ()> banger;
-	signet::storage<void (float)> floater(2.5f);
-	signet::storage<void (float)> collector(0.0f);
-
-	// create the network
-	banger >>= floater >>= collector;
-
-	banger(); // signal from banger will now cause floater to output 2.5
-	BOOST_CHECK(collector.value1() == 2.5f);
-
-	floater(1.5f); // change the value in floater
-	floater(); // we can also signal floater directly
-	BOOST_CHECK(collector.value1() == 1.5f);
-} // end void simple_test()
-
-void branching_test()
-{
-	signet::storage<void ()> banger;
-	SignalVoidCounter counter;
-	signet::storage<void (float)> floater;
-	floater(2.5f);
-
-	signet::storage<void (float)> collector(0.0f);
-	
-	banger
-		| (floater >>= collector) // floater connects to collector, banger to floater
-		| counter; // and banger to counter
-		
-	banger();
-	BOOST_CHECK(counter.GetCount() == 1);
-	BOOST_CHECK(collector.value1() == 2.5f);
-} // end void branching_test()
-
-void disconnect_test()
-{
-	signet::storage<void ()> banger;
-	{
-		SignalVoidCounter counter;
-		signet::storage<void (float)> floater;
-		floater(2.5f);
-		signet::storage<void (float)> collector(0.0f);
-
-		banger
-			| counter
-			| (floater >>= collector);
-
-		banger();
-		BOOST_CHECK(counter.GetCount() == 1);
-		BOOST_CHECK(collector.value1() == 2.5f);
-	} // counter, floater, and collector are now destroyed and disconnected with Boost.Signals
-#ifdef SIGNAL_NETWORK_THREAD_SAFE
-	// if Signal Network 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(banger.default_signal().num_slots() == 0); 
-
-	SignalVoidCounter counter;
-
-	banger >>= counter;
-	banger.disconnect_all_slots();
-
-	banger();
-	BOOST_CHECK(counter.GetCount() == 0);
-} // end void disconnect_test
-
-void multi_type_test()
-{
-	signet::storage<void ()> banger;
-	signet::storage<void (int)> inter;
-	inter(2);
-	signet::storage<void (float)> floater;
-	floater(3.3f);
-	SignalIntFloatCollector collector;
-
-	banger
-		| (inter >>= collector)
-		| (floater >>= collector);
-
-	banger();
-	BOOST_CHECK(collector.GetLastInt() == optional<int>(2));
-	BOOST_CHECK(collector.GetLastFloat() == optional<float>(3.3f));
-} // end void multi_type_test()
-
-class SignalMultiCollector
-{
-	optional<float> last, last1, last2;
-	int cnt;
-public:
-	SignalMultiCollector() : cnt(0) {}
-	void operator()()
-	{
-		cnt++;
-	}
-	int GetCount()
-	{
-		return cnt;
-	}
-	void operator()(float val1, float val2)
-	{
-		last1 = val1;
-		last2 = val2;
-	}
-	optional<float> GetLast1()
-	{
-		return last1;
-	}
-	optional<float> GetLast2()
-	{
-		return last2;
-	}
-	void operator()(float x)
-	{
-		last = x;
-	}
-	optional<float> GetLast()
-	{
-		return last;
-	}
-}; // end class SignalMultiCollector
-
-void multi_num_args_test()
-{
-	signet::storage<void ()> banger;
-	signet::storage<void (float)> floater;
-	floater(2.5f);
-	SignalFloatDuplicator duplicator;
-	SignalMultiCollector collector;
-	
-	banger
-		| collector
-		|
-		(floater
-			| collector
-			| (duplicator >>= collector));
-
-	banger();
-	BOOST_CHECK(collector.GetCount() == 1);
-	BOOST_CHECK(collector.GetLast() == optional<float>(2.5f));
-	BOOST_CHECK(collector.GetLast1() == optional<float>(2.5f));
-	BOOST_CHECK(collector.GetLast2() == optional<float>(2.5f));
-} // end void multi_num_args_test()
-
-
-class SignalMultiInheritedCollector : public signet::storage<void (float)>, public SignalVoidCounter, public SignalFloat2Collector
-{
-public:
-	SignalMultiInheritedCollector() : signet::storage<void (float)>(0) {}
-};
-
-void multi_num_args_inherited_test()
-{
-	signet::storage<void ()> banger;
-	signet::storage<void (float)> floater;
-	floater(2.5f);
-	SignalFloatDuplicator duplicator;
-	SignalMultiInheritedCollector collector;
-	
-	banger
-		| (SignalVoidCounter &) collector
-		|
-		(floater
-			| (signet::storage<void (float)> &) collector
-			| (duplicator >>= (SignalFloat2Collector &) collector));
-
-	banger();
-	BOOST_CHECK(collector.GetCount() == 1);
-	BOOST_CHECK(collector.value1() == 2.5f); // calls the collector<float>'s operator()
-	BOOST_CHECK(collector.GetLast1() == optional<float>(2.5f));
-	BOOST_CHECK(collector.GetLast2() == optional<float>(2.5f));
-} // end void multi_num_args_inherited_test()
-
-class SignalOutIntFloat : public signet::filter<void (float)>
-{
-public:
-	SignalOutIntFloat(float x) : x(x) {}
-	void operator()()
-	{
-		out(x);
-		out_int((int)x);
-	}
-	boost::signal<void (int)> out_int;
-private:
-	float x;
-}; // end class SignalOutIntFloat
-
-void multi_out_test()
-{
-	SignalOutIntFloat multi_out(2.5f);
-	SignalIntFloatCollector collector;
-	
-	multi_out >>= collector;
-	multi_out.out_int >>= collector;
-	multi_out();
-	
-	BOOST_CHECK(collector.GetLastFloat() == optional<float>(2.5f));
-	BOOST_CHECK(collector.GetLastInt() == optional<int>(2));
-} // end void multi_out_test()
-
-class Signal2VoidCounter : public SignalVoidCounter
-{
-public:
-	SignalVoidCounter other;
-}; // end class Signal2VoidCounter
-
-class Signal2VoidInputs : public signet::filter<void(int)>
-{
-	int result;
-public:
-	Signal2VoidInputs() : result(0) {};
-	void operator()()
-	{
-		result++;
-		out(result);
-	}
-	void AltInput()
-	{
-		result+=10;
-		out(result);
-	}
-	int GetResult()
-	{
-		return result;
-	}
-}; // end class Signal2VoidInputs
-
-void multi_in_test()
-{
-	signet::storage<void ()> banger;
-	Signal2VoidCounter counter;
-	
-	banger
-		| counter
-		| counter.other;
-	
-	banger();
-	BOOST_CHECK(counter.GetCount() == 1);
-	BOOST_CHECK(counter.other.GetCount() == 1);
-
-	Signal2VoidInputs inputs;
-
-	banger
-		| inputs
-		| slot_selector<void ()> (inputs, &Signal2VoidInputs::AltInput);
-
-	banger();
-	BOOST_CHECK(inputs.GetResult() == 11);
-}; // end void multi_in_test
-
-void junction_test()
-{
-	signet::storage<void ()> banger1, banger2;
-	SignalVoidCounter counter1, counter2;
-	signet::junction<void ()> junction;
-	
-	banger1 >>= junction >>= counter1;
-	banger2 >>= junction >>= counter2;
-
-	banger1();
-	banger2();
-
-	BOOST_CHECK(counter1.GetCount() == 2);
-	BOOST_CHECK(counter2.GetCount() == 2);
-
-	junction.disable();
-	banger1();
-	banger2();
-
-	BOOST_CHECK(counter1.GetCount() == 2);
-	BOOST_CHECK(counter2.GetCount() == 2);
-
-	junction.enable();
-	banger1();
-	banger2();
-
-	BOOST_CHECK(counter1.GetCount() == 4);
-	BOOST_CHECK(counter2.GetCount() == 4);
-} // end void junction_test()
-
-void selector_test()
-{
-	signet::storage<void ()> banger;
-	signet::storage<void (float)> floater1, floater2;
-	floater1(1.0f);
-	floater2(2.0f);
-	signet::storage<void (float)> collector(0.0f);
-	signet::selector<2, void (float)> selector;
-
-	banger >>= floater1 >>= selector.slot1();
-	banger >>= floater2 >>= selector.slot2();
-	selector >>= collector;
-
-	selector.select(0);
-	banger();
-	BOOST_CHECK(collector.value1() == 0.0f);
-
-	selector.select(1);
-	banger();
-	BOOST_CHECK(collector.value1() == 1.0f);
-
-	selector.select(2);
-	banger();
-	BOOST_CHECK(collector.value1() == 2.0f);
-} // end void selector_test()
-
-#include <iostream>
-using namespace std;
-
-struct ticker
-{
-	void operator()()
-	{
-		cout << "tick" << endl;
-	}
-};
-
-void mutex_test()
-{
-	signet::timed_generator<void ()> banger1;
-	signet::timed_generator<void ()> banger2;
-	signet::mutex<void ()> lock;
-	SignalVoidCounter counter;
-	ticker tick;
-
-	banger1 >>= lock >>= counter;
-	banger2 >>= lock >>= tick;
-	banger1.enable(0.5, 5);
-	banger2.enable(0.5, 5);
-
-	while (counter.GetCount() < 10) {}
-
-	BOOST_CHECK(counter.GetCount() == 10);
-	banger1.join();
-	banger2.join();
-} // end void mutex_test
-
-class DoublerClass : public signet::filter<void (float)>
-{
-public:
-	void operator()(float x) {out(2*x);}
-};
-
-void filter_test()
-{
-	DoublerClass doubler1, doubler2;
-	signet::storage<void (float)> floater(1.0f);
-	signet::storage<void (float)> collector(0.0f);
-
-	floater >>= doubler1 >>= doubler2 >>= collector;
-	floater();
-
-	BOOST_CHECK(collector.value1() == 4.0f);
-} // end void filter_test()
-
-float DoublerFunc(float  x)
-{
-	return x*2;
-}
-
-void function_test()
-{
-	signet::function<float(float)> double_fun1(&DoublerFunc);
-	signet::function<float(float)> double_fun2(&DoublerFunc);
-	signet::storage<void (float)> floater(1.0f);
-	signet::storage<void (float)> collector(0.0f);
-
-	floater >>= double_fun1 >>= double_fun2 >>= collector;
-	floater();
-
-	BOOST_CHECK(collector.value1() == 4.0f);
-} // end void function_test()
-
-void chain_test()
-{
-	signet::chain<DoublerClass, void(float)> doubling_chain(4);
-	signet::storage<void (float)> floater(1.0f);
-	signet::storage<void (float)> collector(0.0f);
-
-	floater >>= doubling_chain >>= collector;
-	floater();
-
-	BOOST_CHECK(collector.value1() == 16.0f);
-} // end void chain_test
-
-class PullDoubler : public signet::filter<float ()>
-{
-public:
-	float operator()()
-	{
-		return 2*out();
-	}
-};
-
-void pull_test()
-{
-	signet::storage<void(float)> generator(1.0f);
-	PullDoubler doubler;
-
-	doubler >>= generator.slot_exact1();
-
-	BOOST_CHECK(doubler() == 2.0f);
-} // end void pull_test
-
-// asio test
-boost::mutex mutex_;
-boost::condition cond;
-asio::io_service io_service;
-
-// This function will set up an asio acceptor, and wait for a connection.
-// Once established, it will set up a signal network which will send
-// its final signal through the socket.
-void asio_server()
-{
-	// set up the socket
-	asio::ip::tcp::acceptor acceptor(io_service, asio::ip::tcp::endpoint(asio::ip::tcp::v4(), 1097));
-	asio::ip::tcp::socket socket(io_service);
-	{
-		boost::mutex::scoped_lock lock(mutex_);
-		acceptor.listen();
-		cond.notify_all();
-	}
-	acceptor.accept(socket);
-
-	// instantiate the components - a float generator, a filter that adds 2, and a sender
-	signet::storage<void (float)> generator(1.0f);
-	signet::function<float(float)> add2(boost::bind(std::plus<float>(), _1, 2.0f));
-	signet::socket_sender<void (float)> sender(socket);
-
-	// create the network
-	generator >>= add2 >>= sender;
-
-	// cause the generator to send it's stored value
-	generator();
-}
-
-// main test function
-void asio_test()
-{
-	// start the server in a separate thread
-	boost::mutex::scoped_lock lock(mutex_);
-	boost::thread t(asio_server);
-	cond.wait(lock);
-
-	// set up the socket
-	asio::ip::tcp::endpoint endpoint_recv(asio::ip::address::from_string("127.0.0.1"), 1097);
-	asio::ip::tcp::socket socket(io_service);
-	socket.connect(endpoint_recv);
-
-	// instatiate the components
-	signet::socket_receiver<void (float)> receiver(socket);
-	signet::storage<void (float)> collector(0.0f);
-
-	// set up the network
-	receiver >>= collector;
-
-	// this receiver is synchronous - we have to tell it to receive a signal
-	receiver();
-
-	BOOST_CHECK(collector.value1() == 3.0f);
-
-	t.join();
-} // end void asio_test
-
-test_suite* init_unit_test_suite(int argc, char* argv[])
-{
-    test_suite* test = BOOST_TEST_SUITE( "Utility test suite" );
-
-	test->add(BOOST_TEST_CASE(&simple_test));
-	test->add(BOOST_TEST_CASE(&branching_test));
-	test->add(BOOST_TEST_CASE(&disconnect_test));
-	test->add(BOOST_TEST_CASE(&multi_type_test));
-	test->add(BOOST_TEST_CASE(&multi_num_args_test));
-	test->add(BOOST_TEST_CASE(&multi_num_args_inherited_test));
-	test->add(BOOST_TEST_CASE(&multi_out_test));
-	test->add(BOOST_TEST_CASE(&multi_in_test));
-	test->add(BOOST_TEST_CASE(&junction_test));
-	test->add(BOOST_TEST_CASE(&selector_test));
-	test->add(BOOST_TEST_CASE(&mutex_test));
-	test->add(BOOST_TEST_CASE(&filter_test));
-	test->add(BOOST_TEST_CASE(&function_test));
-	test->add(BOOST_TEST_CASE(&chain_test));
-	test->add(BOOST_TEST_CASE(&pull_test));
-	test->add(BOOST_TEST_CASE(&asio_test));
-
-	return test;
-}
Added: sandbox/SOC/2007/signals/libs/signal_network/test/test_chain.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/test/test_chain.cpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -0,0 +1,33 @@
+// Copyright Stjepan Rajko 2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/signal_network/chain.hpp>
+#include <boost/signal_network/storage.hpp>
+
+// for access to connection operators >>= and |
+using namespace boost::signal_network;
+using namespace boost;
+
+#include <boost/test/included/test_exec_monitor.hpp>
+
+class DoublerClass : public signet::filter<void (float)>
+{
+public:
+	void operator()(float x) {out(2*x);}
+};
+
+int test_main(int, char* [])
+{
+    signet::chain<DoublerClass, void(float)>::unfused doubling_chain(4, NULL);
+	signet::storage<void (float)>::unfused floater(1.0f);
+	signet::storage<void (float)>::unfused collector(0.0f);
+
+	floater >>= doubling_chain >>= collector;
+	floater();
+
+	BOOST_CHECK(collector.value_<0>() == 16.0f);
+
+    return 0;
+} // int test_main(int, char* [])
Added: sandbox/SOC/2007/signals/libs/signal_network/test/test_counter.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/test/test_counter.cpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -0,0 +1,23 @@
+// Copyright Stjepan Rajko 2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/signal_network/counter.hpp>
+
+// for access to connection operators >>= and |
+using namespace boost::signal_network;
+using namespace boost;
+
+#include <boost/test/included/test_exec_monitor.hpp>
+
+int test_main(int, char* [])
+{
+    signet::counter<void ()>::unfused counter1;
+	
+    for (int i=0; i<33; i++)
+        counter1();
+    BOOST_CHECK_EQUAL(counter1.count(), 33);
+
+    return 0;
+} // int test_main(int, char* [])
\ No newline at end of file
Added: sandbox/SOC/2007/signals/libs/signal_network/test/test_function.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/test/test_function.cpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -0,0 +1,33 @@
+// Copyright Stjepan Rajko 2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/signal_network/function.hpp>
+#include <boost/signal_network/storage.hpp>
+
+// for access to connection operators >>= and |
+using namespace boost::signal_network;
+using namespace boost;
+
+#include <boost/test/included/test_exec_monitor.hpp>
+
+float DoublerFunc(float  x)
+{
+	return x*2;
+}
+
+int test_main(int, char* [])
+{
+    signet::function<float(float)>::unfused double_fun1(&DoublerFunc);
+    signet::function<float(float)>::unfused double_fun2(&DoublerFunc);
+	signet::storage<void (float)>::unfused floater(1.0f);
+	signet::storage<void (float)>::unfused collector(0.0f);
+
+	floater >>= double_fun1 >>= double_fun2 >>= collector;
+	floater();
+
+	BOOST_CHECK(collector.value_<0>() == 4.0f);
+
+    return 0;
+} // int test_main(int, char* [])
Added: sandbox/SOC/2007/signals/libs/signal_network/test/test_junction.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/test/test_junction.cpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -0,0 +1,46 @@
+// Copyright Stjepan Rajko 2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/signal_network/junction.hpp>
+#include <boost/signal_network/counter.hpp>
+#include <boost/signal_network/storage.hpp>
+
+// for access to connection operators >>= and |
+using namespace boost::signal_network;
+using namespace boost;
+
+#include <boost/test/included/test_exec_monitor.hpp>
+
+int test_main(int, char* [])
+{
+	signet::storage<void ()>::unfused banger1, banger2;
+    signet::counter<void ()>::unfused counter1, counter2;
+    signet::junction<void ()>::unfused junction;
+	
+	banger1 >>= junction >>= counter1;
+	banger2 >>= junction >>= counter2;
+
+	banger1();
+	banger2();
+
+	BOOST_CHECK(counter1.count() == 2);
+	BOOST_CHECK(counter2.count() == 2);
+
+	junction.disable();
+	banger1();
+	banger2();
+
+	BOOST_CHECK(counter1.count() == 2);
+	BOOST_CHECK(counter2.count() == 2);
+
+	junction.enable();
+	banger1();
+	banger2();
+
+	BOOST_CHECK(counter1.count() == 4);
+	BOOST_CHECK(counter2.count() == 4);
+
+    return 0;
+} // int test_main(int, char* [])
\ No newline at end of file
Added: sandbox/SOC/2007/signals/libs/signal_network/test/test_mutex.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/test/test_mutex.cpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 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)
+
+#include <boost/signal_network/mutex.hpp>
+#include <boost/signal_network/timed_generator.hpp>
+#include <boost/signal_network/counter.hpp>
+
+// for access to connection operators >>= and |
+using namespace boost::signal_network;
+using namespace boost;
+
+#include <boost/test/included/test_exec_monitor.hpp>
+
+struct ticker
+{
+	void operator()()
+	{
+        std::cout << "tick" << std::endl;
+	}
+};
+
+int test_main(int, char* [])
+{
+	signet::timed_generator<void ()> banger1;
+	signet::timed_generator<void ()> banger2;
+    signet::mutex<void ()>::unfused lock;
+    signet::counter<void ()>::unfused counter;
+	ticker tick;
+
+	banger1 >>= lock >>= counter;
+	banger2 >>= lock >>= tick;
+	banger1.enable(0.5, 5);
+	banger2.enable(0.5, 5);
+
+	while (counter.count() < 10) {}
+
+	BOOST_CHECK_EQUAL(counter.count(), 10);
+	banger1.join();
+	banger2.join();
+
+    return 0;
+} // int test_main(int, char* [])
Added: sandbox/SOC/2007/signals/libs/signal_network/test/test_socket.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/test/test_socket.cpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -0,0 +1,85 @@
+// Copyright Stjepan Rajko 2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/asio.hpp>
+#include <boost/test/included/test_exec_monitor.hpp>
+
+/*#ifdef WIN32
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#define _WIN32_WINDOWS
+#endif*/
+#include <boost/signal_network/socket_receiver.hpp>
+#include <boost/signal_network/socket_sender.hpp>
+#include <boost/signal_network/function.hpp>
+#include <boost/thread/thread.hpp>
+#include <boost/thread/mutex.hpp>
+#include <boost/thread/condition.hpp>
+
+// for access to connection operators >>= and |
+using namespace boost::signal_network;
+using namespace boost;
+
+
+// asio test
+boost::mutex mutex_;
+boost::condition cond;
+asio::io_service io_service;
+
+// This function will set up an asio acceptor, and wait for a connection.
+// Once established, it will set up a signal network which will send
+// its final signal through the socket.
+void asio_server()
+{
+	// set up the socket
+	asio::ip::tcp::acceptor acceptor(io_service, asio::ip::tcp::endpoint(asio::ip::tcp::v4(), 1097));
+	asio::ip::tcp::socket socket(io_service);
+	{
+		boost::mutex::scoped_lock lock(mutex_);
+		acceptor.listen();
+		cond.notify_all();
+	}
+	acceptor.accept(socket);
+
+	// instantiate the components - a float generator, a filter that adds 2, and a sender
+	signet::storage<void (float)>::unfused generator(1.0f);
+    signet::function<float(float)>::unfused add2(boost::bind(std::plus<float>(), _1, 2.0f));
+    signet::socket_sender<void (float)>::unfused sender(socket);
+
+	// create the network
+	generator >>= add2 >>= sender;
+
+	// cause the generator to send it's stored value
+	generator();
+}
+
+int test_main(int, char* [])
+{
+	// start the server in a separate thread
+	boost::mutex::scoped_lock lock(mutex_);
+	boost::thread t(asio_server);
+	cond.wait(lock);
+
+	// set up the socket
+	asio::ip::tcp::endpoint endpoint_recv(asio::ip::address::from_string("127.0.0.1"), 1097);
+	asio::ip::tcp::socket socket(io_service);
+	socket.connect(endpoint_recv);
+
+	// instatiate the components
+    signet::socket_receiver<void (float)> receiver(socket);
+	signet::storage<void (float)>::unfused collector(0.0f);
+
+	// set up the network
+	receiver >>= collector;
+
+	// this receiver is synchronous - we have to tell it to receive a signal
+	receiver();
+
+	BOOST_CHECK(collector.value_<0>() == 3.0f);
+
+	t.join();
+
+    return 0;
+} // int test_main(int, char* [])
Added: sandbox/SOC/2007/signals/libs/signal_network/test/test_storage.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/test/test_storage.cpp	2007-06-03 13:50:21 EDT (Sun, 03 Jun 2007)
@@ -0,0 +1,31 @@
+// Copyright Stjepan Rajko 2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/signal_network/storage.hpp>
+
+// for access to connection operators >>= and |
+using namespace boost::signal_network;
+using namespace boost;
+
+#include <boost/test/included/test_exec_monitor.hpp>
+
+int test_main(int, char* [])
+{
+	// instantiate all of the components we need
+    signet::storage<void ()>::unfused banger;
+	signet::storage<void (float)>::unfused floater(2.5f);
+	signet::storage<void (float)>::unfused collector(0.0f);
+
+	// create the network
+	banger >>= floater >>= collector;
+
+	banger(); // signal from banger will now cause floater to output 2.5
+	BOOST_CHECK_EQUAL(collector.value_<0>(), 2.5f);
+
+	floater(1.5f); // change the value in floater
+	floater(); // we can also signal floater directly
+	BOOST_CHECK_EQUAL(collector.value_<0>(), 1.5f);
+    return 0;
+} // int test_main(int, char* [])
\ No newline at end of file