123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <?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="Expr" category="utility">
- <param name="Expr" role="expession-type"/>
- <param name="Tag" role="tag-type"/>
- <param name="Domain" role="domain-type"/>
- <param name="N" role="mpl-integral-constant-type"/>
- <models-sentence>
- The type <arg num="1"/> must be a model of <self/>.
- </models-sentence>
- <models-sentence>
- The type <arg num="3"/> must be a model of <conceptname>Domain</conceptname>.
- </models-sentence>
- <models-sentence>
- The type <arg num="4"/> must be a model of MPL Integral Constant.
- </models-sentence>
- <description>
- <para>
- An Expr represents a tagged node in an expression tree.
- The children of the Expr must themselves satisfy the
- Expr concept. The Expr has an arity representing the
- number of children. If the number of children is zero,
- the Expr also has a value. An Expr also has an associated
- <conceptname>Domain</conceptname>.
- </para>
- </description>
- <notation variables="e">
- <sample-value>
- <type name="Expr"/>
- </sample-value>
- </notation>
- <associated-type name="proto_tag">
- <get-member-type name="proto_tag">
- <type name="Expr"/>
- </get-member-type>
- <description>
- <simpara>The tag type of the Expr.</simpara>
- </description>
- </associated-type>
- <associated-type name="proto_args">
- <get-member-type name="proto_args">
- <type name="Expr"/>
- </get-member-type>
- <description>
- <simpara>A typelist representing either the types of the child nodes, or,
- if the arity of the Expr is 0, of the value of the terminal.</simpara>
- </description>
- </associated-type>
- <associated-type name="proto_arity">
- <get-member-type name="proto_arity">
- <type name="Expr"/>
- </get-member-type>
- <description>
- <simpara>
- The arity (number of child nodes) of the Expr.
- <computeroutput>proto_arity</computeroutput> is an MPL Integral Constant.
- </simpara>
- </description>
- </associated-type>
- <associated-type name="proto_grammar">
- <get-member-type name="proto_grammar">
- <type name="Expr"/>
- </get-member-type>
- <description>
- <simpara>
- A typedef for an instantiation of
- <classname alt="boost::proto::basic_expr">
- <code>proto::basic_expr<></code>
- </classname>
- that is equivalent to Expr. Expression types are equivalent if they have the
- same <code>proto_tag</code>, <code>proto_args</code>, and <code>proto_arity</code>.
- </simpara>
- </description>
- </associated-type>
- <associated-type name="proto_base_expr">
- <get-member-type name="proto_base_expr">
- <type name="Expr"/>
- </get-member-type>
- <description>
- <simpara>
- A typedef for an instantiation of
- <classname alt="boost::proto::expr"><code>proto::expr<></code></classname> or
- <classname alt="boost::proto::basic_expr"><code>proto::basic_expr<></code></classname>
- that is equivalent to Expr. Expression types are equivalent if they have the
- same <code>proto_tag</code>, <code>proto_args</code>, and <code>proto_arity</code>.
- </simpara>
- </description>
- </associated-type>
- <associated-type name="proto_derived_expr">
- <get-member-type name="proto_derived_expr">
- <type name="Expr"/>
- </get-member-type>
- <description>
- <simpara>
- A typedef for <code>Expr</code>.
- </simpara>
- </description>
- </associated-type>
- <associated-type name="proto_domain">
- <get-member-type name="proto_domain">
- <type name="Expr"/>
- </get-member-type>
- <description>
- <simpara>
- The Domain of the Expr. <computeroutput>proto_domain</computeroutput>
- models <conceptname>Domain</conceptname>.
- </simpara>
- </description>
- </associated-type>
- <associated-type name="proto_childN">
- <get-member-type name="proto_childN">
- <type name="Expr"/>
- </get-member-type>
- <description>
- <simpara>The type of the Nth child of Expr. Requires
- <code>0 == N::value || N::value < proto_arity::value</code></simpara>
- </description>
- </associated-type>
- <valid-expression name="Get N-th Child">
- <apply-function name="boost::proto::child< N >">
- <sample-value>
- <type name="Expr"/>
- </sample-value>
- </apply-function>
- <return-type>
- <require-same-type testable="yes">
- <type name="proto_childN"/>
- </require-same-type>
- </return-type>
- <semantics>Extracts the Nth child from this Expr.
- Requires <computeroutput>N::value < proto_arity::value</computeroutput>.</semantics>
- </valid-expression>
- <valid-expression name="Get Terminal Value">
- <apply-function name="boost::proto::value">
- <sample-value>
- <type name="Expr"/>
- </sample-value>
- </apply-function>
- <return-type>
- <require-same-type testable="yes">
- <type name="proto_child0"/>
- </require-same-type>
- </return-type>
- <semantics>
- Extracts the value from a terminal Expr.
- Requires <computeroutput>0 == proto_arity::value</computeroutput>.
- </semantics>
- </valid-expression>
- <valid-expression name="Get Base">
- <apply-method name="proto_base">
- <sample-value>
- <type name="Expr"/>
- </sample-value>
- </apply-method>
- <return-type>
- <require-same-type testable="yes">
- <type name="proto_base_expr"/>
- </require-same-type>
- </return-type>
- <semantics>
- Returns an object of type
- <classname alt="boost::proto::expr"><code>proto::expr<></code></classname> or
- <classname alt="boost::proto::basic_expr"><code>proto::basic_expr<></code></classname>
- that is equivalent to <code>e</code>.
- </semantics>
- </valid-expression>
- <example-model>
- <type name="boost::proto::literal< int >"/>
- </example-model>
- </concept>
|