Boost logo

Boost-Commit :

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&#x0D;&#x0A;bjam --v2 $(ConfigurationName)"
+ ReBuildCommandLine="cd ../../doc&#x0D;&#x0A;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://lists.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 &amp;</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 &amp;</type></method></method-group><constructor><parameter name="link"><paramtype>T &amp;</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&lt; T, Signature &gt;</type><template>
+ <template-type-parameter name="Signature"/>
+ <template-type-parameter name="T"/>
+ </template><parameter name="link"><paramtype>T &amp;</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&gt;&gt;="><type>boost::enable_if&lt; boost::is_base_of&lt; signet::filter_base, Filter &gt;, Filter &amp; &gt;::type</type><template>
+ <template-type-parameter name="Filter"/>
+ <template-type-parameter name="T"/>
+ </template><parameter name="filter"><paramtype>Filter &amp;</paramtype></parameter><parameter name="link"><paramtype>T &amp;</paramtype></parameter><purpose>Connects a sequence of components using signals. </purpose><description><para>This operator is identical to signet::filter::operator&gt;= (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&lt; boost::is_base_of&lt; signet::filter_base, Filter &gt;, Filter &amp; &gt;::type</type><template>
+ <template-type-parameter name="Filter"/>
+ <template-type-parameter name="T"/>
+ </template><parameter name="filter"><paramtype>Filter &amp;</paramtype></parameter><parameter name="link"><paramtype>T &amp;</paramtype></parameter><purpose>Allows branching in a component connection sequence. </purpose><description><para>This operator is identical to signet::filter::operator&gt;&gt;=, (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&gt;&gt;="><type>boost::enable_if&lt; boost::is_base_of&lt; signet::filter_base, Filter &gt;, Filter &amp; &gt;::type</type><template>
+ <template-type-parameter name="Filter"/>
+ <template-type-parameter name="T"/>
+ <template-type-parameter name="Signature"/>
+ </template><parameter name="filter"><paramtype>Filter &amp;</paramtype></parameter><parameter name="link"><paramtype>slot_selector_t&lt; T, Signature &gt;</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&lt; boost::is_base_of&lt; signet::filter_base, Filter &gt;, Filter &amp; &gt;::type</type><template>
+ <template-type-parameter name="Filter"/>
+ <template-type-parameter name="T"/>
+ <template-type-parameter name="Signature"/>
+ </template><parameter name="filter"><paramtype>Filter &amp;</paramtype></parameter><parameter name="link"><paramtype>slot_selector_t&lt; T, Signature &gt;</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&gt;&gt;="><type>boost::signal&lt; Signature &gt; &amp;</type><template>
+ <template-type-parameter name="Signature"/>
+ <template-type-parameter name="T"/>
+ </template><parameter name="signal"><paramtype>boost::signal&lt; Signature &gt; &amp;</paramtype></parameter><parameter name="link"><paramtype>T &amp;</paramtype></parameter></function><function name="operator&gt;="><type>boost::signal&lt; Signature &gt; &amp;</type><template>
+ <template-type-parameter name="Signature"/>
+ <template-type-parameter name="T"/>
+ </template><parameter name="signal"><paramtype>boost::signal&lt; Signature &gt; &amp;</paramtype></parameter><parameter name="link"><paramtype>T &amp;</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&lt;DoublerClass, void(float)&gt; doubling_chain(4);
+ signet::storage&lt;void (float)&gt; floater(1.0f);
+ signet::storage&lt;void (float)&gt; collector(0.0f);
+
+ floater &gt;&gt;= doubling_chain &gt;&gt;= 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&lt; Signature &gt; &amp;</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 &amp;</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&lt;void ()&gt; banger;
+ signet::storage&lt;void (float)&gt; floater(2.5f);
+ signet::storage&lt;void (float)&gt; collector(0.0f);
+
+ // create the network
+ banger &gt;&gt;= floater &gt;&gt;= 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&lt; typename boost::function_traits&lt; Signature &gt;::arg1_type &gt;::type</type></typedef><method-group name="public member functions"><method name="operator()" cv=""><type>void</type><parameter name="arg1"><paramtype>typename boost::function_traits&lt; Signature &gt;::arg1_type</paramtype></parameter><purpose>Stores the value in the signal. </purpose></method><method name="operator()" cv=""><type>call_traits&lt; arg1_value_type &gt;::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&lt; arg1_value_type &gt;::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&lt;void (float)&gt;
+{
+public:
+ void operator()(float x) {out(2*x);}
+};
+
+void filter_test()
+{
+ DoublerClass doubler1, doubler2;
+ signet::storage&lt;void (float)&gt; floater(1.0f);
+ signet::storage&lt;void (float)&gt; collector(0.0f);
+
+ floater &gt;&gt;= doubler1 &gt;&gt;= doubler2 &gt;&gt;= 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&lt; Signature &gt;</type></typedef><typedef name="result_type"><type>boost::function_traits&lt; Signature &gt;::result_type</type></typedef><method-group name="public member functions"><method name="default_signal" cv=""><type>signal_type &amp;</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> &amp;</paramtype></parameter></constructor><copy-assignment><parameter name=""><paramtype>const <classname>filter</classname> &amp;</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&lt; Signature &gt;</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&lt;float(float)&gt; double_fun1(&amp;DoublerFunc);
+ signet::function&lt;float(float)&gt; double_fun2(&amp;DoublerFunc);
+ signet::storage&lt;void (float)&gt; floater(1.0f);
+ signet::storage&lt;void (float)&gt; collector(0.0f);
+
+ floater &gt;&gt;= double_fun1 &gt;&gt;= double_fun2 &gt;&gt;= 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&lt; Signature &gt;</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&lt; Signature &gt;</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&lt;void ()&gt; banger1, banger2;
+ SignalVoidCounter counter1, counter2;
+ signet::junction&lt;void ()&gt; junction;
+
+ banger1 &gt;&gt;= junction &gt;&gt;= counter1;
+ banger2 &gt;&gt;= junction &gt;&gt;= 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&lt; Signature &gt;::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&lt; Signature &gt;</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&lt;void ()&gt; banger1;
+ signet::timed_generator&lt;void ()&gt; banger2;
+ signet::mutex&lt;void ()&gt; lock;
+ SignalVoidCounter counter;
+ ticker tick;
+
+ banger1 &gt;&gt;= lock &gt;&gt;= counter;
+ banger2 &gt;&gt;= lock &gt;&gt;= tick;
+ banger1.enable(0.5, 5);
+ banger2.enable(0.5, 5);
+
+ while (counter.GetCount() &lt; 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&lt; Signature &gt;::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&lt; Signature &gt;</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&lt;void ()&gt; banger;
+ signet::storage&lt;void (float)&gt; floater1, floater2;
+ floater1(1.0f);
+ floater2(2.0f);
+ signet::storage&lt;void (float)&gt; collector(0.0f);
+ signet::selector&lt;2, void (float)&gt; selector;
+
+ banger &gt;&gt;= floater1 &gt;&gt;= selector.slot1();
+ banger &gt;&gt;= floater2 &gt;&gt;= selector.slot2();
+ selector &gt;&gt;= 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&lt; Signature &gt;::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&lt; <classname>selector</classname>, Signature &gt;</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&lt; Signature &gt;</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&lt;void (float)&gt; generator(1.0f);
+ signet::function&lt;float(float)&gt; add2(boost::bind(std::plus&lt;float&gt;(), _1, 2.0f));
+ signet::socket_sender&lt;void (float)&gt; sender(socket);
+
+ // create the network
+ generator &gt;&gt;= add2 &gt;&gt;= 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&lt;void (float)&gt; receiver(socket);
+ signet::storage&lt;void (float)&gt; collector(0.0f);
+
+ // set up the network
+ receiver &gt;&gt;= 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 &amp;</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&lt;void (float)&gt; generator(1.0f);
+ signet::function&lt;float(float)&gt; add2(boost::bind(std::plus&lt;float&gt;(), _1, 2.0f));
+ signet::socket_sender&lt;void (float)&gt; sender(socket);
+
+ // create the network
+ generator &gt;&gt;= add2 &gt;&gt;= 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&lt;void (float)&gt; receiver(socket);
+ signet::storage&lt;void (float)&gt; collector(0.0f);
+
+ // set up the network
+ receiver &gt;&gt;= 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 &amp;</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&lt; Signature &gt;</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&lt;void ()&gt; banger;
+ signet::storage&lt;void (float)&gt; floater(2.5f);
+ signet::storage&lt;void (float)&gt; collector(0.0f);
+
+ // create the network
+ banger &gt;&gt;= floater &gt;&gt;= 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&lt; Signature &gt;::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&lt; arg1_value_type &gt;::param_type</paramtype></parameter><parameter name="arg2"><paramtype>typename boost::call_traits&lt; arg2_value_type &gt;::param_type</paramtype></parameter><parameter name=""><paramtype>...</paramtype></parameter><purpose>Sets the stored values. </purpose></method><method name="valueN" cv=""><type>boost::call_traits&lt; argN_value_type &gt;::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&lt; Signature &gt;</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&lt;void ()&gt; banger;
+ signet::storage&lt;void (float)&gt; floater(2.5f);
+ signet::storage&lt;void (float)&gt; collector(0.0f);
+
+ // create the network
+ banger &gt;&gt;= floater &gt;&gt;= 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&lt; Signature &gt;::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&lt; arg1_value_type &gt;::param_type</paramtype></parameter><parameter name="arg2"><paramtype>typename boost::call_traits&lt; arg2_value_type &gt;::param_type</paramtype></parameter><parameter name=""><paramtype>...</paramtype></parameter><purpose>Sets the stored values. </purpose></method><method name="valueN" cv=""><type>boost::call_traits&lt; argN_value_type &gt;::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&lt; Signature &gt;</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&lt;void ()&gt; banger1;
+ signet::timed_generator&lt;void ()&gt; banger2;
+ signet::mutex&lt;void ()&gt; lock;
+ SignalVoidCounter counter;
+ ticker tick;
+
+ banger1 &gt;&gt;= lock &gt;&gt;= counter;
+ banger2 &gt;&gt;= lock &gt;&gt;= tick;
+ banger1.enable(0.5, 5);
+ banger2.enable(0.5, 5);
+
+ while (counter.GetCount() &lt; 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;
+}


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