Boost logo

Boost-Commit :

From: eric_at_[hidden]
Date: 2008-07-19 17:22:45


Author: eric_niebler
Date: 2008-07-19 17:22:44 EDT (Sat, 19 Jul 2008)
New Revision: 47611
URL: http://svn.boost.org/trac/boost/changeset/47611

Log:
define the ObjectTransform concept
Added:
   branches/proto/v4/libs/proto/doc/concepts/ObjectTransform.xml (contents, props changed)
Text files modified:
   branches/proto/v4/libs/proto/doc/concepts/CallableTransform.xml | 5 ++++-
   branches/proto/v4/libs/proto/doc/proto.xml | 1 +
   2 files changed, 5 insertions(+), 1 deletions(-)

Modified: branches/proto/v4/libs/proto/doc/concepts/CallableTransform.xml
==============================================================================
--- branches/proto/v4/libs/proto/doc/concepts/CallableTransform.xml (original)
+++ branches/proto/v4/libs/proto/doc/concepts/CallableTransform.xml 2008-07-19 17:22:44 EDT (Sat, 19 Jul 2008)
@@ -24,7 +24,10 @@
       pointer type where the return type Fn is a
       PolymorphicFunctionObject and the arguments are
       Transforms. is_callable< Fn >::value
- must be true.
+ must be true. The CallableTransform, when applied,
+ has the effect of invoking the polymorphic function
+ object Fn, passing as arguments the result(s)
+ of applying transform(s) Tn.
     </para>
   </description>
 

Added: branches/proto/v4/libs/proto/doc/concepts/ObjectTransform.xml
==============================================================================
--- (empty file)
+++ branches/proto/v4/libs/proto/doc/concepts/ObjectTransform.xml 2008-07-19 17:22:44 EDT (Sat, 19 Jul 2008)
@@ -0,0 +1,94 @@
+<?xml version="1.0" ?>
+<concept name="ObjectTransform" category="utility">
+ <!--
+ Copyright 2008 Eric Niebler
+
+ 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)
+ -->
+ <param name="Obj" role="object-type" />
+ <param name="Tn" role="transform-type" />
+ <param name="Expr" role="expression-type" />
+ <param name="State" role="state-type" />
+ <param name="Data" role="data-type" />
+
+ <models-sentence>
+ The type <arg num="1" /> must be a model of <conceptname name="Regular"/>, or
+ else it is a template specialization representing a lamda expression that,
+ subsequent to type substitution, is a type that models <conceptname name="Regular"/>.
+ The type <arg num="2" /> must be a model of <conceptname name="Transform"/>.
+ </models-sentence>
+
+ <description>
+ <para>
+ An ObjectTransform is a function type or a function
+ pointer type where the return type Obj is a
+ an object type and the arguments are
+ Transforms. is_callable&lt; Obj &gt;::value
+ must be false. The ObjectTransform, when applied,
+ has the effect of constructing an object of type
+ Obj' (see below), passing as construction parameters
+ the result(s) of applying transform(s) Tn.
+ </para>
+ <para>
+ The type Obj may be a template specialization representing
+ a compile-time lambda expression. For instance, if Obj is
+ std::pair&lt; proto::_value, int &gt;, the result type of the
+ ObjectTransform is computed by replacing the type proto::_value
+ with the result of applying the proto::_value transform. For
+ given types Obj, Expr, State and Data, we can say that the
+ type Obj' represents the type Obj after all nested transforms
+ have been replaced with the results of applying the transforms
+ with Expr, State and Data as transform arguments.
+ </para>
+ <para>
+ If the type Obj is not a template specialization representing
+ a compile-time lambda expression, then the result type Obj' is
+ the same as Obj.
+ </para>
+ </description>
+
+ <notation variables="expr">
+ <sample-value>
+ <type name="Expr" />
+ </sample-value>
+ </notation>
+
+ <notation variables="state">
+ <sample-value>
+ <type name="State" />
+ </sample-value>
+ </notation>
+
+ <notation variables="data">
+ <sample-value>
+ <type name="Data" />
+ </sample-value>
+ </notation>
+
+ <valid-expression name="Apply Transform">
+ <apply-function name="when&lt; _, Obj(Tn...)&gt;()">
+ <sample-value>
+ <type name="Expr" />
+ </sample-value>
+ <sample-value>
+ <type name="State" />
+ </sample-value>
+ <sample-value>
+ <type name="Data" />
+ </sample-value>
+ </apply-function>
+ <return-type>
+ <require-same-type testable="yes">
+ <type name="Obj'"/>
+ </require-same-type>
+ </return-type>
+ <semantics>Applies the transform.</semantics>
+ </valid-expression>
+
+ <example-model>
+ <type name="std::pair&lt; boost::proto::_value, int &gt;(boost::proto::_value, int())" />
+ </example-model>
+
+</concept>

Modified: branches/proto/v4/libs/proto/doc/proto.xml
==============================================================================
--- branches/proto/v4/libs/proto/doc/proto.xml (original)
+++ branches/proto/v4/libs/proto/doc/proto.xml 2008-07-19 17:22:44 EDT (Sat, 19 Jul 2008)
@@ -2,6 +2,7 @@
 <library-reference id="reference" xmlns:xi="http://www.w3.org/2001/XInclude">
   <title>Reference</title>
   <xi:include href="concepts/CallableTransform.xml"/>
+ <xi:include href="concepts/ObjectTransform.xml"/>
   <xi:include href="concepts/PrimitiveTransform.xml"/>
   <xi:include href="concepts/Transform.xml"/>
   <xi:include href="concepts/PolymorphicFunctionObject.xml"/>


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