|
Boost-Commit : |
From: stipe_at_[hidden]
Date: 2007-11-09 15:50:35
Author: srajko
Date: 2007-11-09 15:50:34 EST (Fri, 09 Nov 2007)
New Revision: 40972
URL: http://svn.boost.org/trac/boost/changeset/40972
Log:
version 0.8.0
Text files modified:
sandbox/SOC/2007/signals/libs/dataflow/doc/dataflow.qbk | 67 +++------------------------
sandbox/SOC/2007/signals/libs/dataflow/doc/introduction.qbk | 95 ++++++++++++++++++++++++++++++++++-----
sandbox/SOC/2007/signals/libs/dataflow/doc/port_concepts.qbk | 44 +++++-------------
sandbox/SOC/2007/signals/libs/dataflow/doc/rationale.qbk | 35 ++++++++++---
4 files changed, 130 insertions(+), 111 deletions(-)
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/dataflow.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/dataflow.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/dataflow.qbk 2007-11-09 15:50:34 EST (Fri, 09 Nov 2007)
@@ -1,6 +1,6 @@
[article Dataflow
[quickbook 1.4]
- [version 0.1]
+ [version 0.8.0]
[authors [Rajko, Stjepan]]
[copyright 2007 Stjepan Rajko]
[purpose Generic dataflow lirary providing support for data producers,
@@ -67,6 +67,7 @@
[template instantiator[] [link dataflow.signals.components.generic.instantiator instantiator]]
[template modifier[] [link dataflow.signals.components.generic.modifier modifier]]
[template storage[] [link dataflow.signals.components.properties.storage storage]]
+[template timed_storage[] [link dataflow.signals.components.properties.timed_storage timed_storage]]
[template counter[] [link dataflow.signals.components.properties.counter counter]]
[template junction[] [link dataflow.signals.components.flow.junction junction]]
[template multiplexer[] [link dataflow.signals.components.flow.multiplexer multiplexer]]
@@ -124,32 +125,6 @@
[import ../example/VTK/support.hpp]
-Dataflow is a generic library for [WikiDataflow] programming using various data
-transport mechanisms. It also has layers of support for
-two data transport mechanisms - one is based on
-[BoostSignals], and the other (experimental and currently broken) is based
-connections made through
-simple object pointers, with support for using [BoostPhoenix2]
-actors for data processing.
-
-The two data transport mechanisms are implemented in the [DataflowSignals]
-and [DataflowPhoenix] layers. The idea behind providing a generic dataflow
-library is that other data transport mechanisms can be easily adapted for
-use with the library.
-
-[warning Dataflow is not a part of the Boost libraries. It is being developed
-as a part of the Google Summer of Code program. The original proposal (for
-the Signal Network library, which became the Dataflow library)
-as well as some status updates can be found on the
-[@http://svn.boost.org/trac/boost/wiki/soc/2007/SignalNetwork GSoC page].]
-
-* If you would like some more information about why one would want to connect
- objects into a dataflow network, read about
- [link dataflow.introduction.dataflow Dataflow programming in C++].
-* If you'd like to try out the library
- * keep in mind that the interface is subject to change
- * Read [how_to_use how to use this library and the documentation].
-
[include introduction.qbk]
[include concepts.qbk]
@@ -183,10 +158,13 @@
* I have started ASCII visual diagrams in the documentation.
* Examples still need to be expanded and integrated more.
-[* Jake Voytko suggested having master table of [BoostDataflow] components
- describing their use, adding instructions on linking with the library.]
+[* Jake Voytko suggested having master table of [DataflowSignals] components
+ describing their use, adding instructions on linking with the library,
+ and other suggestions on improving the documentation.]
+
* A master table has been added to the [components] page.
-* I have started a [link dataflow.introduction.link linking] instruction page.
+* I have started a [link dataflow.introduction.download Downloading and Linking]
+ instruction page.
[* Tobias Schwinger indicated that the library could be used for pulling rather than pushing data.]
@@ -202,7 +180,7 @@
[* 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 [timed_storage] and [mutex].
+* I have started to implement thread-related components in [timed_storage], [mutex] and [condition].
More sophisticated threading components, control and syntax to follow.
[* Yigong Liu suggested enhanced support for common network topologies, such as mesh. ]
@@ -231,33 +209,6 @@
[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 signals::socket_sender and signals::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 signals::filter and does not need to know it's descendant's type
-* implemented signals::junction, signals::selector, signals::storage, signals::timed_generator,
- signals::mutex, signals::chain, signals::function classes
-
-Original request for interest version available as attachment to
-[@http://lists.boost.org/Archives/boost/2007/02/116869.php]
-
-[endsect]
-
[endsect]
[include future.qbk]
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/introduction.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/introduction.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/introduction.qbk 2007-11-09 15:50:34 EST (Fri, 09 Nov 2007)
@@ -1,5 +1,32 @@
[section:introduction Introduction]
+Dataflow is a generic library for [WikiDataflow] programming using various data
+transport mechanisms. It also has layers of support for
+two data transport mechanisms - one is based on
+[BoostSignals], and the other (experimental and currently broken) is based
+connections made through
+simple object pointers, with support for using [BoostPhoenix2]
+actors for data processing.
+
+The two data transport mechanisms are implemented in the [DataflowSignals]
+and [DataflowPhoenix] layers. The idea behind providing a generic dataflow
+library is that other data transport mechanisms can be easily adapted for
+use with the library.
+
+[warning Dataflow is not a part of the Boost libraries. It is being developed
+as a part of the Google Summer of Code program. The original proposal (for
+the Signal Network library, which became the Dataflow library)
+as well as some status updates can be found on the
+[@http://svn.boost.org/trac/boost/wiki/soc/2007/SignalNetwork GSoC page].]
+
+* If you would like some more information about why one would want to connect
+ objects into a dataflow network, read about
+ [link dataflow.introduction.dataflow Dataflow programming in C++].
+* If you'd like to try out the library
+ * keep in mind that the interface is subject to change
+ * Read [how_to_use how to use this library and the documentation].
+
+
[section:dataflow Dataflow programming in C++ - motivation and advantages]
The [WikiDataflow] programming paradigm is based on interconnected
@@ -309,7 +336,7 @@
[endsect][/how_to_use]
[section Examples]
-[section:new_layer Implementing support for a new mechanism]
+[section:new_layer Implementing support for a new mechanism (VTK)]
This example shows how to implement support for a particular mechanism.
Our victim is [VTK], a 3D visualization toolkit, which uses a data pipeline
@@ -406,7 +433,7 @@
With the pair of [ProducerPortConcept] and [ConsumerPortConcept] registered, we
can make them [ConnectableConcept] and/or [OnlyConnectableConcept].
All we need to do is specialize the implementation for the appropriate
-categories:
+[PortTraits]:
[vtk_connect_impl_algorithm]
@@ -478,11 +505,11 @@
[heading Next]
[link dataflow.introduction.examples.new_layer.producermap
- Setting up a ProducerMap]
+ Setting up a KeyedPort]
[endsect][/filter]
-[section:producermap Setting up a ProducerMap]
+[section:producermap Setting up a KeyedPort]
Sometimes, components can produce (or consume) multiple types of data.
For example, [vtkMapper] objects can produce data for [vtkActor] objects,
@@ -491,9 +518,9 @@
the same as connecting a [vtkMapper] to another [vtkAlgorithm].
To accomodate such situations, the Dataflow library provides
-[ProducerMapConcept]s, which are similar to [ProxyProducer]s but
-the [ProducerPortConcept] they delegate to is keyed on the category of
-[ConsumerPortConcept] they are being connected to.
+[KeyedPortConcept]s, which are similar to [ProxyPortConcept]s but
+the [PortConcept] they delegate to is keyed on the
+[PortConcept] they are being connected to.
[vtk_mapper_producer]
@@ -520,9 +547,8 @@
use pointers to class types rather than class types themselves. So, with what
we have done so far, we can do `connect(*cone, *coneMapper)` but not
`connect(cone, coneMapper)`. To provide support for pointers, we
-simply make them adhere to the [ProxyProducerConcept] and,
-[ProxyConsumerConcept], and delegate the functionality to the object they
-point to.
+simply make them adhere to the [ProxyPortConcept] concept, and delegate the
+functionality to the object they point to.
[vtk_support_pointer]
@@ -578,7 +604,52 @@
[endsect][/examples]
-[section:linking How to link]
+[section:download Downloading, building and linking]
+
+[heading Downloading]
+
+I am currently preparing this library for submission for a Boost review. The
+latest version is located in the
+[@http://svn.boost.org/trac/boost/browser/sandbox/SOC/2007/signals Boost sandbox].
+
+Version 0.8.0 -
+ \[[@http://www.boost-consulting.com/vault/index.php?direction=&order=&directory=Dataflow& available in the Boost vault]\]
+
+* post-GSoC version
+* generic dataflow support layer with tests and examples
+* Dataflow.Signals layer (fusion-based implementation) with tests and examples
+* VTK example
+* quickbook docs
+
+[/Proposal for Boost / Google SoC version \[[@signal_network.zip download]\]
+
+* finished the signals::socket_sender and signals::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 signals::filter and does not need to know it's descendant's type
+* implemented signals::junction, signals::selector, signals::storage, signals::timed_generator,
+ signals::mutex, signals::chain, signals::function classes
+
+Original request for interest version available as attachment to
+[@http://lists.boost.org/Archives/boost/2007/02/116869.php]
+]
+
+[heading Building]
+
+The library comes with Boost.Build Jamfiles for all examples, tests, and docs.
+As long as your BOOST_ROOT environment variable is set, you should be able
+to build each one of those by going to the appropriate directory and
+running bjam.
+
+The library itself is header only, and requires no linking. However, parts
+of it depend on boost libraries which do need to be built and linked (see
+the linking information below).
+
+[heading Linking]
The generic Dataflow support layer is header-only, and relies only on other
Boost header-only libraries (MPL, enable_if, and small parts of fusion).
@@ -590,6 +661,6 @@
([mutex] and [condition]) are dependent on [BoostThread], which has to be
linked as well.
-[endsect][/linking]
+[endsect][/download]
[endsect][/introduction]
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/port_concepts.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/port_concepts.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/port_concepts.qbk 2007-11-09 15:50:34 EST (Fri, 09 Nov 2007)
@@ -180,13 +180,16 @@
[endsect][/port]
[section ProxyPortTraits]
+
+
[endsect][/proxyporttraits]
[section ProxyPort]
-A type `PP` is a ['[ProxyPortConcept]] if specifies the proxied producer
-type, and if objects of the proxied type can be retreived from objects of
-[ProxyPortConcept] type. If the proxied producer type is a valid
+A type `PP` is a ['[ProxyPortConcept]] for a mechanism `M` and port category `PC`
+if it specifies a [ProxyPortTraitsConcept] for that mechanism and port category.
+
+If the proxied port type is a valid
[PortConcept], then 'PP' satisfies the [PortConcept] requirements
in the same way.
@@ -202,30 +205,11 @@
[table
[[Name] [Expression] [Result Type] [Semantics]]
[
- [Proxy Port Category]
- [`proxy_producer_category_of<PP>::type`
- [footnote `namespace boost::dataflow`]]
- [Any type]
- [
- The category of the proxy producer, used for tag forwarding.
- ]
- ]
- [
- [Proxied Port Type]
- [`proxied_producer_of<PP>::type`
- [footnote `namespace boost::dataflow`]]
- [Any type]
- [
- The proxied producer type.
- ]
- ]
- [
- [Proxied Port]
- [`get_proxied_producer(pp)`
- [footnote `namespace boost::dataflow`]]
- []
+ [Proxy Port Traits]
+ [`proxy_port_traits_of<PP>::type`]
+ [[ProxyPortTraitsConcept] type.]
[
- Retrieves a reference to the proxied producer object.
+ The traits of the proxy port.
]
]
]
@@ -241,13 +225,9 @@
[heading Notes]
-To define a new [ProxyPortConcept] class type, it is sufficient to define
-member typedefs `proxy_producer_category` and `proxy_producer_for`,
-and member function `get_proxied_producer`.
-
[heading Examples]
[endsect][/proxyport]
-[section PortMap]
-[endsect][/port_map]
\ No newline at end of file
+[section KeyedPort]
+[endsect][/keyed_port]
Modified: sandbox/SOC/2007/signals/libs/dataflow/doc/rationale.qbk
==============================================================================
--- sandbox/SOC/2007/signals/libs/dataflow/doc/rationale.qbk (original)
+++ sandbox/SOC/2007/signals/libs/dataflow/doc/rationale.qbk 2007-11-09 15:50:34 EST (Fri, 09 Nov 2007)
@@ -10,14 +10,31 @@
can work on improving the information that is out there (on Wikipedia, etc.)
* I chose /component/ to refer to a processing element of a dataflow network,
because the term has no prior (to my knowledge) C++ meaning.
-* In differentiating components that output data from those that input data,
- I originally thought about using "input component"
- and "output component". However, I realized that "input" and "output"
+* In differentiating ports that output data from those that input data,
+ I originally thought about using "input"
+ and "output". However, I realized that "input" and "output"
switch depending on perspective - from the perspective
- of a component, it is "output" if it outputs data, but from the perspective
- of a corresponding connection, that same component is the
- "input". A better choice might be /producer/ and /consumer/ as they don't
- suffer from the same problem. Perhaps "provider"
- would be more accurate, and there is a precedent for this nomenclature.
+ of a port, it is "output" if it outputs data, but from the perspective
+ of a corresponding connection, that same port is the
+ "input". A better choice seemed to be /producer/ and /consumer/ as they don't
+ suffer from the same problem.
-[endsect]
\ No newline at end of file
+[heading Implementation choices]
+
+* Among various tag dispatch conventions, I chose to go with functor templates
+ because of relative simplicity as well as integration with boost::result_of.
+ Using a function might be another good alternative (as suggested
+ [@http://www.boost.org/more/generic_programming.html#tag_dispatching here]),
+ but might be problematic where the result type is not fixed (and in the
+ future all of the operations will probably be modified to return a value
+ where appropriate.
+* Port operations (as parts of [BinaryOperableConcept] and
+ [UnaryOperableConcept] concepts) have been rolled into a single class
+ template with the operation selected by type because all of these operations
+ share [ProxyPortConcept] and (for [BinaryOperableConcept]) [KeyedPortConcept]
+ resolution. [ComponentOperableConcept] operations have been implemented
+ the same way for consistency.
+
+[endsect]
+
+
\ No newline at end of file
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