diff --git a/doc/src/refmanual/Algorithms-Runtime.rst b/doc/src/refmanual/Algorithms-Runtime.rst new file mode 100644 index 0000000..f521c85 --- /dev/null +++ b/doc/src/refmanual/Algorithms-Runtime.rst @@ -0,0 +1,10 @@ + +.. The MPL *runtime algorithms* provide out-of-box support for the + common scenarios of crossing compile time/runtime boundary. + +.. |Runtime Algorithms| replace:: `Runtime Algorithms`_ + +.. |runtime algorithm| replace:: `runtime algorithm`_ +.. _runtime algorithm: `Runtime Algorithms`_ +.. |runtime algorithms| replace:: `runtime algorithms`_ + diff --git a/doc/src/refmanual/for_each.rst b/doc/src/refmanual/for_each.rst new file mode 100644 index 0000000..6978166 --- /dev/null +++ b/doc/src/refmanual/for_each.rst @@ -0,0 +1,140 @@ +.. Algorithms/Runtime Algorithms//for_each |10 + +for_each +======== + +Synopsis +-------- + +.. parsed-literal:: + + template< + typename Sequence + , typename F + > + void for_each( F f ); + + template< + typename Sequence + , typename TransformOp + , typename F + > + void for_each( F f ); + + +Description +----------- + +``for_each`` is a family of overloaded function templates: + +* ``for_each( f )`` applies the runtime function object + ``f`` to every element in the |begin/end| range. + +* ``for_each( f )`` applies the runtime function + object ``f`` to the result of the transformation ``TransformOp`` of + every element in the |begin/end| range. + + +Header +------ + +.. parsed-literal:: + + #include + + +Parameters +---------- + ++-------------------+-----------------------------------+-----------------------------------+ +| Parameter | Requirement | Description | ++===================+===================================+===================================+ +| ``Sequence`` | |Forward Sequence| | A sequence to iterate. | ++-------------------+-----------------------------------+-----------------------------------+ +| ``TransformOp`` | |Lambda Expression| | A transformation. | ++-------------------+-----------------------------------+-----------------------------------+ +| ``f`` | An |unary function object| | A runtime operation to apply. | ++-------------------+-----------------------------------+-----------------------------------+ + + +Expression semantics +-------------------- + +For any |Forward Sequence| ``s``, |Lambda Expression| ``op`` , and an +|unary function object| ``f``: + +.. parsed-literal:: + + for_each( f ); + +:Return type: + ``void`` + +:Postcondition: + Equivalent to + + .. parsed-literal:: + + typedef begin::type i\ :sub:`1`; + |value_initialized|\ < deref::type > x\ :sub:`1`; + f(boost::get(x\ :sub:`1`)); + + typedef next::type i\ :sub:`2`; + |value_initialized|\ < deref::type > x\ :sub:`2`; + f(boost::get(x\ :sub:`2`)); + |...| + |value_initialized|\ < deref::type > x\ :sub:`n`; + f(boost::get(x\ :sub:`n`)); + typedef next::type last; + + where ``n == size::value`` and ``last`` is identical to + ``end::type``; no effect if ``empty::value == true``. + + +.. parsed-literal:: + + for_each( f ); + +:Return type: + ``void`` + +:Postcondition: + Equivalent to + + .. parsed-literal:: + + for_each< tranform_view >( f ); + + +Complexity +---------- + +Linear. Exactly ``size::value`` applications of ``op`` and ``f``. + + +Example +------- + +.. parsed-literal:: + + struct value_printer + { + template< typename U > void operator()(U x) + { + std::cout << x << '\n'; + } + }; + + int main() + { + for_each< range_c >( value_printer() ); + } + + +See also +-------- + +|Runtime Algorithms|, |Views|, |transform_view| + +.. |unary function object| replace:: `unary function object `_ +.. |value_initialized| replace:: `value_initialized `_ diff --git a/doc/src/refmanual/refmanual.py b/doc/src/refmanual/refmanual.py index 10bb88f..2db01ce 100644 --- a/doc/src/refmanual/refmanual.py +++ b/doc/src/refmanual/refmanual.py @@ -1,3 +1,9 @@ +# Copyright (c) Aleksey Gurtovoy 2001-2007 +# +# 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 time import fnmatch import os.path @@ -6,6 +12,8 @@ import re import string underlines = ['+', '/'] +special_cases = [ 'inserter', '_1,_2,..._n' ] + def __section_header(section): parts = section.split('/') @@ -22,21 +30,14 @@ def __section_intro(section): return '%s.rst' % '-'.join( [x.split(' ')[0] for x in parts] ) -def __include_page( output, page ): +def __include_page( output, page, name = None ): output.write( '.. include:: %s\n' % page ) # output.write( '.. raw:: LaTeX\n\n' ) # output.write( ' \\newpage\n\n') - ref = '/'.join( page.split('.')[0].split('-') ) - if ref.upper() == ref: # macros - ref = 'BOOST_MPL_%s' % ref - output.write( - ( '.. |%(ref)s| replace:: |``%(ref)s``|__\n' - + '.. |``%(ref)s``| replace:: :refentry:`%(ref)s`\n' - + '__ `%(ref)s`_\n' ) - % { 'ref': ref } - ) - elif ref.lower() == ref: + if name and name not in special_cases: ref = name + else: ref = '/'.join( page.split('.')[0].split('-') ) + if ref.upper() == ref or ref.lower() == ref: output.write( ( '.. |%(ref)s| replace:: |``%(ref)s``|__\n' + '.. |``%(ref)s``| replace:: :refentry:`%(ref)s`\n' @@ -82,7 +83,7 @@ def main( filename, dir ): placement_spec = open(src, 'r').readline() topic = 'Unclassified' - name = None + name = None order = -1 match = re_topic.match(placement_spec) @@ -95,7 +96,7 @@ def main( filename, dir ): if not topics.has_key(topic): topics[topic] = [] - topics[topic].append((src, order)) + topics[topic].append((src, order, name)) if name: if topic.find( '/Concepts' ) == -1: @@ -115,7 +116,7 @@ def main( filename, dir ): __include_page( output, intro ) for src in content: - __include_page( output, src[0] ) + __include_page( output, src[0], src[2] ) output.close() diff --git a/doc/src/refmanual/refmanual.rst b/doc/src/refmanual/refmanual.rst index fa2487e..7e32004 100644 --- a/doc/src/refmanual/refmanual.rst +++ b/doc/src/refmanual/refmanual.rst @@ -2,7 +2,7 @@ The MPL Reference Manual ************************ -:Copyright: Copyright © Aleksey Gurtovoy and David Abrahams, 2001-2005. +:Copyright: Copyright © Aleksey Gurtovoy and David Abrahams, 2001-2007. :License: Distributed under the Boost Software License, Version 1.0. (See accompanying file ``LICENSE_1_0.txt`` or copy at @@ -132,10 +132,6 @@ __ `Placeholders`_ __ `BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS`_ __ `BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS`_ -.. |BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS| replace:: |``BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS``|__ -.. |``BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS``| replace:: :refentry:`BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS` -__ `BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS`_ - .. |transformation algorithm disclaimer| replace:: [*Note:* This wording applies to a no-inserter version(s) of the algorithm. See the