$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: srajko_at_[hidden]
Date: 2007-05-30 02:22:49
Author: srajko
Date: 2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
New Revision: 4366
URL: http://svn.boost.org/trac/boost/changeset/4366
Log:
add build files, test, example, and make docs boostbook/doxygen
Added:
   sandbox/SOC/2007/signals/libs/signal_network/
   sandbox/SOC/2007/signals/libs/signal_network/build/
   sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/
   sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/build.vcproj
   sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/doc.vcproj
   sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/example.vcproj
   sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/signal_network.sln
   sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/test.vcproj
   sandbox/SOC/2007/signals/libs/signal_network/doc/
   sandbox/SOC/2007/signals/libs/signal_network/doc/Jamfile.v2
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/chain.hpp
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/function.hpp
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/junction.hpp
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/mutex.hpp
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/selector.hpp
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/socket_receiver.hpp
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/socket_sender.hpp
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/storage.hpp
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/html_footer.html
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/html_header.html
   sandbox/SOC/2007/signals/libs/signal_network/doc/dox/signal_network.hpp
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/boostbook.css
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/boostbook_doxygen.css
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/Thumbs.db   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/blank.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/caution.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/draft.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/home.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/important.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/next.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/note.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/prev.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/tip.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/toc-blank.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/toc-minus.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/toc-plus.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/up.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/warning.png   (contents, props changed)
   sandbox/SOC/2007/signals/libs/signal_network/doc/html/reference.css
   sandbox/SOC/2007/signals/libs/signal_network/doc/signal_network.qbk
   sandbox/SOC/2007/signals/libs/signal_network/doc/signal_network_doxygen.xml
   sandbox/SOC/2007/signals/libs/signal_network/example/
   sandbox/SOC/2007/signals/libs/signal_network/example/Jamfile.v2
   sandbox/SOC/2007/signals/libs/signal_network/example/example.cpp
   sandbox/SOC/2007/signals/libs/signal_network/src/
   sandbox/SOC/2007/signals/libs/signal_network/test/
   sandbox/SOC/2007/signals/libs/signal_network/test/Jamfile.v2
   sandbox/SOC/2007/signals/libs/signal_network/test/test.cpp
Text files modified: 
   sandbox/SOC/2007/signals/boost/signal_network/collector.hpp       |     2 +-                                      
   sandbox/SOC/2007/signals/boost/signal_network/filter.hpp          |     2 +-                                      
   sandbox/SOC/2007/signals/boost/signal_network/timed_generator.hpp |     2 +-                                      
   3 files changed, 3 insertions(+), 3 deletions(-)
Modified: sandbox/SOC/2007/signals/boost/signal_network/collector.hpp
==============================================================================
--- sandbox/SOC/2007/signals/boost/signal_network/collector.hpp	(original)
+++ sandbox/SOC/2007/signals/boost/signal_network/collector.hpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -12,7 +12,7 @@
         \todo Currently collector only supports signatures of type void (type).
 
         Example:
-	\dontinclude SignalNetworkTests.cpp
+	\dontinclude example.cpp
         \skip simple_test
         \until end void simple_test
 */
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-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -21,7 +21,7 @@
         of a particular signature.  
 
         \par Example:
-	\dontinclude SignalNetworkTests.cpp
+	\dontinclude example.cpp
         \skip DoublerClass
         \until end void filter_test
 */
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-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -15,7 +15,7 @@
                 class, the documentation was generated through a non-functioning class Doxygen could read.
 
         \par Example:
-	\dontinclude SignalNetworkTests.cpp
+	\dontinclude example.cpp
         \skip mutex_test
         \until end void mutex_test
 
