123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- <?xml version="1.0" ?>
- <!--
- Copyright 2010 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)
- -->
- <concept name="Domain" category="utility">
- <param name="Domain" role="domain-type" />
- <param name="Expr" role="expression-type" />
- <param name="Object" role="object-type" />
- <models-sentence>
- The type <arg num="1" /> must be a model of <self/>. It also
- models Unary Polymorphic Function.
- </models-sentence>
- <models-sentence>
- The type <arg num="2" /> must be a model of <conceptname>Expr</conceptname>
- </models-sentence>
- <description>
- <para>
- A Domain creates an association between expressions and a so-called
- generator, which is a function that maps an expression in the default
- domain to an equivalent expression in this Domain. It also associates
- an expression with a grammar, to which all expressions within this
- Domain must conform.
- </para>
- </description>
- <notation variables="d">
- <sample-value>
- <type name="Domain" />
- </sample-value>
- </notation>
- <notation variables="e">
- <sample-value>
- <type name="Expr" />
- </sample-value>
- </notation>
- <notation variables="o">
- <sample-value>
- <type name="Object" />
- </sample-value>
- </notation>
- <associated-type name="proto_grammar">
- <get-member-type name="proto_grammar">
- <type name="Domain"/>
- </get-member-type>
- <description>
- <simpara>The grammar to which every expression in this Domain
- must conform.</simpara>
- </description>
- </associated-type>
- <associated-type name="proto_generator">
- <get-member-type name="proto_generator">
- <type name="Domain"/>
- </get-member-type>
- <description>
- <simpara>
- A Unary Polymorphic Function that accepts expressions in the
- default domain and emits expressions in this Domain.
- </simpara>
- </description>
- </associated-type>
- <associated-type name="proto_super_domain">
- <get-member-type name="proto_super_domain">
- <type name="Domain"/>
- </get-member-type>
- <description>
- <simpara>
- The Domain that is a super-domain of this domain, if
- any such domain exists. If not, it is some unspecified
- type.
- </simpara>
- </description>
- </associated-type>
- <associated-type name="result_type">
- <get-member-type name="type">
- <apply-template name="boost::result_of">
- <type name="Domain(Expr)"/>
- </apply-template>
- </get-member-type>
- <description>
- <simpara>
- The type of the result of applying
- <computeroutput>proto_generator</computeroutput> to
- the specified expression type. The result is required to
- model <conceptname>Expr</conceptname>. The domain type
- associated with <computeroutput>result_type</computeroutput>
- (<computeroutput>result_type::proto_domain</computeroutput>)
- is required to be the same type as this Domain.
- </simpara>
- </description>
- </associated-type>
- <associated-type name="as_expr_result_type">
- <get-member-type name="result_type">
- <apply-template name="Domain::as_expr">
- <type name="Object"/>
- </apply-template>
- </get-member-type>
- <description>
- <simpara>
- The result of converting some type to a Proto expression
- type in this domain. This is used, for instance, when
- calculating the type of a variable to hold a Proto
- expression.
- <computeroutput>as_expr_result_type</computeroutput>
- models
- <computeroutput><conceptname>Expr</conceptname></computeroutput>.
- </simpara>
- </description>
- </associated-type>
- <associated-type name="as_child_result_type">
- <get-member-type name="result_type">
- <apply-template name="Domain::as_child">
- <type name="Object"/>
- </apply-template>
- </get-member-type>
- <description>
- <simpara>
- The result of converting some type to a Proto expression
- type in this domain. This is used, for instance, to
- compute the type of an object suitable for storage
- as a child in an expression tree.
- <computeroutput>as_child_result_type</computeroutput>
- models
- <computeroutput><conceptname>Expr</conceptname></computeroutput>.
- </simpara>
- </description>
- </associated-type>
- <valid-expression name="Apply Generator">
- <apply-function name="d">
- <sample-value>
- <type name="Expr"/>
- </sample-value>
- </apply-function>
- <return-type>
- <require-same-type testable="yes">
- <type name="result_type"/>
- </require-same-type>
- </return-type>
- <semantics>
- The result of applying <computeroutput>proto_generator</computeroutput>
- to the specified expression.
- </semantics>
- </valid-expression>
- <valid-expression name="As Expression">
- <apply-function name="Domain::as_expr< Object >()">
- <sample-value>
- <type name="Object"/>
- </sample-value>
- </apply-function>
- <return-type>
- <require-same-type testable="yes">
- <type name="as_expr_result_type"/>
- </require-same-type>
- </return-type>
- <semantics>
- The result of converting some object to a Proto expression
- in this domain. It returns a Proto expression object that
- is suitable for storage in a variable. It should return a
- new object, which may be a copy of the object passed in.
- </semantics>
- </valid-expression>
- <valid-expression name="As Child">
- <apply-function name="Domain::as_child< Object >()">
- <sample-value>
- <type name="Object"/>
- </sample-value>
- </apply-function>
- <return-type>
- <require-same-type testable="yes">
- <type name="as_child_result_type"/>
- </require-same-type>
- </return-type>
- <semantics>
- The result of converting some object to a Proto expression
- in this domain. It returns an object suitable for storage
- as a child in an expression tree, which may simply be a
- reference to the object passed in.
- </semantics>
- </valid-expression>
- <example-model>
- <type name="boost::proto::default_domain" />
- </example-model>
- </concept>
|