$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
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< Obj >::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< proto::_value, int >, 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< _, Obj(Tn...)>()">
+      <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< boost::proto::_value, int >(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"/>