Added: sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/build.vcproj
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/build.vcproj	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="build"
+	ProjectGUID="{C3FB6B91-7EE1-489E-BF66-7D28FA2FC982}"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="debug|Win32"
+			OutputDirectory="..\..\..\..\bin.v2\libs\$(SolutionName)\$(ProjectName)\msvc-8.0\$(ConfigurationName)\threading-multi"
+			IntermediateDirectory="$(OutDir)"
+			ConfigurationType="0"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="bjam --v2 ../../$(ProjectName) $(ConfigurationName)"
+				ReBuildCommandLine="bjam --v2 -a ../../$(ProjectName) $(ConfigurationName)"
+				CleanCommandLine="bjam --v2 --clean ../../$(ProjectName) $(ConfigurationName)"
+				Output=""
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="release|Win32"
+			OutputDirectory="..\..\..\..\bin.v2\libs\$(SolutionName)\$(ProjectName)\msvc-8.0\$(ConfigurationName)\threading-multi"
+			IntermediateDirectory="$(OutDir)"
+			ConfigurationType="0"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="bjam --v2 ../../$(ProjectName) $(ConfigurationName)"
+				ReBuildCommandLine="bjam --v2 -a ../../$(ProjectName) $(ConfigurationName)"
+				CleanCommandLine="bjam --v2 --clean ../../$(ProjectName) $(ConfigurationName)"
+				Output=""
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="signal_network"
+			>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\base.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\chain.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\collector.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\filter.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\function.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\junction.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\mutex.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\selector.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\signal_network.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\socket_receiver.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\socket_sender.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\storage.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\signal_network\timed_generator.hpp"
+				>
+			</File>
+			<Filter
+				Name="detail"
+				>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\chain_template.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\connect_slot_template.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\connect_template.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\defines.hpp"
+					>
+				</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>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\main_class_loader.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\mutex_template.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\selector_template.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\slot_type_template.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\socket_receiver_template.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\socket_sender_template.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\storage_template.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\template_loader.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\boost\signal_network\detail\template_loader2.hpp"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="solution build"
+			>
+			<File
+				RelativePath="..\..\..\..\boost-build.jam"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\Jamfile.v2"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\project-root.jam"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\..\build\Jamfile.v2"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Added: sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/doc.vcproj
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/doc.vcproj	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="doc"
+	ProjectGUID="{63CC95EA-4647-495B-9072-D38F368D4C6E}"
+	RootNamespace="doc"
+	Keyword="MakeFileProj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="release|Win32"
+			OutputDirectory="..\..\..\..\bin.v2\libs\$(SolutionName)\$(ProjectName)\msvc-8.0\$(ConfigurationName)\threading-multi"
+			IntermediateDirectory="$(OutDir)"
+			ConfigurationType="0"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="cd ../../doc
bjam --v2 $(ConfigurationName)"
+				ReBuildCommandLine="cd ../../doc
bjam --v2 -a $(ConfigurationName)"
+				CleanCommandLine="bjam --v2 --clean ../../$(ProjectName) $(ConfigurationName)"
+				Output=""
+				PreprocessorDefinitions="WIN32;NDEBUG"
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\doc\dox\signal_network.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\doc\signal_network.qbk"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\..\doc\Jamfile.v2"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Added: sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/example.vcproj
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/example.vcproj	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="example"
+	ProjectGUID="{784DC2FD-A12D-48F9-9C2E-369833990427}"
+	RootNamespace="example"
+	Keyword="MakeFileProj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="debug|Win32"
+			OutputDirectory="..\..\..\..\bin.v2\libs\$(SolutionName)\$(ProjectName)\msvc-8.0\$(ConfigurationName)\threading-multi"
+			IntermediateDirectory="$(OutDir)"
+			ConfigurationType="0"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="bjam --v2 ../../$(ProjectName) $(ConfigurationName)"
+				ReBuildCommandLine="bjam --v2 -a ../../$(ProjectName) $(ConfigurationName)"
+				CleanCommandLine="bjam --v2 --clean ../../$(ProjectName) $(ConfigurationName)"
+				Output="$(OutDir)\example.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath="..\../example"
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="release|Win32"
+			OutputDirectory="..\..\..\..\bin.v2\libs\$(SolutionName)\$(ProjectName)\msvc-8.0\$(ConfigurationName)\threading-multi"
+			IntermediateDirectory="$(OutDir)"
+			ConfigurationType="0"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="bjam --v2 ../../$(ProjectName) $(ConfigurationName)"
+				ReBuildCommandLine="bjam --v2 -a ../../$(ProjectName) $(ConfigurationName)"
+				CleanCommandLine="bjam --v2 --clean ../../$(ProjectName) $(ConfigurationName)"
+				Output="$(OutDir)\example.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\example\example.cpp"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\..\example\Jamfile.v2"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Added: sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/signal_network.sln
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/signal_network.sln	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,37 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "build", "build.vcproj", "{C3FB6B91-7EE1-489E-BF66-7D28FA2FC982}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doc", "doc.vcproj", "{63CC95EA-4647-495B-9072-D38F368D4C6E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example", "example.vcproj", "{784DC2FD-A12D-48F9-9C2E-369833990427}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test.vcproj", "{35BB1613-AEF0-4047-9F26-D42190A005EB}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		debug|Win32 = debug|Win32
+		release|Win32 = release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{C3FB6B91-7EE1-489E-BF66-7D28FA2FC982}.debug|Win32.ActiveCfg = debug|Win32
+		{C3FB6B91-7EE1-489E-BF66-7D28FA2FC982}.debug|Win32.Build.0 = debug|Win32
+		{C3FB6B91-7EE1-489E-BF66-7D28FA2FC982}.release|Win32.ActiveCfg = release|Win32
+		{C3FB6B91-7EE1-489E-BF66-7D28FA2FC982}.release|Win32.Build.0 = release|Win32
+		{63CC95EA-4647-495B-9072-D38F368D4C6E}.debug|Win32.ActiveCfg = release|Win32
+		{63CC95EA-4647-495B-9072-D38F368D4C6E}.debug|Win32.Build.0 = release|Win32
+		{63CC95EA-4647-495B-9072-D38F368D4C6E}.release|Win32.ActiveCfg = release|Win32
+		{63CC95EA-4647-495B-9072-D38F368D4C6E}.release|Win32.Build.0 = release|Win32
+		{784DC2FD-A12D-48F9-9C2E-369833990427}.debug|Win32.ActiveCfg = debug|Win32
+		{784DC2FD-A12D-48F9-9C2E-369833990427}.debug|Win32.Build.0 = debug|Win32
+		{784DC2FD-A12D-48F9-9C2E-369833990427}.release|Win32.ActiveCfg = release|Win32
+		{784DC2FD-A12D-48F9-9C2E-369833990427}.release|Win32.Build.0 = release|Win32
+		{35BB1613-AEF0-4047-9F26-D42190A005EB}.debug|Win32.ActiveCfg = debug|Win32
+		{35BB1613-AEF0-4047-9F26-D42190A005EB}.debug|Win32.Build.0 = debug|Win32
+		{35BB1613-AEF0-4047-9F26-D42190A005EB}.release|Win32.ActiveCfg = release|Win32
+		{35BB1613-AEF0-4047-9F26-D42190A005EB}.release|Win32.Build.0 = release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Added: sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/test.vcproj
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/build/vc8ide/test.vcproj	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="test"
+	ProjectGUID="{35BB1613-AEF0-4047-9F26-D42190A005EB}"
+	RootNamespace="test"
+	Keyword="MakeFileProj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="debug|Win32"
+			OutputDirectory="..\..\..\..\bin.v2\libs\$(SolutionName)\$(ProjectName)\msvc-8.0\$(ConfigurationName)\threading-multi"
+			IntermediateDirectory="$(OutDir)"
+			ConfigurationType="0"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="bjam --v2 ../../$(ProjectName) $(ConfigurationName)"
+				ReBuildCommandLine="bjam --v2 -a ../../$(ProjectName) $(ConfigurationName)"
+				CleanCommandLine="bjam --v2 --clean ../../$(ProjectName) $(ConfigurationName)"
+				Output=""
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="release|Win32"
+			OutputDirectory="..\..\..\..\bin.v2\libs\$(SolutionName)\$(ProjectName)\msvc-8.0\$(ConfigurationName)\threading-multi"
+			IntermediateDirectory="$(OutDir)"
+			ConfigurationType="0"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="bjam --v2 ../../$(ProjectName) $(ConfigurationName)"
+				ReBuildCommandLine="bjam --v2 -a ../../$(ProjectName) $(ConfigurationName)"
+				CleanCommandLine="bjam --v2 --clean ../../$(ProjectName) $(ConfigurationName)"
+				Output=""
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			>
+			<File
+				RelativePath="..\..\test\test.cpp"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\..\test\Jamfile.v2"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/Jamfile.v2	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,54 @@
+# Copyright 2007 Stjepan Rajko.
+# Distributed under the Boost Software License, Version 1.0. (See
+# accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+
+project boost/signal_network/doc ;
+
+import boostbook : boostbook ;
+using quickbook ;
+
+local loc = [ path.native [ path.pwd ] ] ;
+local root = [ path.native [ path.join [ path.pwd ] ../../.. ] ] ;
+
+xml signal_network_xml : signal_network.qbk ;
+doxygen signal_network_doxygen
+   :
+      [ glob
+             ../../../boost/signal_network/*.hpp
+             dox/*.hpp
+             dox/boost/signal_network/*.hpp
+      ]
+   :
+        <doxygen:param>TAB_SIZE=4
+        <doxygen:param>EXAMPLE_PATH=../example
+        <doxygen:param>STRIP_FROM_PATH=$(root)
+        <doxygen:param>STRIP_FROM_INC_PATH=$(root)
+        <doxygen:param>EXTRACT_ALL=NO
+        <doxygen:param>HIDE_UNDOC_MEMBERS=NO
+        <doxygen:param>EXTRACT_PRIVATE=NO
+        <doxygen:param>DETAILS_AT_TOP=YES
+        <doxygen:param>ENABLE_PREPROCESSING=YES
+        <doxygen:param>MACRO_EXPANSION=YES
+        <doxygen:param>SEARCH_INCLUDES=YES
+        <doxygen:param>INCLUDE_PATH=../../..
+        <doxygen:param>PREDEFINED=DOXYGEN_DOCS_ONLY
+        <doxygen:param>GENERATE_HTML=YES
+        <doxygen:param>HTML_OUTPUT=$(loc)/html/doxygen
+        <doxygen:param>HTML_STYLESHEET=$(loc)/html/boostbook_doxygen.css
+        <doxygen:param>HTML_HEADER=$(loc)/dox/html_header.html
+        <doxygen:param>HTML_FOOTER=$(loc)/dox/html_footer.html
+   ;
+
+boostbook standalone
+   :
+      signal_network_xml
+      signal_network_doxygen
+    :
+        <xsl:param>chunk.first.sections=1
+        <xsl:param>chunk.section.depth=3
+        <xsl:param>toc.section.depth=3
+        <xsl:param>toc.max.depth=3
+        <xsl:param>generate.section.toc.level=3
+    ;
\ No newline at end of file
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/chain.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/chain.hpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,30 @@
+#include <boost/signal_network/filter.hpp>
+
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+/** \brief Connects a number of components of the same type in a chain.
+	\param T Type of the component.
+	\param Signature Signature of the signal sent and received.
+	\warning Since I can't get Doxygen to unravel the preprocessed definition of this
+		class, the documentation was generated through a non-functioning class Doxygen could read.
+
+	\par Example:
+	\dontinclude example.cpp
+	\skip chain_test
+	\until end void chain_test
+*/
+template<typename T, typename Signature>
+class chain : public filter_base
+{
+public:
+	///	Constructs a chain composed of instances of T.
+	chain(size_t copies) : SIGNAL_NETWORK_TEMPLATE_CLASS_IMPL_BASE(copies) {}
+	///	Constructs a chain composed of copies of component.
+	chain(size_t copies, T &component) : SIGNAL_NETWORK_TEMPLATE_CLASS_IMPL_BASE(copies, &component) {}
+	/// Sending a signal to the chain will forward it to the first component in the chain.
+	operator()(...);
+	///	The default signal coming out of the chain is the default signal of the last component in the chain.
+	boost::signal<Signature> &default_signal();
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/function.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/function.hpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,31 @@
+#include <boost/signal_network/detail/defines.hpp>
+
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+/** \brief Converts a function into a Signal Network filter.
+	\param Signature Signature of the function to be converted.
+	\warning Since I can't get Doxygen to unravel the preprocessed definition of this
+		class, the documentation was generated through a non-functioning class Doxygen could read.
+
+	The signet::function object will receive signals of signature void(<i>function arguments</i>),
+	and send signals of signature void(<i>function return type</i>).
+
+	\par Example:
+	\dontinclude example.cpp
+	\skip DoublerFunc
+	\until end void function_test
+
+*/
+
+template<typename Signature>
+class function : public filter<Signature>
+{
+public:
+	///	Initializes the object with the specified function.
+	function(boost::function<Signature> f);
+	/// Calls the function with the arguments of the signal, and
+	/// then sends a signal with the return value of the function
+	void operator()(...);
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/junction.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/junction.hpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,29 @@
+#include <boost/signal_network/detail/defines.hpp>
+
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+/** \brief Forwards a single signal to multiple slots, and can
+		also be disabled to stop the flow of signals.
+	\param Signature Signature of the signal sent and received.
+	\warning Since I can't get Doxygen to unravel the preprocessed definition of this
+		class, the documentation was generated through a non-functioning class Doxygen could read.
+
+	\par Example:
+	\dontinclude example.cpp
+	\skip junction_test
+	\until end void junction_test
+
+*/
+template<typename Signature>
+class junction : public filter<Signature>
+{
+public:
+	/// Enables the junction (signals will be forwarded).
+	void enable();
+	///	Disables the junction (signals will not be forwarded).
+	void disable();
+	///	Upon receiving this signal, the same signal will be sent out if the junction is enabled.
+	typename boost::function_traits<Signature>::result_type operator()(...);
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/mutex.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/mutex.hpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,24 @@
+#include <boost/signal_network/detail/defines.hpp>
+
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+/** \brief Ensures a component is processing only one signal at a time when using multiple threads.
+	\param Signature Signature of the signal sent and received.
+	\warning Since I can't get Doxygen to unravel the preprocessed definition of this
+		class, the documentation was generated through a non-functioning class Doxygen could read.
+
+	\par Example:
+	\dontinclude example.cpp
+	\skip mutex_test
+	\until end void mutex_test
+*/
+
+template<typename Signature>
+class mutex : public filter<Signature>
+{
+public:
+	/// Locks an internal mutex and forwards the signal.
+	typename boost::function_traits<Signature>::result_type operator()(...);
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/selector.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/selector.hpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,30 @@
+#include <boost/signal_network/detail/defines.hpp>
+
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+/** \brief Allows selection of signals from multiple inputs.
+	\param Signature Signature of the signal sent and received.
+	\warning Since I can't get Doxygen to unravel the preprocessed definition of this
+		class, the documentation was generated through a non-functioning class Doxygen could read.
+
+	This can be used to determine which signal out of a group of signals
+	will continue through the selector (the others will not be forwarded).
+
+	\par Example:
+	\dontinclude example.cpp
+	\skip selector_test
+	\until end void selector_test
+*/
+template<typename Signature>
+class selector : public filter<Signature>
+{
+public:
+	///	Selects the indicated input (if source is 0, no input will be selected).
+	void select(int input);
+	/// If N is selected, the signal received at this slot will be forwared.
+	typename boost::function_traits<Signature>::result_type inputN(...);
+	/// Returns the slot selector for inputN.
+	slot_selector_t<selector, Signature> slotN();
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/socket_receiver.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/socket_receiver.hpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,26 @@
+#include <boost/signal_network/storage.hpp>
+
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+/** \brief Receives serializable signals through a Boost asio socket.
+	\param Signature Signature of the signal sent (and received through the socket).
+	\warning Since I can't get Doxygen to unravel the preprocessed definition of this
+		class, the documentation was generated through a non-functioning class Doxygen could read.
+	\todo socket_sender only works for Signatures of return type void.
+
+	\par Example:
+	\dontinclude example.cpp
+	\skip asio test
+	\until end void asio_test
+*/
+template<typename T, typename Signature>
+class socket_receiver : public storage<Signature>
+{
+public:
+	/// Initializes the socket_sender to use the provided socket.
+	socket_receiver(asio::ip::tcp::socket &socket);
+	/// Sets the receiver to wait for a packet and send its contents via the signal.
+	void operator()();
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/socket_sender.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/socket_sender.hpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,26 @@
+#include <boost/signal_network/detail/defines.hpp>
+
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+/** \brief Sends serializable signals through a Boost asio socket.
+	\param Signature Signature of the signal received (and sent through the socket).
+	\warning Since I can't get Doxygen to unravel the preprocessed definition of this
+		class, the documentation was generated through a non-functioning class Doxygen could read.
+	\todo socket_sender only works for Signatures of return type void.
+
+	\par Example:
+	\dontinclude example.cpp
+	\skip asio test
+	\until end void asio_test
+*/
+template<typename T, typename Signature>
+class socket_sender
+{
+public:
+	/// Initializes the socket_sender to use the provided socket.
+	socket_sender(asio::ip::tcp::socket &socket);
+	/// Serializes each of the arguments and sends them in a single packet through the socket.
+	void operator()(...);
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/storage.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/dox/boost/signal_network/storage.hpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,39 @@
+#include <boost/signal_network/detail/defines.hpp>
+
+SIGNAL_NETWORK_OPEN_SIGNET_NAMESPACE
+
+/** \brief Upon receiving an empty signal, outputs the stored value.
+	\param Signature signature of the signal sent by the storage.
+	\warning Since I can't get Doxygen to unravel the preprocessed definition of this
+		class, the documentation was generated through a non-functioning class Doxygen could read.
+
+	\par Example:
+	\dontinclude example.cpp
+	\skip simple_test
+	\until end void simple_test
+
+*/
+template<typename Signature>
+class storage : public filter<Signature>
+{
+public:
+	/// Stored value type.
+	typedef typename detail::storable<typename boost::function_traits<Signature>::arg1_type>::type argN_value_type;
+
+	///	Sends a signal containing the stored values.
+	typename boost::function_traits<Signature>::result_type operator()();
+	///	Sets the stored values.
+	void operator()(typename boost::call_traits<arg1_value_type>::param_type arg1,
+		typename boost::call_traits<arg2_value_type>::param_type arg2, ...);
+	///	Returns the stored value of parameter N using a param_type cast.
+	typename boost::call_traits<argN_value_type>::param_type valueN();
+	///	Returns the stored value of parameter N.
+	typename arg##n##_value_type value_exactN();
+	/// Returns the slot selector for the valueN function.
+	slot_selector_t<storage, typename boost::call_traits<argN_value_type>::param_type ()> slotN ();
+	/// Returns the slot selector for the value_exactN function.
+	slot_selector_t<storage, typename argN_value_type ()> slot_exactN ();
+
+};
+
+SIGNAL_NETWORK_CLOSE_SIGNET_NAMESPACE
\ No newline at end of file
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/dox/html_footer.html
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/dox/html_footer.html	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,12 @@
+</div>
+<table width="100%"><tr>
+<td align="left"></td>
+<td align="right"><small>Copyright © 2007 Stjepan Rajko</small></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a>
+</div>
+</body>
+
+</html>
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/dox/html_header.html
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/dox/html_header.html	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,21 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>$title</title>
+<link href="boostbook_doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%">
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a>
+</div>
+<div class="section" lang="en">
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/dox/signal_network.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/dox/signal_network.hpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,196 @@
+namespace boost {
+namespace signal_network {
+
+/** \mainpage
+
+\section sec_tutorial Tutorial
+	This tutorial explains the use of the Signal Network library, and is based on elements of the library
+	that have working prototypes.
+
+\section signal_network_namespace Namespace use
+	The connection operators (and a few other things) are located in the boost::signal_network namespace.
+	All of the components are in the boost::signal_network::signet namespace.
+	
+	It is recommended that you do
+\code
+using namespace boost::signal_network
+\endcode
+	so that your code can use the operators >>= and |, and you can access the components via signet::\em component.
+	
+	Otherwise, the following might be helpful:
+\code
+namespace signet = boost::signal_network::signet;
+\endcode
+	
+\section signal_network_examples Examples
+
+\par Creating connections and components
+
+	\li \ref signal_network_simple_example
+	\li \ref signal_network_receiving_example
+	\li \ref signal_network_branching_example
+	\li \ref signal_network_pull_example
+	\li \ref signal_network_disconnect_example
+	\li \ref signal_network_multi_in_simple_example
+	\li \ref signal_network_multi_in_example
+	\li \ref signal_network_multi_out_example
+
+\par Flow control and signal storage components
+
+The following components have examples in their documentation:
+
+	\li signet::storage for storing and forwarding values.
+	\li signet::junction for signal branching and flow control.
+	\li signet::selector for selection between multiple signals.
+
+\par Classes for creating new components
+
+The following classes have examples in their documentation:
+
+	\li signet::filter is a base class for filters (components that receive and send a signal).
+	\li signet::function can be used to convert functions into filters.
+
+\par Threading components
+
+The following components have examples in their documentation:
+
+	\li signet::timed_generator for periodic sending of signals in a separate thread.
+	\li signet::mutex for thread control when using signals from separate threads.
+
+\par Network topologies
+
+The following components have examples in their documentation:
+
+	\li signet::chain implements the chain topology.
+
+\par Signal networks accross multiple computers using Boost.Serialization and the Boost asio library.
+
+The following components have examples in their documentation:
+
+	\li signet::socket_sender sends serializable signals accross the network.
+	\li signet::socket_receiver receives serializable signals from the network.
+
+\subsection signal_network_simple_example Simple connections using Signal Network components
+
+	The Sigal Network library provides many common building block components for a
+	signal network.  The most basic is \link signet::storage storage\endlink, which
+	can be used to store a value received through a signal, send it on, and/or retreive it.
+	
+	By default, components in the library use operator() to receive a signal.
+	For example, \link boost::signal_network::signet::storage storage\endlink objects can receive
+	signals through \link boost::signal_network::signet::storage::operator()()
+	operator()()\endlink.  Upon receiving this signal,
+	they will output their stored value through another signal.
+	
+	The value stored inside a \link boost::signal_network::signet::storage storage\endlink object
+	can be retrieved via the \link boost::signal_network::signet::storage::valueN() valueN()\endlink
+	function.
+	
+	Using a few \link boost::signal_network::signet::storage storage\endlink objects, it is easy to
+	create a network using \link boost::signal_network::operator>>=() operator>>=\endlink:
+	
+	\dontinclude example.cpp
+	\skip simple_test
+	\until end void simple_test
+	
+\subsection signal_network_receiving_example Creating your own signal receiver (slot)
+
+	The easiest way to create your own signal receiver which can be used with the Signal Network
+	library is to create a class with operator() of the signal signature you wish to receive.
+	
+	For example, consider the signature "void ()".  This is the signature
+	of a function that returns void and takes no arguments.
+	A class that can receive signals of such a signature would be
+	defined as follows:
+
+	\dontinclude example.cpp
+	\skip class SignalVoidCounter
+	\until end class SignalVoidCounter
+	
+	
+
+\subsection signal_network_branching_example Branching connections
+	More complex connections can also be made relatively easily using
+	both \link boost::signal_network::operator>>=() operator >>= \endlink
+	and \link boost::signal_network::operator|() operator | \endlink:
+
+	\dontinclude example.cpp
+	\skip branching_test
+	\until end void branching_test
+	
+\subsection signal_network_pull_example Building a pull-based network
+	The Signal Network library was built with push-based networks in
+	mind (the data producer sends data through a signal), but it can also
+	be used for pull-based networks (the data consumer requests data through
+	a signal).
+
+	The following example illustrates this:
+	
+	\dontinclude example.cpp
+	\skip PullDoubler
+	\until end void pull_test
+
+\subsection	signal_network_disconnect_example Disconnecting connections
+	Connections can be terminated in two ways.  One is through the "trackable"
+	mechanism of Boost.Signals, which will automatically destroy connections
+	to a trackable object when the object is destroyed.  The other
+	way is through the disconnect_all_slots method of the signal sender.
+
+	\dontinclude example.cpp
+	\skip void disconnect_test
+	\until end void disconnect_test
+
+\subsection signal_network_multi_in_simple_example Multiple inputs of different signatures
+
+	It is simple to have an object provide multiple slots through operator() functions
+	of different signatures.  The following class does so through providing 1-ary slots
+	of different types:
+
+	\dontinclude example.cpp
+	\skip class SignalIntFloatCollector
+	\until end class
+
+	The following class, on the other hand, uses slots of different number of arguments:
+	\dontinclude example.cpp
+	\skip class SignalMultiCollector
+	\until end class
+
+	In such cases, where the operator() functions differ in their signature,
+	standard connection operators will work out the correct connection:
+
+	\dontinclude example.cpp
+	\skip void multi_type_test
+	\until end void multi_type_test
+
+\subsection signal_network_multi_in_example Multiple inputs of the same signature
+
+	In some cases, a class may want to receive multiple signals of the same
+	signature.  For example, the following class can receive a void() signal
+	through its inherited operator() function, as well as through the
+	operator() function of member "other":
+	\dontinclude example.cpp
+	\skip class Signal2VoidCounter
+	\until end class
+	
+	Similarly, the following class could receive void() signals both
+	through operator() and through AltInput:
+	\dontinclude example.cpp
+	\skip class Signal2VoidInputs
+	\until end class
+
+	The following example shows how to connect signals to all of the above slots.
+	For the class Signal2VoidInputs, this is accomplished using the
+	slot_selector function:
+	\skip void multi_in_test
+	\until end void multi_in_test
+	
+\subsection signal_network_multi_out_example Multiple outputs
+
+	\dontinclude example.cpp
+	\skip class SignalOutIntFloat
+	\until end void multi_out_test
+	
+*/
+
+}
+}
\ No newline at end of file
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/boostbook.css
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/html/boostbook.css	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,538 @@
+/*=============================================================================
+    Copyright (c) 2004 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    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)
+=============================================================================*/
+
+/*=============================================================================
+    Body defaults
+=============================================================================*/
+
+    body 
+    {
+        margin: 1em;
+        font-family: sans-serif;
+    }
+
+/*=============================================================================
+    Paragraphs
+=============================================================================*/
+
+    p 
+    {
+        text-align: left;
+        font-size: 10pt; 
+        line-height: 1.15;
+    }
+
+/*=============================================================================
+    Program listings
+=============================================================================*/
+
+    /* Code on paragraphs */
+    p tt.computeroutput
+    {
+        font-size: 10pt;
+    }
+
+    pre.synopsis
+    {
+        font-size: 10pt;
+        margin: 1pc 4% 0pc 4%;
+        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+    }
+
+    .programlisting, 
+    .screen
+    {
+        font-size: 10pt;
+        display: block;
+        margin: 1pc 4% 0pc 4%;
+        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+    }
+
+/*=============================================================================
+    Headings
+=============================================================================*/
+
+    h1, h2, h3, h4, h5, h6 
+    { 
+        text-align: left;
+        margin: 1em 0em 0.5em 0em;
+        font-weight: bold;
+    }
+
+    h1 { font: 140% }
+    h2 { font: bold 140% }
+    h3 { font: bold 130% }
+    h4 { font: bold 120% }
+    h5 { font: italic 110% }
+    h6 { font: italic 100% }
+
+    /* Top page titles */
+    title, 
+    h1.title, 
+    h2.title
+    h3.title, 
+    h4.title, 
+    h5.title, 
+    h6.title, 
+    .refentrytitle
+    {
+        font-weight: bold;
+        margin-bottom: 1pc;
+    }
+
+    h1.title { font-size: 140% }
+    h2.title { font-size: 140% }
+    h3.title { font-size: 130% }
+    h4.title { font-size: 120% }
+    h5.title { font-size: 110% }
+    h6.title { font-size: 100% }
+
+    .section h1 
+    {
+        margin: 0em 0em 0.5em 0em;
+        font-size: 140%;
+    }
+
+    .section h2 { font-size: 140% }
+    .section h3 { font-size: 130% }
+    .section h4 { font-size: 120% }
+    .section h5 { font-size: 110% }
+    .section h6 { font-size: 100% }
+
+    /* Code on titles */
+    h1 tt.computeroutput { font-size: 140% }
+    h2 tt.computeroutput { font-size: 140% }
+    h3 tt.computeroutput { font-size: 130% }
+    h4 tt.computeroutput { font-size: 120% }
+    h5 tt.computeroutput { font-size: 110% }
+    h6 tt.computeroutput { font-size: 100% }
+
+/*=============================================================================
+    Author
+=============================================================================*/
+
+    h3.author 
+    { 
+        font-size: 100% 
+    }
+
+/*=============================================================================
+    Lists
+=============================================================================*/
+
+    li
+    {
+        font-size: 10pt;
+        line-height: 1.3;
+    }
+
+    /* Unordered lists */
+    ul 
+    {
+        text-align: left;
+    }
+
+    /* Ordered lists */
+    ol 
+    {
+        text-align: left;
+    }
+
+/*=============================================================================
+    Links
+=============================================================================*/
+
+    a
+    {
+        text-decoration: none; /* no underline */
+    }
+
+    a:hover
+    {
+        text-decoration: underline;
+    }
+
+/*=============================================================================
+    Spirit style navigation
+=============================================================================*/
+
+    .spirit-nav
+    {
+        text-align: right;
+    }
+
+    .spirit-nav a
+    {
+        color: white;
+        padding-left: 0.5em;
+    }
+
+    .spirit-nav img
+    {
+        border-width: 0px;
+    }
+
+/*=============================================================================
+    Table of contents
+=============================================================================*/
+
+    .toc
+    {
+       margin: 1pc 4% 0pc 4%;
+       padding: 0.1pc 1pc 0.1pc 1pc;
+       font-size: 10pt;
+       line-height: 1.15;
+    }
+
+    .toc-main
+    {
+     width: 600;
+	 text-align: center;
+       margin: 1pc 1pc 1pc 10%;
+       padding: 2pc 1pc 3pc 1pc;
+	 line-height: 0.1;
+    }
+
+    .boost-toc
+    {
+       float: right;
+       padding: 0.5pc;
+    }
+
+/*=============================================================================
+    Tables
+=============================================================================*/
+
+    .table-title, 
+    div.table p.title
+    {
+        margin-left: 4%;
+        padding-right: 0.5em; 
+        padding-left: 0.5em;
+    }
+
+    .informaltable table, 
+    .table table
+    {
+        width: 92%;
+        margin-left: 4%;
+        margin-right: 4%;
+    }
+
+    div.informaltable table, 
+    div.table table
+    {
+        padding: 4px;
+    }
+
+    /* Table Cells */
+    div.informaltable table tr td, 
+    div.table table tr td
+    {
+        padding: 0.5em;
+        text-align: left;
+    }
+
+    div.informaltable table tr th, 
+    div.table table tr th
+    {
+        padding: 0.5em 0.5em 0.5em 0.5em;
+        border: 1pt solid white;
+        font-size: 120%;
+    }
+
+/*=============================================================================
+    Blurbs
+=============================================================================*/
+
+    div.note,
+    div.tip,
+    div.important,
+    div.caution,
+    div.warning,
+    p.blurb
+    {
+        font-size: 10pt;
+        line-height: 1.2;
+        display: block;
+        margin: 1pc 4% 0pc 4%;
+        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+    }
+
+    p.blurb img
+    {
+        padding: 1pt;
+    }
+
+/*=============================================================================
+    Variable Lists
+=============================================================================*/
+
+    span.term
+    {
+        font-weight: bold;
+        font-size: 10pt;
+    }
+
+    div.variablelist table tbody tr td
+    {
+        text-align: left;
+        vertical-align: top;
+        padding: 0em 2em 0em 0em;
+        font-size: 10pt;
+    }
+
+    div.variablelist table tbody tr td p
+    {
+        margin: 0em 0em 0.5em 0em;
+    }
+
+    /* Make the terms in definition lists bold */
+    div.variablelist dl dt
+    {
+        font-weight: bold;
+        font-size: 10pt;
+    }
+
+    div.variablelist dl dd
+    {
+        margin: 1em 0em 1em 2em;
+        font-size: 10pt;
+    }
+
+/*=============================================================================
+    Misc
+=============================================================================*/
+
+    /* Title of books and articles in bibliographies */
+    span.title
+    {
+        font-style: italic;
+    }
+
+    span.underline
+    {
+        text-decoration: underline;
+    }
+
+    span.strikethrough
+    {
+        text-decoration: line-through;
+    }
+
+    /* Copyright, Legal Notice */
+    div div.legalnotice p
+    {
+        font-size: 8pt;
+        text-align: left
+    }
+
+/*=============================================================================
+    Colors
+=============================================================================*/
+
+    @media screen
+    {
+        /* Links */
+        a
+        {
+            color: #0C7445;
+        }
+
+        a:visited
+        {
+            color: #663974;
+        }
+
+        h1 a, h2 a, h3 a, h4 a, h5 a, h6 a,
+        h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover,
+        h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
+        {
+            text-decoration: none; /* no underline */
+            color: #000000;
+        }
+
+        /* Syntax Highlighting */
+        .keyword        { color: #0000AA; }
+        .identifier     { color: #000000; }
+        .special        { color: #707070; }
+        .preprocessor   { color: #402080; }
+        .char           { color: teal; }
+        .comment        { color: #800000; }
+        .string         { color: teal; }
+        .number         { color: teal; }
+        .white_bkd      { background-color: #E8FBE9; }
+        .dk_grey_bkd    { background-color: #A0DAAC; }
+
+        /* Copyright, Legal Notice */
+        .copyright
+        { 
+            color: #666666; 
+            font-size: small; 
+        }
+
+        div div.legalnotice p
+        {
+            color: #666666;
+        }
+
+        /* Program listing */
+        pre.synopsis
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        .programlisting, 
+        .screen
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Blurbs */
+        div.note,
+        div.tip,
+        div.important,
+        div.caution,
+        div.warning,
+        p.blurb
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc-main
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+
+        /* Tables */
+        div.informaltable table tr td, 
+        div.table table tr td
+        {
+            border: 1px solid #DCDCDC;
+            background-color: #FAFFFB;
+        }
+
+        div.informaltable table tr th, 
+        div.table table tr th
+        {
+            background-color: #E3F9E4;
+            border: 1px solid #DCDCDC;
+        }
+
+        /* Misc */
+        span.highlight
+        {
+            color: #00A000;
+        }
+    }
+
+    @media print
+    {
+        /* Links */
+        a
+        {
+            color: black;
+        }
+
+        a:visited
+        {
+            color: black;
+        }
+
+        .spirit-nav
+        {
+            display: none;
+        }
+
+        /* Program listing */
+        pre.synopsis
+        {
+            border: 1px solid gray;
+            background-color: #FAFFFB;
+        }
+
+        .programlisting, 
+        .screen
+        {
+            border: 1px solid gray;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc-main
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        .informaltable table, 
+        .table table
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            border-collapse: collapse;
+            background-color: #FAFFFB;
+        }
+
+        /* Tables */
+        div.informaltable table tr td, 
+        div.table table tr td
+        {
+            border: 1px solid #DCDCDC;
+            background-color: #FAFFFB;
+        }
+
+        div.informaltable table tr th, 
+        div.table table tr th
+        {
+            border: 1px solid #DCDCDC;
+            background-color: #FAFFFB;
+        }
+
+        /* Misc */
+        span.highlight
+        {
+            font-weight: bold;
+        }
+    }
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/boostbook_doxygen.css
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/html/boostbook_doxygen.css	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,864 @@
+/*=============================================================================
+    Copyright (c) 2004 Joel de Guzman
+    http://spirit.sourceforge.net/
+
+    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)
+=============================================================================*/
+
+/*=============================================================================
+    Body defaults
+=============================================================================*/
+
+    body 
+    {
+        margin: 1em;
+        font-family: sans-serif;
+    }
+
+/*=============================================================================
+    Paragraphs
+=============================================================================*/
+
+    p 
+    {
+        text-align: left;
+        font-size: 10pt; 
+        line-height: 1.15;
+    }
+
+/*=============================================================================
+    Program listings
+=============================================================================*/
+
+    /* Code on paragraphs */
+    p tt.computeroutput
+    {
+        font-size: 10pt;
+    }
+
+    pre.synopsis
+    {
+        font-size: 10pt;
+        margin: 1pc 4% 0pc 4%;
+        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+    }
+
+    .programlisting, 
+    .screen
+    {
+        font-size: 10pt;
+        display: block;
+        margin: 1pc 4% 0pc 4%;
+        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+    }
+
+/*=============================================================================
+    Headings
+=============================================================================*/
+
+    h1, h2, h3, h4, h5, h6 
+    { 
+        text-align: left;
+        margin: 1em 0em 0.5em 0em;
+        font-weight: bold;
+    }
+
+    h1 { font: 140% }
+    h2 { font: bold 140% }
+    h3 { font: bold 130% }
+    h4 { font: bold 120% }
+    h5 { font: italic 110% }
+    h6 { font: italic 100% }
+
+    /* Top page titles */
+    title, 
+    h1.title, 
+    h2.title
+    h3.title, 
+    h4.title, 
+    h5.title, 
+    h6.title, 
+    .refentrytitle
+    {
+        font-weight: bold;
+        margin-bottom: 1pc;
+    }
+
+    h1.title { font-size: 140% }
+    h2.title { font-size: 140% }
+    h3.title { font-size: 130% }
+    h4.title { font-size: 120% }
+    h5.title { font-size: 110% }
+    h6.title { font-size: 100% }
+
+    .section h1 
+    {
+        margin: 0em 0em 0.5em 0em;
+        font-size: 140%;
+    }
+
+    .section h2 { font-size: 140% }
+    .section h3 { font-size: 130% }
+    .section h4 { font-size: 120% }
+    .section h5 { font-size: 110% }
+    .section h6 { font-size: 100% }
+
+    /* Code on titles */
+    h1 tt.computeroutput { font-size: 140% }
+    h2 tt.computeroutput { font-size: 140% }
+    h3 tt.computeroutput { font-size: 130% }
+    h4 tt.computeroutput { font-size: 120% }
+    h5 tt.computeroutput { font-size: 110% }
+    h6 tt.computeroutput { font-size: 100% }
+
+/*=============================================================================
+    Author
+=============================================================================*/
+
+    h3.author 
+    { 
+        font-size: 100% 
+    }
+
+/*=============================================================================
+    Lists
+=============================================================================*/
+
+    li
+    {
+        font-size: 10pt;
+        line-height: 1.3;
+    }
+
+    /* Unordered lists */
+    ul 
+    {
+        text-align: left;
+    }
+
+    /* Ordered lists */
+    ol 
+    {
+        text-align: left;
+    }
+
+/*=============================================================================
+    Links
+=============================================================================*/
+
+    a
+    {
+        text-decoration: none; /* no underline */
+    }
+
+    a:hover
+    {
+        text-decoration: underline;
+    }
+
+/*=============================================================================
+    Spirit style navigation
+=============================================================================*/
+
+    .spirit-nav
+    {
+        text-align: right;
+    }
+
+    .spirit-nav a
+    {
+        color: white;
+        padding-left: 0.5em;
+    }
+
+    .spirit-nav img
+    {
+        border-width: 0px;
+    }
+
+/*=============================================================================
+    Table of contents
+=============================================================================*/
+
+    .toc
+    {
+       margin: 1pc 4% 0pc 4%;
+       padding: 0.1pc 1pc 0.1pc 1pc;
+       font-size: 10pt;
+       line-height: 1.15;
+    }
+
+    .toc-main
+    {
+     width: 600;
+	 text-align: center;
+       margin: 1pc 1pc 1pc 10%;
+       padding: 2pc 1pc 3pc 1pc;
+	 line-height: 0.1;
+    }
+
+    .boost-toc
+    {
+       float: right;
+       padding: 0.5pc;
+    }
+
+/*=============================================================================
+    Tables
+=============================================================================*/
+
+    .table-title, 
+    div.table p.title
+    {
+        margin-left: 4%;
+        padding-right: 0.5em; 
+        padding-left: 0.5em;
+    }
+
+    .informaltable table, 
+    .table table
+    {
+        width: 92%;
+        margin-left: 4%;
+        margin-right: 4%;
+    }
+
+    div.informaltable table, 
+    div.table table
+    {
+        padding: 4px;
+    }
+
+    /* Table Cells */
+    div.informaltable table tr td, 
+    div.table table tr td
+    {
+        padding: 0.5em;
+        text-align: left;
+    }
+
+    div.informaltable table tr th, 
+    div.table table tr th
+    {
+        padding: 0.5em 0.5em 0.5em 0.5em;
+        border: 1pt solid white;
+        font-size: 120%;
+    }
+
+/*=============================================================================
+    Blurbs
+=============================================================================*/
+
+    div.note,
+    div.tip,
+    div.important,
+    div.caution,
+    div.warning,
+    p.blurb
+    {
+        font-size: 10pt;
+        line-height: 1.2;
+        display: block;
+        margin: 1pc 4% 0pc 4%;
+        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+    }
+
+    p.blurb img
+    {
+        padding: 1pt;
+    }
+
+/*=============================================================================
+    Variable Lists
+=============================================================================*/
+
+    span.term
+    {
+        font-weight: bold;
+        font-size: 10pt;
+    }
+
+    div.variablelist table tbody tr td
+    {
+        text-align: left;
+        vertical-align: top;
+        padding: 0em 2em 0em 0em;
+        font-size: 10pt;
+    }
+
+    div.variablelist table tbody tr td p
+    {
+        margin: 0em 0em 0.5em 0em;
+    }
+
+    /* Make the terms in definition lists bold */
+    div.variablelist dl dt
+    {
+        font-weight: bold;
+        font-size: 10pt;
+    }
+
+    div.variablelist dl dd
+    {
+        margin: 1em 0em 1em 2em;
+        font-size: 10pt;
+    }
+
+/*=============================================================================
+    Misc
+=============================================================================*/
+
+    /* Title of books and articles in bibliographies */
+    span.title
+    {
+        font-style: italic;
+    }
+
+    span.underline
+    {
+        text-decoration: underline;
+    }
+
+    span.strikethrough
+    {
+        text-decoration: line-through;
+    }
+
+    /* Copyright, Legal Notice */
+    div div.legalnotice p
+    {
+        font-size: 8pt;
+        text-align: left
+    }
+
+/*=============================================================================
+    Colors
+=============================================================================*/
+
+    @media screen
+    {
+        /* Links */
+        a
+        {
+            color: #0C7445;
+        }
+
+        a:visited
+        {
+            color: #663974;
+        }
+
+        h1 a, h2 a, h3 a, h4 a, h5 a, h6 a,
+        h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover,
+        h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
+        {
+            text-decoration: none; /* no underline */
+            color: #000000;
+        }
+
+        /* Syntax Highlighting */
+        .keyword        { color: #0000AA; }
+        .identifier     { color: #000000; }
+        .special        { color: #707070; }
+        .preprocessor   { color: #402080; }
+        .char           { color: teal; }
+        .comment        { color: #800000; }
+        .string         { color: teal; }
+        .number         { color: teal; }
+        .white_bkd      { background-color: #E8FBE9; }
+        .dk_grey_bkd    { background-color: #A0DAAC; }
+
+        /* Copyright, Legal Notice */
+        .copyright
+        { 
+            color: #666666; 
+            font-size: small; 
+        }
+
+        div div.legalnotice p
+        {
+            color: #666666;
+        }
+
+        /* Program listing */
+        pre.synopsis
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        .programlisting, 
+        .screen
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Blurbs */
+        div.note,
+        div.tip,
+        div.important,
+        div.caution,
+        div.warning,
+        p.blurb
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc-main
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+
+        /* Tables */
+        div.informaltable table tr td, 
+        div.table table tr td
+        {
+            border: 1px solid #DCDCDC;
+            background-color: #FAFFFB;
+        }
+
+        div.informaltable table tr th, 
+        div.table table tr th
+        {
+            background-color: #E3F9E4;
+            border: 1px solid #DCDCDC;
+        }
+
+        /* Misc */
+        span.highlight
+        {
+            color: #00A000;
+        }
+    }
+
+    @media print
+    {
+        /* Links */
+        a
+        {
+            color: black;
+        }
+
+        a:visited
+        {
+            color: black;
+        }
+
+        .spirit-nav
+        {
+            display: none;
+        }
+
+        /* Program listing */
+        pre.synopsis
+        {
+            border: 1px solid gray;
+            background-color: #FAFFFB;
+        }
+
+        .programlisting, 
+        .screen
+        {
+            border: 1px solid gray;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        /* Table of contents */
+        .toc-main
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            background-color: #FAFFFB;
+        }
+
+        .informaltable table, 
+        .table table
+        {
+            border: 1px solid #DCDCDC;
+            border-bottom: 3px solid #9D9D9D;
+            border-right: 3px solid #9D9D9D;
+            border-collapse: collapse;
+            background-color: #FAFFFB;
+        }
+
+        /* Tables */
+        div.informaltable table tr td, 
+        div.table table tr td
+        {
+            border: 1px solid #DCDCDC;
+            background-color: #FAFFFB;
+        }
+
+        div.informaltable table tr th, 
+        div.table table tr th
+        {
+            border: 1px solid #DCDCDC;
+            background-color: #FAFFFB;
+        }
+
+        /* Misc */
+        span.highlight
+        {
+            font-weight: bold;
+        }
+    }
+
+DIV.qindex {
+	width: 100%;
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+DIV.nav {
+	width: 100%;
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+DIV.navtab {
+       background-color: #e8eef2;
+       border: 1px solid #84b0c7;
+       text-align: center;
+       margin: 2px;
+       margin-right: 15px;
+       padding: 2px;
+}
+TD.navtab {
+       font-size: 70%;
+}
+A.qindex {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D;
+}
+A.qindex:visited {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D
+}
+A.qindex:hover {
+	text-decoration: none;
+	background-color: #ddddff;
+}
+A.qindexHL {
+	text-decoration: none;
+	font-weight: bold;
+	background-color: #6666cc;
+	color: #ffffff;
+	border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+	text-decoration: none;
+	background-color: #6666cc;
+	color: #ffffff;
+}
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+.fragment {
+       font-family: monospace, fixed;
+       font-size: 95%;
+}
+PRE.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	margin-top: 4px;
+	margin-bottom: 4px;
+	margin-left: 2px;
+	margin-right: 8px;
+	padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 4px;
+	padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+
+DIV.groupHeader {
+       margin-left: 16px;
+       margin-top: 12px;
+       margin-bottom: 6px;
+       font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+
+TD.indexkey {
+	background-color: #e8eef2;
+	font-weight: bold;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+	background-color: #e8eef2;
+	font-style: italic;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TR.memlist {
+   background-color: #f0f0f0; 
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword       { color: #008000 }
+SPAN.keywordtype   { color: #604020 }
+SPAN.keywordflow   { color: #e08000 }
+SPAN.comment       { color: #800000 }
+SPAN.preprocessor  { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral   { color: #008080 }
+.mdescLeft {
+       padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.mdescRight {
+       padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.memItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplParams {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+       color: #606060;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.search     { color: #003399;
+              font-weight: bold;
+}
+FORM.search {
+              margin-bottom: 0px;
+              margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+               color: #000080;
+               font-weight: normal;
+               background-color: #e8eef2;
+}
+TD.tiny      { font-size: 75%;
+}
+.dirtab { padding: 4px;
+          border-collapse: collapse;
+          border: 1px solid #84b0c7;
+}
+TH.dirtab { background: #e8eef2;
+            font-weight: bold;
+}
+/* Style for detailed member documentation */
+.memtemplate {
+  font-size: 80%;
+  color: #606060;
+  font-weight: normal;
+} 
+.memnav { 
+  background-color: #e8eef2;
+  border: 1px solid #84b0c7;
+  text-align: center;
+  margin: 2px;
+  margin-right: 15px;
+  padding: 2px;
+}
+.memitem {
+  padding: 4px;
+  background-color: #eef3f5;
+  border-width: 1px;
+  border-style: solid;
+  border-color: #dedeee;
+  -moz-border-radius: 8px 8px 8px 8px;
+}
+.memname {
+  white-space: nowrap;
+  font-weight: bold;
+}
+.memdoc{
+  padding-left: 10px;
+}
+.memproto {
+  background-color: #d5e1e8;
+  width: 100%;
+  border-width: 1px;
+  border-style: solid;
+  border-color: #84b0c7;
+  font-weight: bold;
+  -moz-border-radius: 8px 8px 8px 8px;
+}
+.paramkey {
+  text-align: right;
+}
+.paramtype {
+  white-space: nowrap;
+}
+.paramname {
+  color: #602020;
+  font-style: italic;
+  white-space: nowrap;
+}
+/* End Styling for detailed member documentation */
+
+/* for the tree view */
+.ftvtree {
+	font-family: sans-serif;
+	margin:0.5em;
+}
+.directory { font-size: 9pt; font-weight: bold; }
+.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }
+.directory > h3 { margin-top: 0; }
+.directory p { margin: 0px; white-space: nowrap; }
+.directory div { display: none; margin: 0px; }
+.directory img { vertical-align: -30%; }
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/Thumbs.db
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/blank.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/caution.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/draft.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/home.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/important.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/next.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/note.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/prev.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/tip.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/toc-blank.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/toc-minus.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/toc-plus.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/up.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/images/warning.png
==============================================================================
Binary file. No diff available.
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/html/reference.css
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/html/reference.css	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,5 @@
+PRE.synopsis { 
+  background-color: #e0ffff;
+  border: thin solid blue;
+  padding: 1em
+}
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/signal_network.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/signal_network.qbk	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,216 @@
+
+[library Signal Network
+    [quickbook 1.4]
+    [version 0.1]
+    [authors [Rajko, Stjepan]]
+    [copyright 2007 Stjepan Rajko]
+    [purpose Operators and Components for signal-based networks.]
+    [license
+        Distributed under the Boost Software License, Version 1.0.
+        (See accompanying file LICENSE_1_0.txt or copy at
+        [@http://www.boost.org/LICENSE_1_0.txt])
+    ]
+]
+
+The Signal Network library aims to facilitate the
+implementation and interconnection of objects into signal networks using Boost.Signals.
+To see the rationale behind the Signal Network library, please visit the associated
+[@http://svn.boost.org/trac/boost/wiki/soc/2007/SignalNetwork GSoC page].
+
+[warning Signal Network is not an official Boost library.  It is being developed
+as a part of Google Summer of Code program.]
+
+* If you would like some more information about why one would want to connect objects into a signal-based
+  network, read my exploration of [link signal_network.dataflow Dataflow-oriented programming approaches in C++].
+* If you are interested in the progress of the implementation, see
+    * [link signal_network.discussion Discussion on Boost Community Feedback]
+    * [link signal_network.download Download and Changelog]
+    * [@doxygen/index.html Tutorial and Reference]
+
+[section:dataflow Dataflow-oriented programming approaches in C++]
+
+[note The purpose of this section is to place the Signal Network library in the bigger picture.
+It is only a start, so please forgive the incompleteness, possible inaccuracies,
+and the present lack of a real "point" to the section.  A
+lot of the ideas in this section have come from a discussion with Tobias Schwinger.]
+
+The Signal Network library attempts to afford some of the benefits of
+[@http://en.wikipedia.org/wiki/Dataflow_language Dataflow languages] to C++.  It does so by
+facilitating large-scale use of Boost.Signals as a mechanism to model the transfer
+of data between processing components.
+
+To explore this further, let us take a step back and (rather informally) divide things as follows:
+
+* on one hand, there is /data/ (variables, objects, etc...)
+* on the other, there are /computational components/ (functions, methods, etc...)
+
+Development of C++ programs is usually focused on the development of the computational
+components.  Data can then be processed by the computational
+components by applying the components to the data in some appropriate way.
+There are several ways of providing data to the computational components:
+
+* by placing it in a location where the component will read it
+* by passing it as a parameter in a call
+* (a combination of the above) by passing the location of the data as a parameter in a call
+
+Similarly, there are several ways of getting data out of a computation component
+
+* the component makes a function / signal call that carries the data as a parameter
+* the component places a value somewhere where it can be read
+* the component returns it as a return value
+
+Please note that there is a separation between providing the data to a component, and invoking the
+component.  In some cases, the two happen simoultaneously (when the data is passed and returned
+via a function call), while in others invoking the computational component
+can happen separately from providing the data (at least from a modeling perspective).
+An example of the latter is a computational component which uses data stored in a particular location.
+We can place the data in that location much before invoking the computational component.
+
+[h4 Signal-based approach and pin-based approach]
+
+The Signal Network library relies on moving the data via function parameters and return values.
+Here, the Boost.Signals library is used to model these individual data channels which couple
+the data transfer and the computational component invocation.  This is one possible dataflow-oriented
+approach.
+
+There is another approach, proposed by Tobias Schwinger, in which the computational components are
+connected by "pins". Here, the data is communicated by
+placing it in locations where the components will read it, and reading it
+from locations where the components write them.  Also, rather than the components
+activating each other, the network itself activates the components manually in an optimized
+order/way.
+
+Each of these approaches has different properties.  In the signal-based approach, the knowledge of the
+network is local - each component knows about where its signals are going, but it knows nothing
+of where the signals arriving at its own slots are coming from.  Unless we record how the network was
+constructed, there is no "big picture" of what the complete network looks like.  Similarly,
+the network is executed autonomously - the components invoke one another when appropriate, and
+no external control mechanism is required.
+
+In the pin-based approach, the situation is reversed.  There is a "big picture" of what the complete
+network looks like, and the network control mechanism uses this information to decide when a component
+should be invoked and to manage the data shared between the components via pins.  Global
+knowledge of the network can be used for better optimization, serialization, etc.  However, it may
+come at the price of some intrusiveness to the computation components.
+
+Even though these two frameworks are sufficiently different, they aim for the same goal:
+a dataflow-oriented approach using the C++ language.  It is possible that an application
+designed in a dataflow-oriented way could be implemented using either of the frameworks,
+that one framework could be convertible to the other, or that using both frameworks
+simoultaneously is in fact the best solution.  Even though investigating the relationships
+between these two frameworks, or implementing both, would be outside the scope of this
+Google Summer of Code project, I believe it is worthwhile to keep the connections in
+mind while designing and implementing the Signal Network library.
+
+For example, both frameworks could possibly benefit from the separation of the network
+creation layer (which may include factories and reflection) from the network execution
+layer (which only includes the necessary computation components).  Also, allowing additional
+mechanisms for network creation such as through a visual GUI designer, serialization/deserialization
+etc. would also be beneficial.  If I address any of these for the GSoC project, I will try to
+address them in a way that might be useful for both frameworks.
+
+[endsect]
+
+[section:discussion Discussion on Boost Community Feedback]
+
+The following summarizes some of the suggestions / comments given by the Boost community, and
+what has been done to incorporate this feedback.
+
+[* Tobias Schwinger indicated that the library could be used for pulling rather than pushing data.]
+
+* [@doxygen/index.html#signal_network_pull_example An example] which illustrates this has been addded.
+
+[* James Jones suggested that a ||-like operator could be used for branching, and >> for chaining.]
+
+* operator >= which was orignally used for branching has been replaced with operator |.
+* Since the most straightforward way for me to implement chaining/branching is using a left-to-right
+operator for one and a right-to-left operator for the other, I decided to stay with >>= as the chaining
+operator.
+
+[* Paolo Coletta suggested a "video_generator >>= ( effect1 && effect2 ) >>= image_sum" - like syntax that
+  would allow parallel processing of signals (identified as the "join" pattern by Yigong Liu)]
+
+* I have started to implement thread-related components in
+[@doxygen/classboost_1_1signal__network_1_1signet_1_1timed__generator.html signet::timed_generator] and
+[@doxygen/classboost_1_1signal__network_1_1signet_1_1mutex.html signet::mutex].
+More sophisticated threading components, control and syntax to follow.
+
+[* Yigong Liu suggested enhanced support for common network topologies, such as mesh. ]
+
+* I have implemented a prototype
+[@doxygen/classboost_1_1signal__network_1_1signet_1_1chain.html signet::chain] topology
+to get a start on this concept.
+
+[* Braddock Gaskill pointed out the relationship with the "pipes and filters" pattern, and suggested
+   the possibility of using functions as filters.  He also suggested the library would me more useful
+   if different functions executed in parallel threads, or were queued to specific worker threads,
+   if the library would provide functionality to control and schedule the execution of the invoked functions,
+   or traverse the call graph.]
+
+* In light of the possible connection with the "pipes and filters" pattern, the base
+  object for signal network components which receive a signal and send a signal has
+  been changed to
+  [@doxygen/classboost_1_1signal__network_1_1signet_1_1filter.html signet::filter].
+  I was not successful in finding a formal definition
+  of what "pipes and filters" semantics should be, so I am not sure whether this is appropriate.
+* [@doxygen/classboost_1_1signal__network_1_1signet_1_1function.html signet::function]
+  now offers the proposed functionality of converting functions into filters.
+* Threading and scheduling of the invoked functions is something I plan to address.
+* Providing a call graph would be a great feature, but I am not sure what the best
+  way to address that is, since each component might be of a different type.  Perhaps a graph
+  in which only the edges are labeled (with connection objects) would be doable and useful.
+
+[endsect]
+
+[section:download Download and Changelog]
+
+Please keep in mind that this code is a prototype and far from the finished product.  I am learning
+as I go, and any feedback on improving the implementation is very welcome.
+
+GSoC Development version (*latest*) \[located in the Boost sandbox /SOC/2007/signals\]
+
+* converting documentation to boostbook, using Boost.Build
+
+Proposal for Boost / Google SoC version  \[[@signal_network.zip download]\]
+
+* finished the signet::socket_sender and signet::socket_receiver components
+
+Draft proposal for Boost / Google SoC version
+
+* changed the file and namespace structure
+* implemented a file-iteration based mechanism for arity-dependent classes
+* changed the operators used
+* signal_link is now signet::filter and does not need to know it's descendant's type
+* implemented signet::junction, signet::selector, signet::storage, signet::timed_generator,
+  signet::mutex, signet::chain, signet::function classes
+
+Original request for interest version available as attachment to
+[@http://listarchives.boost.org/Archives/boost/2007/02/116869.php]
+
+[endsect]
+
+[section:reference Reference]
+
+The reference for this library is [@doxygen/index.html generated separately].
+
+[endsect]
+
+[section:acknowledgements Acknowledgements]
+
+* Thanks to all the members of the Boost community who have expressed an interest in this library
+  and contributed [link signal_network.discussion valuable feedback].
+* Thanks to Douglas Gregor for making himself available as a mentor for this project.
+* Thanks to Tobias Schwinger for a most valuable discussion on various [link signal_network.dataflow
+  dataflow-oriented approaches and ideas].
+  
+[endsect]
+
+[section:license License]
+
+Copyright 2007 Stjepan Rajko.
+Distributed under the Boost Software License, Version 1.0. (See
+accompanying file LICENSE_1_0.txt or copy at
+[@http://www.boost.org/LICENSE_1_0.txt])
+
+
+[endsect]
\ No newline at end of file
Added: sandbox/SOC/2007/signals/libs/signal_network/doc/signal_network_doxygen.xml
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/doc/signal_network_doxygen.xml	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,398 @@
+<?xml version="1.0" standalone="yes"?>
+<library-reference><header name="boost/signal_network/base.hpp"><namespace name="boost"><namespace name="signal_network"><struct name="slot_selector_t"><template>
+      <template-type-parameter name="T"/>
+      <template-type-parameter name="Signature"/>
+    </template><data-member name="link"><type>T &</type></data-member><data-member name="func"><type><emphasis>unspecified</emphasis></type></data-member><method-group name="public member functions"><method name="conversion-operator" cv=""><type>T &</type></method></method-group><constructor><parameter name="link"><paramtype>T &</paramtype></parameter><parameter name="func"><paramtype><emphasis>unspecified</emphasis></paramtype></parameter></constructor></struct><namespace name="signet"><class name="filter_base"/></namespace><function name="slot_selector"><type>slot_selector_t< T, Signature ></type><template>
+          <template-type-parameter name="Signature"/>
+          <template-type-parameter name="T"/>
+        </template><parameter name="link"><paramtype>T &</paramtype></parameter><parameter name="func"><paramtype><emphasis>unspecified</emphasis></paramtype></parameter><purpose>Allows functions other than operator() to serve as signet::filter slots. </purpose><description><para><para>signet::filter for an example </para>
+</para></description></function><function name="operator>>="><type>boost::enable_if< boost::is_base_of< signet::filter_base, Filter >, Filter & >::type</type><template>
+          <template-type-parameter name="Filter"/>
+          <template-type-parameter name="T"/>
+        </template><parameter name="filter"><paramtype>Filter &</paramtype></parameter><parameter name="link"><paramtype>T &</paramtype></parameter><purpose>Connects a sequence of components using signals. </purpose><description><para>This operator is identical to signet::filter::operator>= (it connects the left component to the right component, and returns a reference to the left component), except it is evaluated right to left. This makes it semantics more suitable for connecting a chain of connections. </para></description></function><function name="operator|"><type>boost::enable_if< boost::is_base_of< signet::filter_base, Filter >, Filter & >::type</type><template>
+          <template-type-parameter name="Filter"/>
+          <template-type-parameter name="T"/>
+        </template><parameter name="filter"><paramtype>Filter &</paramtype></parameter><parameter name="link"><paramtype>T &</paramtype></parameter><purpose>Allows branching in a component connection sequence. </purpose><description><para>This operator is identical to signet::filter::operator>>=, (it connects the left component to the right component, and returns a reference to the left component) except it is evaluated left to right. This makes its semantics more suitable for branching connections. </para></description></function><function name="operator>>="><type>boost::enable_if< boost::is_base_of< signet::filter_base, Filter >, Filter & >::type</type><template>
+          <template-type-parameter name="Filter"/>
+          <template-type-parameter name="T"/>
+          <template-type-parameter name="Signature"/>
+        </template><parameter name="filter"><paramtype>Filter &</paramtype></parameter><parameter name="link"><paramtype>slot_selector_t< T, Signature ></paramtype></parameter><purpose>Allows slot functions other than operator() to be used in a sequence of components. </purpose><description><para><para>slot_selector() </para>
+</para></description></function><function name="operator|"><type>boost::enable_if< boost::is_base_of< signet::filter_base, Filter >, Filter & >::type</type><template>
+          <template-type-parameter name="Filter"/>
+          <template-type-parameter name="T"/>
+          <template-type-parameter name="Signature"/>
+        </template><parameter name="filter"><paramtype>Filter &</paramtype></parameter><parameter name="link"><paramtype>slot_selector_t< T, Signature ></paramtype></parameter><purpose>Allows slot functions other than operator() to be used with branching. </purpose><description><para><para>slot_selector() </para>
+</para></description></function><function name="operator>>="><type>boost::signal< Signature > &</type><template>
+          <template-type-parameter name="Signature"/>
+          <template-type-parameter name="T"/>
+        </template><parameter name="signal"><paramtype>boost::signal< Signature > &</paramtype></parameter><parameter name="link"><paramtype>T &</paramtype></parameter></function><function name="operator>="><type>boost::signal< Signature > &</type><template>
+          <template-type-parameter name="Signature"/>
+          <template-type-parameter name="T"/>
+        </template><parameter name="signal"><paramtype>boost::signal< Signature > &</paramtype></parameter><parameter name="link"><paramtype>T &</paramtype></parameter></function></namespace></namespace><macro name="SIGNAL_NETWORK_TRACKABLE"/><macro name="SIGNAL_NETWORK_TEMPLATE_CLASS"/><macro name="SIGNAL_NETWORK_TEMPLATE_NO_RETURNS"/><macro name="SIGNAL_NETWORK_TEMPLATE_TYPENAME_T"/><macro name="SIGNAL_NETWORK_TEMPLATE_DETAIL"/><macro name="SIGNAL_NETWORK_TEMPLATE_NO_MAIN_CLASS"/></header><header name="boost/signal_network/chain.hpp"><macro name="SIGNAL_NETWORK_TEMPLATE_CLASS"/><macro name="SIGNAL_NETWORK_TEMPLATE_BASE"/><macro name="SIGNAL_NETWORK_TEMPLATE_TYPENAME_T"/></header><header name="boost/signal_network/chain.hpp"><namespace name="boost"><namespace name="signal_network"><namespace name="signet"><class name="chain"><template>
+      <template-type-parameter name="T"/>
+      <template-type-parameter name="Signature"/>
+    </template><purpose>Connects a number of components of the same type in a chain. </purpose><description><para>
+<para>Since I can't get Doxygen to unravel the preprocessed definition of this class, the documentation was generated through a non-functioning class Doxygen could read.</para>
+Example:<para> <programlisting>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
+</programlisting> </para>
+</para></description><method-group name="public member functions"><method name="operator()" cv=""><type/><parameter name=""><paramtype>...</paramtype></parameter><purpose>Sending a signal to the chain will forward it to the first component in the chain. </purpose></method><method name="default_signal" cv=""><type>boost::signal< Signature > &</type><purpose>The default signal coming out of the chain is the default signal of the last component in the chain. </purpose></method></method-group><constructor><parameter name="copies"><paramtype>size_t</paramtype></parameter><purpose>Constructs a chain composed of instances of T. </purpose></constructor><constructor><parameter name="copies"><paramtype>size_t</paramtype></parameter><parameter name="component"><paramtype>T &</paramtype></parameter><purpose>Constructs a chain composed of copies of component. </purpose></constructor></class></namespace></namespace></namespace></header><header name="boost/signal_network/collector.hpp"><namespace name="boost
"><namespace name="signal_network"><namespace name="signet"><class name="collector"><template>
+      <template-type-parameter name="Signature"/>
+    </template><purpose>Stores data received via a signal so that it can be retrieved. </purpose><description><para>
+Todo<para>Currently collector only supports signatures of type void (type).</para>Example:  <programlisting>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()
+</programlisting> </para></description><typedef name="arg1_value_type"><purpose>Type of the stored value. </purpose><type>boost::remove_reference< typename boost::function_traits< Signature >::arg1_type >::type</type></typedef><method-group name="public member functions"><method name="operator()" cv=""><type>void</type><parameter name="arg1"><paramtype>typename boost::function_traits< Signature >::arg1_type</paramtype></parameter><purpose>Stores the value in the signal. </purpose></method><method name="operator()" cv=""><type>call_traits< arg1_value_type >::const_reference</type><purpose>Returns the last stored value. </purpose></method></method-group><constructor><purpose>The default constructor will not initialize the stored value. </purpose></constructor><constructor><parameter name="init"><paramtype>typename boost::call_traits< arg1_value_type >::param_type</paramtype></parameter><purpose>This constructor will initialize the stored value to what is provided. </purpose></con
structor></class></namespace></namespace></namespace></header><header name="boost/signal_network/filter.hpp"><namespace name="boost"><namespace name="signal_network"><namespace name="signet"><class name="filter"><template>
+      <template-type-parameter name="Signature"/>
+    </template><purpose>Provides a basis for filters (components that receive and send a signal). </purpose><description><para>
+Use this class as a base class for classes that produce a signal of a particular signature.</para><para>Example:<para> <programlisting>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()
+</programlisting> </para>
+</para></description><typedef name="signature_type"><type>Signature</type></typedef><typedef name="signal_type"><type>boost::signal< Signature ></type></typedef><typedef name="result_type"><type>boost::function_traits< Signature >::result_type</type></typedef><method-group name="public member functions"><method name="default_signal" cv=""><type>signal_type &</type><purpose>Returns the default out signal. </purpose></method><method name="disconnect_all_slots" cv=""><type>void</type><purpose>Disconnects all slots connected to the signet::filter. </purpose></method></method-group><constructor><parameter name=""><paramtype>const <classname>filter</classname> &</paramtype></parameter></constructor><copy-assignment><parameter name=""><paramtype>const <classname>filter</classname> &</paramtype></parameter></copy-assignment><constructor/></class></namespace></namespace></namespace></header><header name="boost/signal_network/function.hpp"><macro name="SIGNAL_NETWORK_TEMPLATE_CLASS"/><macro na
me="SIGNAL_NETWORK_TEMPLATE_BASE"/><macro name="SIGNAL_NETWORK_TEMPLATE_NO_RETURNS"/></header><header name="boost/signal_network/function.hpp"><namespace name="boost"><namespace name="signal_network"><namespace name="signet"><class name="function"><template>
+      <template-type-parameter name="Signature"/>
+    </template><inherit access="public">boost::signal_network::signet::filter< Signature ></inherit><purpose>Converts a function into a Signal Network filter. </purpose><description><para>
+<para>Since I can't get Doxygen to unravel the preprocessed definition of this class, the documentation was generated through a non-functioning class Doxygen could read.</para>
+The signet::function object will receive signals of signature void(function arguments), and send signals of signature void(function return type).</para><para>Example:<para> <programlisting>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()
+</programlisting> </para>
+</para></description><method-group name="public member functions"><method name="operator()" cv=""><type>void</type><parameter name=""><paramtype>...</paramtype></parameter><description><para>Calls the function with the arguments of the signal, and then sends a signal with the return value of the function </para></description></method></method-group><constructor><parameter name="f"><paramtype>boost::function< Signature ></paramtype></parameter><purpose>Initializes the object with the specified function. </purpose></constructor></class></namespace></namespace></namespace></header><header name="boost/signal_network/junction.hpp"><macro name="SIGNAL_NETWORK_TEMPLATE_CLASS"/><macro name="SIGNAL_NETWORK_TEMPLATE_BASE"/></header><header name="boost/signal_network/junction.hpp"><namespace name="boost"><namespace name="signal_network"><namespace name="signet"><class name="junction"><template>
+      <template-type-parameter name="Signature"/>
+    </template><inherit access="public">boost::signal_network::signet::filter< Signature ></inherit><purpose>Forwards a single signal to multiple slots, and can also be disabled to stop the flow of signals. </purpose><description><para>
+<para>Since I can't get Doxygen to unravel the preprocessed definition of this class, the documentation was generated through a non-functioning class Doxygen could read.</para>
+Example:<para> <programlisting>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()
+</programlisting> </para>
+</para></description><method-group name="public member functions"><method name="enable" cv=""><type>void</type><purpose>Enables the junction (signals will be forwarded). </purpose></method><method name="disable" cv=""><type>void</type><purpose>Disables the junction (signals will not be forwarded). </purpose></method><method name="operator()" cv=""><type>boost::function_traits< Signature >::result_type</type><parameter name=""><paramtype>...</paramtype></parameter><purpose>Upon receiving this signal, the same signal will be sent out if the junction is enabled. </purpose></method></method-group></class></namespace></namespace></namespace></header><header name="boost/signal_network/mutex.hpp"><macro name="SIGNAL_NETWORK_TEMPLATE_CLASS"/><macro name="SIGNAL_NETWORK_TEMPLATE_BASE"/></header><header name="boost/signal_network/mutex.hpp"><namespace name="boost"><namespace name="signal_network"><namespace name="signet"><class name="mutex"><template>
+      <template-type-parameter name="Signature"/>
+    </template><inherit access="public">boost::signal_network::signet::filter< Signature ></inherit><purpose>Ensures a component is processing only one signal at a time when using multiple threads. </purpose><description><para>
+<para>Since I can't get Doxygen to unravel the preprocessed definition of this class, the documentation was generated through a non-functioning class Doxygen could read.</para>
+Example:<para> <programlisting>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
+</programlisting> </para>
+</para></description><method-group name="public member functions"><method name="operator()" cv=""><type>boost::function_traits< Signature >::result_type</type><parameter name=""><paramtype>...</paramtype></parameter><purpose>Locks an internal mutex and forwards the signal. </purpose></method></method-group></class></namespace></namespace></namespace></header><header name="boost/signal_network/selector.hpp"><macro name="SIGNAL_NETWORK_SELECTOR_INPUT" kind="functionlike"><macro-parameter name="z"/><macro-parameter name="n"/><macro-parameter name="_arity"/></macro><macro name="SIGNAL_NETWORK_TEMPLATE_CLASS"/><macro name="SIGNAL_NETWORK_TEMPLATE_BASE"/><macro name="SIGNAL_NETWORK_TEMPLATE_ITERATE2"/></header><header name="boost/signal_network/selector.hpp"><namespace name="boost"><namespace name="signal_network"><namespace name="signet"><class name="selector"><template>
+      <template-type-parameter name="Signature"/>
+    </template><inherit access="public">boost::signal_network::signet::filter< Signature ></inherit><purpose>Allows selection of signals from multiple inputs. </purpose><description><para>
+<para>Since I can't get Doxygen to unravel the preprocessed definition of this class, the documentation was generated through a non-functioning class Doxygen could read.</para>
+This can be used to determine which signal out of a group of signals will continue through the selector (the others will not be forwarded).</para><para>Example:<para> <programlisting>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()
+</programlisting> </para>
+</para></description><method-group name="public member functions"><method name="select" cv=""><type>void</type><parameter name="input"><paramtype>int</paramtype></parameter><purpose>Selects the indicated input (if source is 0, no input will be selected). </purpose></method><method name="inputN" cv=""><type>boost::function_traits< Signature >::result_type</type><parameter name=""><paramtype>...</paramtype></parameter><purpose>If N is selected, the signal received at this slot will be forwared. </purpose></method><method name="slotN" cv=""><type>slot_selector_t< <classname>selector</classname>, Signature ></type><purpose>Returns the slot selector for inputN. </purpose></method></method-group></class></namespace></namespace></namespace></header><header name="boost/signal_network/socket_receiver.hpp"><macro name="SIGNAL_NETWORK_SOCKET_UNPACK" kind="functionlike"><macro-parameter name="z"/><macro-parameter name="n"/><macro-parameter name="text"/></macro><macro name="SIGNAL_NETWORK_TEMPLATE_CLASS"/><m
acro name="SIGNAL_NETWORK_TEMPLATE_BASE"/></header><header name="boost/signal_network/socket_receiver.hpp"><namespace name="boost"><namespace name="signal_network"><namespace name="signet"><class name="socket_receiver"><template>
+      <template-type-parameter name="T"/>
+      <template-type-parameter name="Signature"/>
+    </template><inherit access="public">boost::signal_network::signet::storage< Signature ></inherit><purpose>Receives serializable signals through a Boost asio socket. </purpose><description><para>
+<para>Since I can't get Doxygen to unravel the preprocessed definition of this class, the documentation was generated through a non-functioning class Doxygen could read. </para>
+Todo<para>socket_sender only works for Signatures of return type void.</para>Example:<para> <programlisting>// 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
+</programlisting> </para>
+</para></description><method-group name="public member functions"><method name="operator()" cv=""><type>void</type><purpose>Sets the receiver to wait for a packet and send its contents via the signal. </purpose></method></method-group><constructor><parameter name="socket"><paramtype>asio::ip::tcp::socket &</paramtype></parameter><purpose>Initializes the socket_sender to use the provided socket. </purpose></constructor></class></namespace></namespace></namespace></header><header name="boost/signal_network/socket_sender.hpp"><macro name="SIGNAL_NETWORK_SOCKET_PACK" kind="functionlike"><macro-parameter name="z"/><macro-parameter name="n"/><macro-parameter name="text"/></macro><macro name="SIGNAL_NETWORK_TEMPLATE_CLASS"/></header><header name="boost/signal_network/socket_sender.hpp"><namespace name="boost"><namespace name="signal_network"><namespace name="signet"><class name="socket_sender"><template>
+      <template-type-parameter name="T"/>
+      <template-type-parameter name="Signature"/>
+    </template><purpose>Sends serializable signals through a Boost asio socket. </purpose><description><para>
+<para>Since I can't get Doxygen to unravel the preprocessed definition of this class, the documentation was generated through a non-functioning class Doxygen could read. </para>
+Todo<para>socket_sender only works for Signatures of return type void.</para>Example:<para> <programlisting>// 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
+</programlisting> </para>
+</para></description><method-group name="public member functions"><method name="operator()" cv=""><type>void</type><parameter name=""><paramtype>...</paramtype></parameter><purpose>Serializes each of the arguments and sends them in a single packet through the socket. </purpose></method></method-group><constructor><parameter name="socket"><paramtype>asio::ip::tcp::socket &</paramtype></parameter><purpose>Initializes the socket_sender to use the provided socket. </purpose></constructor></class></namespace></namespace></namespace></header><header name="boost/signal_network/storage.hpp"><namespace name="boost"><namespace name="signal_network"><namespace name="signet"><class name="storage"><template>
+      <template-type-parameter name="Signature"/>
+    </template><inherit access="public">boost::signal_network::signet::filter< Signature ></inherit><purpose>Upon receiving an empty signal, outputs the stored value. </purpose><description><para>
+<para>Since I can't get Doxygen to unravel the preprocessed definition of this class, the documentation was generated through a non-functioning class Doxygen could read.</para>
+Example:<para> <programlisting>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()
+</programlisting> </para>
+</para></description><typedef name="argN_value_type"><purpose>Stored value type. </purpose><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public member functions"><method name="operator()" cv=""><type>boost::function_traits< Signature >::result_type</type><purpose>Sends a signal containing the stored values. </purpose></method><method name="operator()" cv=""><type>void</type><parameter name="arg1"><paramtype>typename boost::call_traits< arg1_value_type >::param_type</paramtype></parameter><parameter name="arg2"><paramtype>typename boost::call_traits< arg2_value_type >::param_type</paramtype></parameter><parameter name=""><paramtype>...</paramtype></parameter><purpose>Sets the stored values. </purpose></method><method name="valueN" cv=""><type>boost::call_traits< argN_value_type >::param_type</type><purpose>Returns the stored value of parameter N using a param_type cast. </purpose></method></method-group></class></namespace></namespace></namespace><macro na
me="SIGNAL_NETWORK_ARGVAR_TYPEDEF" kind="functionlike"><macro-parameter name="z"/><macro-parameter name="n"/><macro-parameter name="text"/></macro><macro name="SIGNAL_NETWORK_ARGVAR_TYPEDEFS" kind="functionlike"><macro-parameter name="n"/></macro><macro name="SIGNAL_NETWORK_ARGVAR" kind="functionlike"><macro-parameter name="z"/><macro-parameter name="n"/><macro-parameter name="text"/></macro><macro name="SIGNAL_NETWORK_ARGVARS" kind="functionlike"><macro-parameter name="n"/></macro><macro name="SIGNAL_NETWORK_ARGVAR_TYPENAME" kind="functionlike"><macro-parameter name="n"/><macro-parameter name="text"/></macro><macro name="SIGNAL_NETWORK_ARGVAR_TYPENAME_COMMA" kind="functionlike"><macro-parameter name="z"/><macro-parameter name="n"/><macro-parameter name="text"/></macro><macro name="SIGNAL_NETWORK_ARGVAR_TYPENAMES" kind="functionlike"><macro-parameter name="n"/><macro-parameter name="text"/></macro><macro name="SIGNAL_NETWORK_ARGVAR_NAME" kind="functionlike"><macro-parameter name="n"/></macro><macro name="SIG
NAL_NETWORK_ARGVAR_NAME_COMMA" kind="functionlike"><macro-parameter name="z"/><macro-parameter name="n"/><macro-parameter name="text"/></macro><macro name="SIGNAL_NETWORK_ARGVAR_NAMES" kind="functionlike"><macro-parameter name="n"/></macro><macro name="SIGNAL_NETWORK_SET_ARGVAR" kind="functionlike"><macro-parameter name="z"/><macro-parameter name="n"/><macro-parameter name="text"/></macro><macro name="SIGNAL_NETWORK_SET_ARGVARS" kind="functionlike"><macro-parameter name="n"/></macro><macro name="SIGNAL_NETWORK_RETURN_STORED" kind="functionlike"><macro-parameter name="z"/><macro-parameter name="n"/><macro-parameter name="text"/></macro><macro name="SIGNAL_NETWORK_STORAGE_SIGNAL" kind="functionlike"><macro-parameter name=""/></macro><macro name="SIGNAL_NETWORK_TEMPLATE_CLASS"/><macro name="SIGNAL_NETWORK_TEMPLATE_BASE"/><macro name="SIGNAL_NETWORK_TEMPLATE_ITERATE_MAIN_CLASS"/></header><header name="boost/signal_network/storage.hpp"><namespace name="boost"><namespace name="signal_network"><namespace name="sign
et"><class name="storage"><template>
+      <template-type-parameter name="Signature"/>
+    </template><inherit access="public">boost::signal_network::signet::filter< Signature ></inherit><purpose>Upon receiving an empty signal, outputs the stored value. </purpose><description><para>
+<para>Since I can't get Doxygen to unravel the preprocessed definition of this class, the documentation was generated through a non-functioning class Doxygen could read.</para>
+Example:<para> <programlisting>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()
+</programlisting> </para>
+</para></description><typedef name="argN_value_type"><purpose>Stored value type. </purpose><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public member functions"><method name="operator()" cv=""><type>boost::function_traits< Signature >::result_type</type><purpose>Sends a signal containing the stored values. </purpose></method><method name="operator()" cv=""><type>void</type><parameter name="arg1"><paramtype>typename boost::call_traits< arg1_value_type >::param_type</paramtype></parameter><parameter name="arg2"><paramtype>typename boost::call_traits< arg2_value_type >::param_type</paramtype></parameter><parameter name=""><paramtype>...</paramtype></parameter><purpose>Sets the stored values. </purpose></method><method name="valueN" cv=""><type>boost::call_traits< argN_value_type >::param_type</type><purpose>Returns the stored value of parameter N using a param_type cast. </purpose></method></method-group></class></namespace></namespace></namespace></header>
<header name="boost/signal_network/timed_generator.hpp"><namespace name="boost"><namespace name="signal_network"><namespace name="signet"><class name="timed_generator"><template>
+      <template-type-parameter name="Signature"/>
+    </template><inherit access="public">boost::signal_network::signet::storage< Signature ></inherit><purpose>Creates its own thread and periodically sends a signal with the stored value. </purpose><description><para>
+<para>Since I can't get Doxygen to unravel the preprocessed definition of this class, the documentation was generated through a non-functioning class Doxygen could read.</para>
+Example:<para> <programlisting>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
+</programlisting> </para>
+</para></description><method-group name="public member functions"><method name="enable" cv=""><type>void</type><parameter name="interval"><paramtype>double</paramtype><description><para>Sets the time interval (in seconds) at which the signal is sent. </para></description></parameter><parameter name="signal_count"><paramtype>unsigned</paramtype><default>0</default><description><para>The signal will be sent signal_count times, or indefinitelly if signal_count==0. </para></description></parameter><purpose>Sets the object to send the stored value at specified time intervals. </purpose><description><para>
+</para></description></method><method name="disable" cv=""><type>void</type><purpose>Stops the sending of signals and suspends the thread. </purpose></method><method name="join" cv=""><type>void</type><purpose>Forces the thread to terminate. </purpose></method></method-group><constructor><purpose>Default constructor. Starts the thread, but signals won't be sent until the enable() function is called. </purpose></constructor><destructor><purpose>The thread should be joined by the time the destructor is called. </purpose></destructor><method-group name="private member functions"><method name="thread_function" cv=""><type>void</type></method></method-group></class></namespace></namespace></namespace></header><header name="C:/Development/boost_sandbox/SOC/2007/signals/libs/signal_network/doc/dox/signal_network.hpp"><namespace name="boost"><namespace name="signal_network"/></namespace></header></library-reference>
Added: sandbox/SOC/2007/signals/libs/signal_network/example/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/example/Jamfile.v2	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,18 @@
+# Copyright 2007 Stjepan Rajko.
+# Distributed under the Boost Software License, Version 1.0. (See
+# accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+
+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
+    ;
+
+exe example : example.cpp ;
\ No newline at end of file
Added: sandbox/SOC/2007/signals/libs/signal_network/example/example.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/example/example.cpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,604 @@
+// 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/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/test/Jamfile.v2	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,22 @@
+# Copyright 2007 Stjepan Rajko.
+# Distributed under the Boost Software License, Version 1.0. (See
+# accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+
+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
Added: sandbox/SOC/2007/signals/libs/signal_network/test/test.cpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2007/signals/libs/signal_network/test/test.cpp	2007-05-30 02:22:42 EDT (Wed, 30 May 2007)
@@ -0,0 +1,604 @@
+// 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;
+}