• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>boost/python/operators.hpp</title>
5<link rel="stylesheet" href="../../boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../index.html" title="Boost.Python Reference Manual">
8<link rel="up" href="../high_level_components.html" title="Chapter 2. High Level Components">
9<link rel="prev" href="boost_python_module_hpp.html" title="boost/python/module.hpp">
10<link rel="next" href="boost_python_scope_hpp.html" title="boost/python/scope.hpp">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="" width="" height="" src="../../images/boost.png"></td></tr></table>
14<hr>
15<div class="spirit-nav">
16<a accesskey="p" href="boost_python_module_hpp.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../high_level_components.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="boost_python_scope_hpp.html"><img src="../../images/next.png" alt="Next"></a>
17</div>
18<div class="section">
19<div class="titlepage"><div><div><h2 class="title" style="clear: both">
20<a name="high_level_components.boost_python_operators_hpp"></a><a class="link" href="boost_python_operators_hpp.html" title="boost/python/operators.hpp">boost/python/operators.hpp</a>
21</h2></div></div></div>
22<div class="toc"><dl class="toc">
23<dt><span class="section"><a href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.introduction">Introduction</a></span></dt>
24<dt><span class="section"><a href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t">Class
25        <code class="computeroutput"><span class="identifier">self_ns</span><span class="special">::</span><span class="identifier">self_t</span></code></a></span></dt>
26<dt><span class="section"><a href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_template_other">Class
27        template <code class="computeroutput"><span class="identifier">other</span></code></a></span></dt>
28<dt><span class="section"><a href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_template_detail_operator">Class
29        template <code class="computeroutput"><span class="identifier">detail</span><span class="special">::</span><span class="identifier">operator_</span></code></a></span></dt>
30<dt><span class="section"><a href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.object_self">Object
31        <code class="computeroutput"><span class="identifier">self</span></code></a></span></dt>
32<dt><span class="section"><a href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.example">Example</a></span></dt>
33</dl></div>
34<div class="section">
35<div class="titlepage"><div><div><h3 class="title">
36<a name="high_level_components.boost_python_operators_hpp.introduction"></a><a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.introduction" title="Introduction">Introduction</a>
37</h3></div></div></div>
38<p>
39          &lt;boost/python/operators.hpp&gt; provides types and functions for automatically
40          generating Python <a href="http://www.python.org/doc/ref/specialnames.html" target="_top">special
41          methods</a> from the corresponding C++ constructs. Most of these constructs
42          are operator expressions, hence the name. To use the facility, substitute
43          the <a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.object_self" title="Object self">self</a>
44          object for an object of the class type being wrapped in the expression
45          to be exposed, and pass the result to <a class="link" href="../high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_modifier_fu" title="Class template class_ modifier functions">class_&lt;&gt;::def()</a>.
46          Much of what is exposed in this header should be considered part of the
47          implementation, so is not documented in detail here.
48        </p>
49</div>
50<div class="section">
51<div class="titlepage"><div><div><h3 class="title">
52<a name="high_level_components.boost_python_operators_hpp.class_self_ns_self_t"></a><a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t" title="Class self_ns::self_t">Class
53        <code class="computeroutput"><span class="identifier">self_ns</span><span class="special">::</span><span class="identifier">self_t</span></code></a>
54</h3></div></div></div>
55<div class="toc"><dl class="toc">
56<dt><span class="section"><a href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_inplace_operators"><code class="computeroutput"><span class="identifier">self_t</span></code> inplace operators</a></span></dt>
57<dt><span class="section"><a href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_comparison_functions"><code class="computeroutput"><span class="identifier">self_t</span></code> comparison functions</a></span></dt>
58<dt><span class="section"><a href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_non_member_operations"><code class="computeroutput"><span class="identifier">self_t</span></code> non-member operations</a></span></dt>
59<dt><span class="section"><a href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_unary_operations"><code class="computeroutput"><span class="identifier">self_t</span></code> unary operations</a></span></dt>
60<dt><span class="section"><a href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_value_operations"><code class="computeroutput"><span class="identifier">self_t</span></code> value operations</a></span></dt>
61</dl></div>
62<p>
63          <code class="computeroutput"><span class="identifier">self_ns</span><span class="special">::</span><span class="identifier">self_t</span></code> is the actual type of the <a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.object_self" title="Object self">self</a>
64          object. The library isolates <code class="computeroutput"><span class="identifier">self_t</span></code>
65          in its own namespace, <code class="computeroutput"><span class="identifier">self_ns</span></code>,
66          in order to prevent the generalized operator templates which operate on
67          it from being found by argument-dependent lookup in other contexts. This
68          should be considered an implementation detail, since users should never
69          have to mention <code class="computeroutput"><span class="identifier">self_t</span></code>
70          directly.
71        </p>
72<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">python</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">self_ns</span> <span class="special">{</span>
73<span class="special">{</span>
74   <span class="identifier">unspecified</span><span class="special">-</span><span class="identifier">type</span><span class="special">-</span><span class="identifier">declaration</span> <span class="identifier">self_t</span><span class="special">;</span>
75
76   <span class="comment">// inplace operators</span>
77   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="identifier">self_t</span><span class="special">,</span> <span class="identifier">T</span><span class="special">);</span>
78   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="identifier">self_t</span><span class="special">,</span> <span class="identifier">T</span><span class="special">);</span>
79   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">*=(</span><span class="identifier">self_t</span><span class="special">,</span> <span class="identifier">T</span><span class="special">);</span>
80   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">/=(</span><span class="identifier">self_t</span><span class="special">,</span> <span class="identifier">T</span><span class="special">);</span>
81   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">%=(</span><span class="identifier">self_t</span><span class="special">,</span> <span class="identifier">T</span><span class="special">);</span>
82   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">&gt;&gt;=(</span><span class="identifier">self_t</span><span class="special">,</span> <span class="identifier">T</span><span class="special">);</span>
83   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">&lt;&lt;=(</span><span class="identifier">self_t</span><span class="special">,</span> <span class="identifier">T</span><span class="special">);</span>
84   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">&amp;=(</span><span class="identifier">self_t</span><span class="special">,</span> <span class="identifier">T</span><span class="special">);</span>
85   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">^=(</span><span class="identifier">self_t</span><span class="special">,</span> <span class="identifier">T</span><span class="special">);</span>
86   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">|=(</span><span class="identifier">self_t</span><span class="special">,</span> <span class="identifier">T</span><span class="special">);</span>
87
88   <span class="comment">// comparisons</span>
89   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">==(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
90   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
91   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">&lt;(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
92   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">&gt;(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
93   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">&lt;=(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
94   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">&gt;=(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
95
96   <span class="comment">// non-member operations</span>
97   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">+(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
98   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">-(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
99   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">*(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
100   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">/(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
101   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">%(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
102   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
103   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
104   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">&amp;(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
105   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">^(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
106   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">|(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
107   <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">L</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="identifier">pow</span><span class="special">(</span><span class="identifier">L</span> <span class="keyword">const</span><span class="special">&amp;,</span> <span class="identifier">R</span> <span class="keyword">const</span><span class="special">&amp;);</span>
108
109   <span class="comment">// unary operations</span>
110   <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">-(</span><span class="identifier">self_t</span><span class="special">);</span>
111   <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">+(</span><span class="identifier">self_t</span><span class="special">);</span>
112   <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">~(</span><span class="identifier">self_t</span><span class="special">);</span>
113   <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="keyword">operator</span><span class="special">!(</span><span class="identifier">self_t</span><span class="special">);</span>
114
115   <span class="comment">// value operations</span>
116   <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="identifier">int_</span><span class="special">(</span><span class="identifier">self_t</span><span class="special">);</span>
117   <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="identifier">long_</span><span class="special">(</span><span class="identifier">self_t</span><span class="special">);</span>
118   <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="identifier">float_</span><span class="special">(</span><span class="identifier">self_t</span><span class="special">);</span>
119   <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="identifier">complex_</span><span class="special">(</span><span class="identifier">self_t</span><span class="special">);</span>
120   <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="identifier">str</span><span class="special">(</span><span class="identifier">self_t</span><span class="special">);</span>
121
122   <span class="identifier">operator_</span><span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="identifier">repr</span><span class="special">(</span><span class="identifier">self_t</span><span class="special">);</span>
123<span class="special">}}};</span>
124</pre>
125<p>
126          The tables below describe the methods generated when the results of the
127          expressions described are passed as arguments to <a class="link" href="../high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_modifier_fu" title="Class template class_ modifier functions">class_&lt;&gt;::def()</a>.
128          <code class="computeroutput"><span class="identifier">x</span></code> is an object of the class
129          type being wrapped.
130        </p>
131<div class="section">
132<div class="titlepage"><div><div><h4 class="title">
133<a name="high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_inplace_operators"></a><a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_inplace_operators" title="self_t inplace operators"><code class="computeroutput"><span class="identifier">self_t</span></code> inplace operators</a>
134</h4></div></div></div>
135<p>
136            In the table below, If <code class="computeroutput"><span class="identifier">r</span></code>
137            is an object of type <a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_template_other" title="Class template other">other&lt;T&gt;</a>,
138            <code class="computeroutput"><span class="identifier">y</span></code> is an object of type
139            <code class="computeroutput"><span class="identifier">T</span></code>; otherwise, <code class="computeroutput"><span class="identifier">y</span></code> is an object of the same type as
140            <code class="computeroutput"><span class="identifier">r</span></code>.
141          </p>
142<div class="informaltable"><table class="table">
143<colgroup>
144<col>
145<col>
146<col>
147</colgroup>
148<thead><tr>
149<th>
150                    <p>
151                      C++ Expression
152                    </p>
153                  </th>
154<th>
155                    <p>
156                      Python Method Name
157                    </p>
158                  </th>
159<th>
160                    <p>
161                      C++ Implementation
162                    </p>
163                  </th>
164</tr></thead>
165<tbody>
166<tr>
167<td>
168                    <p>
169                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">+=</span>
170                      <span class="identifier">r</span></code>
171                    </p>
172                  </td>
173<td>
174                    <p>
175                      <code class="computeroutput"><span class="identifier">__iadd__</span></code>
176                    </p>
177                  </td>
178<td>
179                    <p>
180                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">+=</span>
181                      <span class="identifier">y</span></code>
182                    </p>
183                  </td>
184</tr>
185<tr>
186<td>
187                    <p>
188                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">-=</span>
189                      <span class="identifier">r</span></code>
190                    </p>
191                  </td>
192<td>
193                    <p>
194                      <code class="computeroutput"><span class="identifier">__isub__</span></code>
195                    </p>
196                  </td>
197<td>
198                    <p>
199                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">-=</span>
200                      <span class="identifier">y</span></code>
201                    </p>
202                  </td>
203</tr>
204<tr>
205<td>
206                    <p>
207                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">*=</span>
208                      <span class="identifier">r</span></code>
209                    </p>
210                  </td>
211<td>
212                    <p>
213                      <code class="computeroutput"><span class="identifier">__imul__</span></code>
214                    </p>
215                  </td>
216<td>
217                    <p>
218                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">*=</span>
219                      <span class="identifier">y</span></code>
220                    </p>
221                  </td>
222</tr>
223<tr>
224<td>
225                    <p>
226                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">/=</span>
227                      <span class="identifier">r</span></code>
228                    </p>
229                  </td>
230<td>
231                    <p>
232                      <code class="computeroutput"><span class="identifier">__idiv__</span></code>
233                    </p>
234                  </td>
235<td>
236                    <p>
237                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">/=</span>
238                      <span class="identifier">y</span></code>
239                    </p>
240                  </td>
241</tr>
242<tr>
243<td>
244                    <p>
245                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">%=</span>
246                      <span class="identifier">r</span></code>
247                    </p>
248                  </td>
249<td>
250                    <p>
251                      <code class="computeroutput"><span class="identifier">__imod__</span></code>
252                    </p>
253                  </td>
254<td>
255                    <p>
256                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">%=</span>
257                      <span class="identifier">y</span></code>
258                    </p>
259                  </td>
260</tr>
261<tr>
262<td>
263                    <p>
264                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">&gt;&gt;=</span>
265                      <span class="identifier">r</span></code>
266                    </p>
267                  </td>
268<td>
269                    <p>
270                      <code class="computeroutput"><span class="identifier">__irshift__</span></code>
271                    </p>
272                  </td>
273<td>
274                    <p>
275                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&gt;&gt;=</span>
276                      <span class="identifier">y</span></code>
277                    </p>
278                  </td>
279</tr>
280<tr>
281<td>
282                    <p>
283                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">&lt;&lt;=</span>
284                      <span class="identifier">r</span></code>
285                    </p>
286                  </td>
287<td>
288                    <p>
289                      <code class="computeroutput"><span class="identifier">__ilshift__</span></code>
290                    </p>
291                  </td>
292<td>
293                    <p>
294                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&lt;&lt;=</span>
295                      <span class="identifier">y</span></code>
296                    </p>
297                  </td>
298</tr>
299<tr>
300<td>
301                    <p>
302                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">&amp;=</span>
303                      <span class="identifier">r</span></code>
304                    </p>
305                  </td>
306<td>
307                    <p>
308                      <code class="computeroutput"><span class="identifier">__iand__</span></code>
309                    </p>
310                  </td>
311<td>
312                    <p>
313                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&amp;=</span>
314                      <span class="identifier">y</span></code>
315                    </p>
316                  </td>
317</tr>
318<tr>
319<td>
320                    <p>
321                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">^=</span>
322                      <span class="identifier">r</span></code>
323                    </p>
324                  </td>
325<td>
326                    <p>
327                      <code class="computeroutput"><span class="identifier">__ixor__</span></code>
328                    </p>
329                  </td>
330<td>
331                    <p>
332                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">^=</span>
333                      <span class="identifier">y</span></code>
334                    </p>
335                  </td>
336</tr>
337<tr>
338<td>
339                    <p>
340                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">|=</span>
341                      <span class="identifier">r</span></code>
342                    </p>
343                  </td>
344<td>
345                    <p>
346                      <code class="computeroutput"><span class="identifier">__ior__</span></code>
347                    </p>
348                  </td>
349<td>
350                    <p>
351                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">|=</span>
352                      <span class="identifier">y</span></code>
353                    </p>
354                  </td>
355</tr>
356</tbody>
357</table></div>
358</div>
359<div class="section">
360<div class="titlepage"><div><div><h4 class="title">
361<a name="high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_comparison_functions"></a><a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_comparison_functions" title="self_t comparison functions"><code class="computeroutput"><span class="identifier">self_t</span></code> comparison functions</a>
362</h4></div></div></div>
363<p>
364            In the tables below, if <code class="computeroutput"><span class="identifier">r</span></code>
365            is of type <a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t" title="Class self_ns::self_t">self_t</a>,
366            <code class="computeroutput"><span class="identifier">y</span></code> is an object of the
367            same type as <code class="computeroutput"><span class="identifier">x</span></code>; if <code class="computeroutput"><span class="identifier">l</span></code> or <code class="computeroutput"><span class="identifier">r</span></code>
368            is an object of type <a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_template_other" title="Class template other">other&lt;T&gt;</a>,
369            <code class="computeroutput"><span class="identifier">y</span></code> is an object of type
370            <code class="computeroutput"><span class="identifier">T</span></code>; otherwise, <code class="computeroutput"><span class="identifier">y</span></code> is an object of the same type as
371            <code class="computeroutput"><span class="identifier">l</span></code> or <code class="computeroutput"><span class="identifier">r</span></code>.
372            <code class="computeroutput"><span class="identifier">l</span></code> is never of type <a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t" title="Class self_ns::self_t">self_t</a>.
373          </p>
374<p>
375            The column of Python Expressions illustrates the expressions that will
376            be supported in Python for objects convertible to the types of x and
377            y. The secondary operation arises due to Python's <a href="http://www.python.org/doc/ref/customization.html#l2h-89" target="_top">reflection
378            rules</a> for rich comparison operators, and are only used when the
379            corresponding operation is not defined as a method of the y object.
380          </p>
381<div class="informaltable"><table class="table">
382<colgroup>
383<col>
384<col>
385<col>
386<col>
387</colgroup>
388<thead><tr>
389<th>
390                    <p>
391                      C++ Expression
392                    </p>
393                  </th>
394<th>
395                    <p>
396                      Python Method Name
397                    </p>
398                  </th>
399<th>
400                    <p>
401                      C++ Implementation
402                    </p>
403                  </th>
404<th>
405                    <p>
406                      Python Expression (primary, secondary)
407                    </p>
408                  </th>
409</tr></thead>
410<tbody>
411<tr>
412<td>
413                    <p>
414                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">==</span>
415                      <span class="identifier">r</span></code>
416                    </p>
417                  </td>
418<td>
419                    <p>
420                      <code class="computeroutput"><span class="identifier">__eq__</span></code>
421                    </p>
422                  </td>
423<td>
424                    <p>
425                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">==</span>
426                      <span class="identifier">y</span></code>
427                    </p>
428                  </td>
429<td>
430                    <p>
431                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">==</span>
432                      <span class="identifier">y</span></code>, <code class="computeroutput"><span class="identifier">y</span> <span class="special">==</span>
433                      <span class="identifier">x</span></code>
434                    </p>
435                  </td>
436</tr>
437<tr>
438<td>
439                    <p>
440                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">==</span>
441                      <span class="identifier">self</span></code>
442                    </p>
443                  </td>
444<td>
445                    <p>
446                      <code class="computeroutput"><span class="identifier">__eq__</span></code>
447                    </p>
448                  </td>
449<td>
450                    <p>
451                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">==</span>
452                      <span class="identifier">x</span></code>
453                    </p>
454                  </td>
455<td>
456                    <p>
457                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">==</span>
458                      <span class="identifier">x</span></code>, <code class="computeroutput"><span class="identifier">x</span> <span class="special">==</span>
459                      <span class="identifier">y</span></code>
460                    </p>
461                  </td>
462</tr>
463<tr>
464<td>
465                    <p>
466                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">!=</span>
467                      <span class="identifier">r</span></code>
468                    </p>
469                  </td>
470<td>
471                    <p>
472                      <code class="computeroutput"><span class="identifier">__ne__</span></code>
473                    </p>
474                  </td>
475<td>
476                    <p>
477                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">!=</span>
478                      <span class="identifier">y</span></code>
479                    </p>
480                  </td>
481<td>
482                    <p>
483                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">!=</span>
484                      <span class="identifier">y</span></code>, <code class="computeroutput"><span class="identifier">y</span> <span class="special">!=</span>
485                      <span class="identifier">x</span></code>
486                    </p>
487                  </td>
488</tr>
489<tr>
490<td>
491                    <p>
492                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">!=</span>
493                      <span class="identifier">self</span></code>
494                    </p>
495                  </td>
496<td>
497                    <p>
498                      <code class="computeroutput"><span class="identifier">__ne__</span></code>
499                    </p>
500                  </td>
501<td>
502                    <p>
503                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">!=</span>
504                      <span class="identifier">x</span></code>
505                    </p>
506                  </td>
507<td>
508                    <p>
509                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">!=</span>
510                      <span class="identifier">x</span></code>, <code class="computeroutput"><span class="identifier">x</span> <span class="special">!=</span>
511                      <span class="identifier">y</span></code>
512                    </p>
513                  </td>
514</tr>
515<tr>
516<td>
517                    <p>
518                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">&lt;</span>
519                      <span class="identifier">r</span></code>
520                    </p>
521                  </td>
522<td>
523                    <p>
524                      <code class="computeroutput"><span class="identifier">__lt__</span></code>
525                    </p>
526                  </td>
527<td>
528                    <p>
529                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&lt;</span>
530                      <span class="identifier">y</span></code>
531                    </p>
532                  </td>
533<td>
534                    <p>
535                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&lt;</span>
536                      <span class="identifier">y</span></code>, <code class="computeroutput"><span class="identifier">y</span> <span class="special">&gt;</span>
537                      <span class="identifier">x</span></code>
538                    </p>
539                  </td>
540</tr>
541<tr>
542<td>
543                    <p>
544                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">&lt;</span>
545                      <span class="identifier">self</span></code>
546                    </p>
547                  </td>
548<td>
549                    <p>
550                      <code class="computeroutput"><span class="identifier">__gt__</span></code>
551                    </p>
552                  </td>
553<td>
554                    <p>
555                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">&lt;</span>
556                      <span class="identifier">x</span></code>
557                    </p>
558                  </td>
559<td>
560                    <p>
561                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">&gt;</span>
562                      <span class="identifier">x</span></code>, <code class="computeroutput"><span class="identifier">x</span> <span class="special">&lt;</span>
563                      <span class="identifier">y</span></code>
564                    </p>
565                  </td>
566</tr>
567<tr>
568<td>
569                    <p>
570                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">&gt;</span>
571                      <span class="identifier">r</span></code>
572                    </p>
573                  </td>
574<td>
575                    <p>
576                      <code class="computeroutput"><span class="identifier">__gt__</span></code>
577                    </p>
578                  </td>
579<td>
580                    <p>
581                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&gt;</span>
582                      <span class="identifier">y</span></code>
583                    </p>
584                  </td>
585<td>
586                    <p>
587                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&gt;</span>
588                      <span class="identifier">y</span></code>, <code class="computeroutput"><span class="identifier">y</span> <span class="special">&lt;</span>
589                      <span class="identifier">x</span></code>
590                    </p>
591                  </td>
592</tr>
593<tr>
594<td>
595                    <p>
596                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">&gt;</span>
597                      <span class="identifier">self</span></code>
598                    </p>
599                  </td>
600<td>
601                    <p>
602                      <code class="computeroutput"><span class="identifier">__lt__</span></code>
603                    </p>
604                  </td>
605<td>
606                    <p>
607                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">&gt;</span>
608                      <span class="identifier">x</span></code>
609                    </p>
610                  </td>
611<td>
612                    <p>
613                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">&lt;</span>
614                      <span class="identifier">x</span></code>, <code class="computeroutput"><span class="identifier">x</span> <span class="special">&gt;</span>
615                      <span class="identifier">y</span></code>
616                    </p>
617                  </td>
618</tr>
619<tr>
620<td>
621                    <p>
622                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">&lt;=</span>
623                      <span class="identifier">r</span></code>
624                    </p>
625                  </td>
626<td>
627                    <p>
628                      <code class="computeroutput"><span class="identifier">__le__</span></code>
629                    </p>
630                  </td>
631<td>
632                    <p>
633                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&lt;=</span>
634                      <span class="identifier">y</span></code>
635                    </p>
636                  </td>
637<td>
638                    <p>
639                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&lt;=</span>
640                      <span class="identifier">y</span></code>, <code class="computeroutput"><span class="identifier">y</span> <span class="special">&gt;=</span>
641                      <span class="identifier">x</span></code>
642                    </p>
643                  </td>
644</tr>
645<tr>
646<td>
647                    <p>
648                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">&lt;=</span>
649                      <span class="identifier">self</span></code>
650                    </p>
651                  </td>
652<td>
653                    <p>
654                      <code class="computeroutput"><span class="identifier">__ge__</span></code>
655                    </p>
656                  </td>
657<td>
658                    <p>
659                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">&lt;=</span>
660                      <span class="identifier">x</span></code>
661                    </p>
662                  </td>
663<td>
664                    <p>
665                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">&gt;=</span>
666                      <span class="identifier">x</span></code>, <code class="computeroutput"><span class="identifier">x</span> <span class="special">&lt;=</span>
667                      <span class="identifier">y</span></code>
668                    </p>
669                  </td>
670</tr>
671<tr>
672<td>
673                    <p>
674                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">&gt;=</span>
675                      <span class="identifier">r</span></code>
676                    </p>
677                  </td>
678<td>
679                    <p>
680                      <code class="computeroutput"><span class="identifier">__ge__</span></code>
681                    </p>
682                  </td>
683<td>
684                    <p>
685                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&gt;=</span>
686                      <span class="identifier">y</span></code>
687                    </p>
688                  </td>
689<td>
690                    <p>
691                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&gt;=</span>
692                      <span class="identifier">y</span></code>, <code class="computeroutput"><span class="identifier">y</span> <span class="special">&lt;=</span>
693                      <span class="identifier">x</span></code>
694                    </p>
695                  </td>
696</tr>
697<tr>
698<td>
699                    <p>
700                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">&lt;=</span>
701                      <span class="identifier">self</span></code>
702                    </p>
703                  </td>
704<td>
705                    <p>
706                      <code class="computeroutput"><span class="identifier">__le__</span></code>
707                    </p>
708                  </td>
709<td>
710                    <p>
711                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">&gt;=</span>
712                      <span class="identifier">x</span></code>
713                    </p>
714                  </td>
715<td>
716                    <p>
717                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">&lt;=</span>
718                      <span class="identifier">x</span></code>, <code class="computeroutput"><span class="identifier">x</span> <span class="special">&gt;=</span>
719                      <span class="identifier">y</span></code>
720                    </p>
721                  </td>
722</tr>
723</tbody>
724</table></div>
725</div>
726<div class="section">
727<div class="titlepage"><div><div><h4 class="title">
728<a name="high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_non_member_operations"></a><a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_non_member_operations" title="self_t non-member operations"><code class="computeroutput"><span class="identifier">self_t</span></code> non-member operations</a>
729</h4></div></div></div>
730<p>
731            The operations whose names begin with "__r" below will only
732            be called if the left-hand operand does not already support the given
733            operation, as described <a href="http://www.python.org/doc/current/ref/numeric-types.html#l2h-152" target="_top">here</a>.
734          </p>
735<div class="informaltable"><table class="table">
736<colgroup>
737<col>
738<col>
739<col>
740</colgroup>
741<thead><tr>
742<th>
743                    <p>
744                      C++ Expression
745                    </p>
746                  </th>
747<th>
748                    <p>
749                      Python Method Name
750                    </p>
751                  </th>
752<th>
753                    <p>
754                      C++ Implementation
755                    </p>
756                  </th>
757</tr></thead>
758<tbody>
759<tr>
760<td>
761                    <p>
762                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">+</span>
763                      <span class="identifier">r</span></code>
764                    </p>
765                  </td>
766<td>
767                    <p>
768                      <code class="computeroutput"><span class="identifier">__add__</span></code>
769                    </p>
770                  </td>
771<td>
772                    <p>
773                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">+</span>
774                      <span class="identifier">y</span></code>
775                    </p>
776                  </td>
777</tr>
778<tr>
779<td>
780                    <p>
781                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">+</span>
782                      <span class="identifier">self</span></code>
783                    </p>
784                  </td>
785<td>
786                    <p>
787                      <code class="computeroutput"><span class="identifier">__radd__</span></code>
788                    </p>
789                  </td>
790<td>
791                    <p>
792                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">+</span>
793                      <span class="identifier">x</span></code>
794                    </p>
795                  </td>
796</tr>
797<tr>
798<td>
799                    <p>
800                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">-</span>
801                      <span class="identifier">r</span></code>
802                    </p>
803                  </td>
804<td>
805                    <p>
806                      <code class="computeroutput"><span class="identifier">__sub__</span></code>
807                    </p>
808                  </td>
809<td>
810                    <p>
811                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">-</span>
812                      <span class="identifier">y</span></code>
813                    </p>
814                  </td>
815</tr>
816<tr>
817<td>
818                    <p>
819                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">-</span>
820                      <span class="identifier">self</span></code>
821                    </p>
822                  </td>
823<td>
824                    <p>
825                      <code class="computeroutput"><span class="identifier">__rsub__</span></code>
826                    </p>
827                  </td>
828<td>
829                    <p>
830                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">-</span>
831                      <span class="identifier">x</span></code>
832                    </p>
833                  </td>
834</tr>
835<tr>
836<td>
837                    <p>
838                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">*</span>
839                      <span class="identifier">r</span></code>
840                    </p>
841                  </td>
842<td>
843                    <p>
844                      <code class="computeroutput"><span class="identifier">__mult__</span></code>
845                    </p>
846                  </td>
847<td>
848                    <p>
849                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">*</span>
850                      <span class="identifier">y</span></code>
851                    </p>
852                  </td>
853</tr>
854<tr>
855<td>
856                    <p>
857                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">*</span>
858                      <span class="identifier">self</span></code>
859                    </p>
860                  </td>
861<td>
862                    <p>
863                      <code class="computeroutput"><span class="identifier">__rmult__</span></code>
864                    </p>
865                  </td>
866<td>
867                    <p>
868                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">*</span>
869                      <span class="identifier">x</span></code>
870                    </p>
871                  </td>
872</tr>
873<tr>
874<td>
875                    <p>
876                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">/</span>
877                      <span class="identifier">r</span></code>
878                    </p>
879                  </td>
880<td>
881                    <p>
882                      <code class="computeroutput"><span class="identifier">__div__</span></code>
883                    </p>
884                  </td>
885<td>
886                    <p>
887                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">/</span>
888                      <span class="identifier">y</span></code>
889                    </p>
890                  </td>
891</tr>
892<tr>
893<td>
894                    <p>
895                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">/</span>
896                      <span class="identifier">self</span></code>
897                    </p>
898                  </td>
899<td>
900                    <p>
901                      <code class="computeroutput"><span class="identifier">__rdiv__</span></code>
902                    </p>
903                  </td>
904<td>
905                    <p>
906                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">/</span>
907                      <span class="identifier">x</span></code>
908                    </p>
909                  </td>
910</tr>
911<tr>
912<td>
913                    <p>
914                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">%</span>
915                      <span class="identifier">r</span></code>
916                    </p>
917                  </td>
918<td>
919                    <p>
920                      <code class="computeroutput"><span class="identifier">__mod__</span></code>
921                    </p>
922                  </td>
923<td>
924                    <p>
925                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">%</span>
926                      <span class="identifier">y</span></code>
927                    </p>
928                  </td>
929</tr>
930<tr>
931<td>
932                    <p>
933                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">%</span>
934                      <span class="identifier">self</span></code>
935                    </p>
936                  </td>
937<td>
938                    <p>
939                      <code class="computeroutput"><span class="identifier">__rmod__</span></code>
940                    </p>
941                  </td>
942<td>
943                    <p>
944                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">%</span>
945                      <span class="identifier">x</span></code>
946                    </p>
947                  </td>
948</tr>
949<tr>
950<td>
951                    <p>
952                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">&gt;&gt;</span>
953                      <span class="identifier">r</span></code>
954                    </p>
955                  </td>
956<td>
957                    <p>
958                      <code class="computeroutput"><span class="identifier">__rshift__</span></code>
959                    </p>
960                  </td>
961<td>
962                    <p>
963                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&gt;&gt;</span>
964                      <span class="identifier">y</span></code>
965                    </p>
966                  </td>
967</tr>
968<tr>
969<td>
970                    <p>
971                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">&gt;&gt;</span>
972                      <span class="identifier">self</span></code>
973                    </p>
974                  </td>
975<td>
976                    <p>
977                      <code class="computeroutput"><span class="identifier">__rrshift__</span></code>
978                    </p>
979                  </td>
980<td>
981                    <p>
982                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">&gt;&gt;</span>
983                      <span class="identifier">x</span></code>
984                    </p>
985                  </td>
986</tr>
987<tr>
988<td>
989                    <p>
990                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">&lt;&lt;</span>
991                      <span class="identifier">r</span></code>
992                    </p>
993                  </td>
994<td>
995                    <p>
996                      <code class="computeroutput"><span class="identifier">__lshift__</span></code>
997                    </p>
998                  </td>
999<td>
1000                    <p>
1001                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&lt;&lt;</span>
1002                      <span class="identifier">y</span></code>
1003                    </p>
1004                  </td>
1005</tr>
1006<tr>
1007<td>
1008                    <p>
1009                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">&lt;&lt;</span>
1010                      <span class="identifier">self</span></code>
1011                    </p>
1012                  </td>
1013<td>
1014                    <p>
1015                      <code class="computeroutput"><span class="identifier">__rlshift__</span></code>
1016                    </p>
1017                  </td>
1018<td>
1019                    <p>
1020                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">&lt;&lt;</span>
1021                      <span class="identifier">x</span></code>
1022                    </p>
1023                  </td>
1024</tr>
1025<tr>
1026<td>
1027                    <p>
1028                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">&amp;</span>
1029                      <span class="identifier">r</span></code>
1030                    </p>
1031                  </td>
1032<td>
1033                    <p>
1034                      <code class="computeroutput"><span class="identifier">__and__</span></code>
1035                    </p>
1036                  </td>
1037<td>
1038                    <p>
1039                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">&amp;</span>
1040                      <span class="identifier">y</span></code>
1041                    </p>
1042                  </td>
1043</tr>
1044<tr>
1045<td>
1046                    <p>
1047                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">&amp;</span>
1048                      <span class="identifier">self</span></code>
1049                    </p>
1050                  </td>
1051<td>
1052                    <p>
1053                      <code class="computeroutput"><span class="identifier">__rand__</span></code>
1054                    </p>
1055                  </td>
1056<td>
1057                    <p>
1058                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">&amp;</span>
1059                      <span class="identifier">x</span></code>
1060                    </p>
1061                  </td>
1062</tr>
1063<tr>
1064<td>
1065                    <p>
1066                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">^</span>
1067                      <span class="identifier">r</span></code>
1068                    </p>
1069                  </td>
1070<td>
1071                    <p>
1072                      <code class="computeroutput"><span class="identifier">__xor__</span></code>
1073                    </p>
1074                  </td>
1075<td>
1076                    <p>
1077                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">^</span>
1078                      <span class="identifier">y</span></code>
1079                    </p>
1080                  </td>
1081</tr>
1082<tr>
1083<td>
1084                    <p>
1085                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">^</span>
1086                      <span class="identifier">self</span></code>
1087                    </p>
1088                  </td>
1089<td>
1090                    <p>
1091                      <code class="computeroutput"><span class="identifier">__rxor__</span></code>
1092                    </p>
1093                  </td>
1094<td>
1095                    <p>
1096                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">^</span>
1097                      <span class="identifier">x</span></code>
1098                    </p>
1099                  </td>
1100</tr>
1101<tr>
1102<td>
1103                    <p>
1104                      <code class="computeroutput"><span class="identifier">self</span> <span class="special">|</span>
1105                      <span class="identifier">r</span></code>
1106                    </p>
1107                  </td>
1108<td>
1109                    <p>
1110                      <code class="computeroutput"><span class="identifier">__or__</span></code>
1111                    </p>
1112                  </td>
1113<td>
1114                    <p>
1115                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">|</span>
1116                      <span class="identifier">y</span></code>
1117                    </p>
1118                  </td>
1119</tr>
1120<tr>
1121<td>
1122                    <p>
1123                      <code class="computeroutput"><span class="identifier">l</span> <span class="special">|</span>
1124                      <span class="identifier">self</span></code>
1125                    </p>
1126                  </td>
1127<td>
1128                    <p>
1129                      <code class="computeroutput"><span class="identifier">__ror__</span></code>
1130                    </p>
1131                  </td>
1132<td>
1133                    <p>
1134                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">|</span>
1135                      <span class="identifier">x</span></code>
1136                    </p>
1137                  </td>
1138</tr>
1139<tr>
1140<td>
1141                    <p>
1142                      <code class="computeroutput"><span class="identifier">pow</span><span class="special">(</span><span class="identifier">self</span><span class="special">,</span>
1143                      <span class="identifier">r</span><span class="special">)</span></code>
1144                    </p>
1145                  </td>
1146<td>
1147                    <p>
1148                      <code class="computeroutput"><span class="identifier">__pow__</span></code>
1149                    </p>
1150                  </td>
1151<td>
1152                    <p>
1153                      <code class="computeroutput"><span class="identifier">x</span> <span class="special">**</span>
1154                      <span class="identifier">y</span></code>
1155                    </p>
1156                  </td>
1157</tr>
1158<tr>
1159<td>
1160                    <p>
1161                      <code class="computeroutput"><span class="identifier">pow</span><span class="special">(</span><span class="identifier">l</span><span class="special">,</span>
1162                      <span class="identifier">self</span><span class="special">)</span></code>
1163                    </p>
1164                  </td>
1165<td>
1166                    <p>
1167                      <code class="computeroutput"><span class="identifier">__rpow__</span></code>
1168                    </p>
1169                  </td>
1170<td>
1171                    <p>
1172                      <code class="computeroutput"><span class="identifier">y</span> <span class="special">**</span>
1173                      <span class="identifier">x</span></code>
1174                    </p>
1175                  </td>
1176</tr>
1177</tbody>
1178</table></div>
1179</div>
1180<div class="section">
1181<div class="titlepage"><div><div><h4 class="title">
1182<a name="high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_unary_operations"></a><a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_unary_operations" title="self_t unary operations"><code class="computeroutput"><span class="identifier">self_t</span></code> unary operations</a>
1183</h4></div></div></div>
1184<div class="informaltable"><table class="table">
1185<colgroup>
1186<col>
1187<col>
1188<col>
1189</colgroup>
1190<thead><tr>
1191<th>
1192                    <p>
1193                      C++ Expression
1194                    </p>
1195                  </th>
1196<th>
1197                    <p>
1198                      Python Method Name
1199                    </p>
1200                  </th>
1201<th>
1202                    <p>
1203                      C++ Implementation
1204                    </p>
1205                  </th>
1206</tr></thead>
1207<tbody>
1208<tr>
1209<td>
1210                    <p>
1211                      <code class="computeroutput"><span class="special">-</span><span class="identifier">self</span></code>
1212                    </p>
1213                  </td>
1214<td>
1215                    <p>
1216                      <code class="computeroutput"><span class="identifier">__neg__</span></code>
1217                    </p>
1218                  </td>
1219<td>
1220                    <p>
1221                      <code class="computeroutput"><span class="special">-</span><span class="identifier">x</span></code>
1222                    </p>
1223                  </td>
1224</tr>
1225<tr>
1226<td>
1227                    <p>
1228                      <code class="computeroutput"><span class="special">+</span><span class="identifier">self</span></code>
1229                    </p>
1230                  </td>
1231<td>
1232                    <p>
1233                      <code class="computeroutput"><span class="identifier">__pos__</span></code>
1234                    </p>
1235                  </td>
1236<td>
1237                    <p>
1238                      <code class="computeroutput"><span class="special">+</span><span class="identifier">x</span></code>
1239                    </p>
1240                  </td>
1241</tr>
1242<tr>
1243<td>
1244                    <p>
1245                      <code class="computeroutput"><span class="special">~</span><span class="identifier">self</span></code>
1246                    </p>
1247                  </td>
1248<td>
1249                    <p>
1250                      <code class="computeroutput"><span class="identifier">__invert__</span></code>
1251                    </p>
1252                  </td>
1253<td>
1254                    <p>
1255                      <code class="computeroutput"><span class="special">~</span><span class="identifier">x</span></code>
1256                    </p>
1257                  </td>
1258</tr>
1259<tr>
1260<td>
1261                    <p>
1262                      <code class="computeroutput"><span class="keyword">not</span> <span class="identifier">self</span></code>
1263                      or <code class="computeroutput"><span class="special">!</span><span class="identifier">self</span></code>
1264                    </p>
1265                  </td>
1266<td>
1267                    <p>
1268                      <code class="computeroutput"><span class="identifier">__nonzero__</span></code>
1269                    </p>
1270                  </td>
1271<td>
1272                    <p>
1273                      <code class="computeroutput"><span class="special">!!</span><span class="identifier">x</span></code>
1274                    </p>
1275                  </td>
1276</tr>
1277</tbody>
1278</table></div>
1279</div>
1280<div class="section">
1281<div class="titlepage"><div><div><h4 class="title">
1282<a name="high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_value_operations"></a><a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_self_ns_self_t.self_t_value_operations" title="self_t value operations"><code class="computeroutput"><span class="identifier">self_t</span></code> value operations</a>
1283</h4></div></div></div>
1284<div class="informaltable"><table class="table">
1285<colgroup>
1286<col>
1287<col>
1288<col>
1289</colgroup>
1290<thead><tr>
1291<th>
1292                    <p>
1293                      C++ Expression
1294                    </p>
1295                  </th>
1296<th>
1297                    <p>
1298                      Python Method Name
1299                    </p>
1300                  </th>
1301<th>
1302                    <p>
1303                      C++ Implementation
1304                    </p>
1305                  </th>
1306</tr></thead>
1307<tbody>
1308<tr>
1309<td>
1310                    <p>
1311                      <code class="computeroutput"><span class="identifier">int_</span><span class="special">(</span><span class="identifier">self</span><span class="special">)</span></code>
1312                    </p>
1313                  </td>
1314<td>
1315                    <p>
1316                      <code class="computeroutput"><span class="identifier">__int__</span></code>
1317                    </p>
1318                  </td>
1319<td>
1320                    <p>
1321                      <code class="computeroutput"><span class="keyword">long</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code>
1322                    </p>
1323                  </td>
1324</tr>
1325<tr>
1326<td>
1327                    <p>
1328                      <code class="computeroutput"><span class="identifier">long_</span><span class="special">(</span><span class="identifier">self</span><span class="special">)</span></code>
1329                    </p>
1330                  </td>
1331<td>
1332                    <p>
1333                      <code class="computeroutput"><span class="identifier">__long__</span></code>
1334                    </p>
1335                  </td>
1336<td>
1337                    <p>
1338                      <code class="computeroutput"><span class="identifier">PyLong_FromLong</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code>
1339                    </p>
1340                  </td>
1341</tr>
1342<tr>
1343<td>
1344                    <p>
1345                      <code class="computeroutput"><span class="identifier">float_</span><span class="special">(</span><span class="identifier">self</span><span class="special">)</span></code>
1346                    </p>
1347                  </td>
1348<td>
1349                    <p>
1350                      <code class="computeroutput"><span class="identifier">__float__</span></code>
1351                    </p>
1352                  </td>
1353<td>
1354                    <p>
1355                      <code class="computeroutput"><span class="keyword">double</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code>
1356                    </p>
1357                  </td>
1358</tr>
1359<tr>
1360<td>
1361                    <p>
1362                      <code class="computeroutput"><span class="identifier">complex_</span><span class="special">(</span><span class="identifier">self</span><span class="special">)</span></code>
1363                    </p>
1364                  </td>
1365<td>
1366                    <p>
1367                      <code class="computeroutput"><span class="identifier">__complex__</span></code>
1368                    </p>
1369                  </td>
1370<td>
1371                    <p>
1372                      <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">complex</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;(</span><span class="identifier">x</span><span class="special">)</span></code>
1373                    </p>
1374                  </td>
1375</tr>
1376<tr>
1377<td>
1378                    <p>
1379                      <code class="computeroutput"><span class="identifier">str</span><span class="special">(</span><span class="identifier">self</span><span class="special">)</span></code>
1380                    </p>
1381                  </td>
1382<td>
1383                    <p>
1384                      <code class="computeroutput"><span class="identifier">__str__</span></code>
1385                    </p>
1386                  </td>
1387<td>
1388                    <p>
1389                      <code class="computeroutput"><span class="identifier">lexical_cast</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;(</span><span class="identifier">x</span><span class="special">)</span></code>
1390                    </p>
1391                  </td>
1392</tr>
1393<tr>
1394<td>
1395                    <p>
1396                      <code class="computeroutput"><span class="identifier">repr</span><span class="special">(</span><span class="identifier">self</span><span class="special">)</span></code>
1397                    </p>
1398                  </td>
1399<td>
1400                    <p>
1401                      <code class="computeroutput"><span class="identifier">__repr__</span></code>
1402                    </p>
1403                  </td>
1404<td>
1405                    <p>
1406                      <code class="computeroutput"><span class="identifier">lexical_cast</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;(</span><span class="identifier">x</span><span class="special">)</span></code>
1407                    </p>
1408                  </td>
1409</tr>
1410</tbody>
1411</table></div>
1412</div>
1413</div>
1414<div class="section">
1415<div class="titlepage"><div><div><h3 class="title">
1416<a name="high_level_components.boost_python_operators_hpp.class_template_other"></a><a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_template_other" title="Class template other">Class
1417        template <code class="computeroutput"><span class="identifier">other</span></code></a>
1418</h3></div></div></div>
1419<p>
1420          Instances of <code class="computeroutput"><span class="identifier">other</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
1421          can be used in operator expressions with <a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.object_self" title="Object self">self</a>;
1422          the result is equivalent to the same expression with a <code class="computeroutput"><span class="identifier">T</span></code>
1423          object in place of <code class="computeroutput"><span class="identifier">other</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>. Use <code class="computeroutput"><span class="identifier">other</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> to prevent construction of a <code class="computeroutput"><span class="identifier">T</span></code> object in case it is heavyweight, when
1424          no constructor is available, or simply for clarity.
1425        </p>
1426<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">python</span>
1427<span class="special">{</span>
1428  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
1429  <span class="keyword">struct</span> <span class="identifier">other</span>
1430  <span class="special">{</span>
1431  <span class="special">};</span>
1432<span class="special">}}</span>
1433</pre>
1434</div>
1435<div class="section">
1436<div class="titlepage"><div><div><h3 class="title">
1437<a name="high_level_components.boost_python_operators_hpp.class_template_detail_operator"></a><a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.class_template_detail_operator" title="Class template detail::operator_">Class
1438        template <code class="computeroutput"><span class="identifier">detail</span><span class="special">::</span><span class="identifier">operator_</span></code></a>
1439</h3></div></div></div>
1440<p>
1441          Instantiations of <code class="computeroutput"><span class="identifier">detail</span><span class="special">::</span><span class="identifier">operator_</span><span class="special">&lt;&gt;</span></code> are used as the return type of
1442          operator expressions involving <a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.object_self" title="Object self">self</a>.
1443          This should be considered an implementation detail and is only documented
1444          here as a way of showing how the result of self-expressions match calls
1445          to <a class="link" href="../high_level_components.html#high_level_components.boost_python_class_hpp.class_template_class_t_bases_hel.class_template_class_modifier_fu" title="Class template class_ modifier functions"><code class="computeroutput"><span class="identifier">class_</span><span class="special">&lt;&gt;::</span><span class="identifier">def</span><span class="special">()</span></code></a>.
1446        </p>
1447<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">python</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">detail</span>
1448<span class="special">{</span>
1449  <span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span>
1450  <span class="keyword">struct</span> <span class="identifier">operator_</span>
1451  <span class="special">{</span>
1452  <span class="special">};</span>
1453<span class="special">}}}</span>
1454</pre>
1455</div>
1456<div class="section">
1457<div class="titlepage"><div><div><h3 class="title">
1458<a name="high_level_components.boost_python_operators_hpp.object_self"></a><a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.object_self" title="Object self">Object
1459        <code class="computeroutput"><span class="identifier">self</span></code></a>
1460</h3></div></div></div>
1461<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">python</span>
1462<span class="special">{</span>
1463  <span class="keyword">using</span> <span class="identifier">self_ns</span><span class="special">::</span><span class="identifier">self</span><span class="special">;</span>
1464<span class="special">}}</span>
1465</pre>
1466</div>
1467<div class="section">
1468<div class="titlepage"><div><div><h3 class="title">
1469<a name="high_level_components.boost_python_operators_hpp.example"></a><a class="link" href="boost_python_operators_hpp.html#high_level_components.boost_python_operators_hpp.example" title="Example">Example</a>
1470</h3></div></div></div>
1471<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">python</span><span class="special">/</span><span class="identifier">module</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1472<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">python</span><span class="special">/</span><span class="keyword">class</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1473<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">python</span><span class="special">/</span><span class="identifier">operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1474<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1475
1476<span class="keyword">struct</span> <span class="identifier">number</span>
1477   <span class="special">:</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">integer_arithmetic</span><span class="special">&lt;</span><span class="identifier">number</span><span class="special">&gt;</span>
1478<span class="special">{</span>
1479    <span class="keyword">explicit</span> <span class="identifier">number</span><span class="special">(</span><span class="keyword">long</span> <span class="identifier">x_</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">x</span><span class="special">(</span><span class="identifier">x_</span><span class="special">)</span> <span class="special">{}</span>
1480    <span class="keyword">operator</span> <span class="keyword">long</span><span class="special">()</span> <span class="keyword">const</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">x</span><span class="special">;</span> <span class="special">}</span>
1481
1482    <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
1483    <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span>
1484    <span class="special">{</span> <span class="identifier">x</span> <span class="special">+=</span> <span class="identifier">rhs</span><span class="special">;</span> <span class="keyword">return</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span> <span class="special">}</span>
1485
1486    <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
1487    <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span>
1488    <span class="special">{</span> <span class="identifier">x</span> <span class="special">-=</span> <span class="identifier">rhs</span><span class="special">;</span> <span class="keyword">return</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span> <span class="special">}</span>
1489
1490    <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
1491    <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*=(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span>
1492    <span class="special">{</span> <span class="identifier">x</span> <span class="special">*=</span> <span class="identifier">rhs</span><span class="special">;</span> <span class="keyword">return</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span> <span class="special">}</span>
1493
1494    <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
1495    <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">/=(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span>
1496    <span class="special">{</span> <span class="identifier">x</span> <span class="special">/=</span> <span class="identifier">rhs</span><span class="special">;</span> <span class="keyword">return</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span> <span class="special">}</span>
1497
1498    <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
1499    <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">%=(</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span>
1500    <span class="special">{</span> <span class="identifier">x</span> <span class="special">%=</span> <span class="identifier">rhs</span><span class="special">;</span> <span class="keyword">return</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span> <span class="special">}</span>
1501
1502   <span class="keyword">long</span> <span class="identifier">x</span><span class="special">;</span>
1503<span class="special">};</span>
1504
1505<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">python</span><span class="special">;</span>
1506<span class="identifier">BOOST_PYTHON_MODULE</span><span class="special">(</span><span class="identifier">demo</span><span class="special">)</span>
1507<span class="special">{</span>
1508   <span class="identifier">class_</span><span class="special">&lt;</span><span class="identifier">number</span><span class="special">&gt;(</span><span class="string">"number"</span><span class="special">,</span> <span class="identifier">init</span><span class="special">&lt;</span><span class="keyword">long</span><span class="special">&gt;())</span>
1509      <span class="comment">// interoperate with self</span>
1510      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">+=</span> <span class="identifier">self</span><span class="special">)</span>
1511      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">+</span> <span class="identifier">self</span><span class="special">)</span>
1512      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">-=</span> <span class="identifier">self</span><span class="special">)</span>
1513      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">-</span> <span class="identifier">self</span><span class="special">)</span>
1514      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">*=</span> <span class="identifier">self</span><span class="special">)</span>
1515      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">*</span> <span class="identifier">self</span><span class="special">)</span>
1516      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">/=</span> <span class="identifier">self</span><span class="special">)</span>
1517      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">/</span> <span class="identifier">self</span><span class="special">)</span>
1518      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">%=</span> <span class="identifier">self</span><span class="special">)</span>
1519      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">%</span> <span class="identifier">self</span><span class="special">)</span>
1520
1521      <span class="comment">// Convert to Python int</span>
1522      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">int_</span><span class="special">(</span><span class="identifier">self</span><span class="special">))</span>
1523
1524      <span class="comment">// interoperate with long</span>
1525      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">+=</span> <span class="keyword">long</span><span class="special">())</span>
1526      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">+</span> <span class="keyword">long</span><span class="special">())</span>
1527      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="keyword">long</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">self</span><span class="special">)</span>
1528      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">-=</span> <span class="keyword">long</span><span class="special">())</span>
1529      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">-</span> <span class="keyword">long</span><span class="special">())</span>
1530      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="keyword">long</span><span class="special">()</span> <span class="special">-</span> <span class="identifier">self</span><span class="special">)</span>
1531      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">*=</span> <span class="keyword">long</span><span class="special">())</span>
1532      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">*</span> <span class="keyword">long</span><span class="special">())</span>
1533      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="keyword">long</span><span class="special">()</span> <span class="special">*</span> <span class="identifier">self</span><span class="special">)</span>
1534      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">/=</span> <span class="keyword">long</span><span class="special">())</span>
1535      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">/</span> <span class="keyword">long</span><span class="special">())</span>
1536      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="keyword">long</span><span class="special">()</span> <span class="special">/</span> <span class="identifier">self</span><span class="special">)</span>
1537      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">%=</span> <span class="keyword">long</span><span class="special">())</span>
1538      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="identifier">self</span> <span class="special">%</span> <span class="keyword">long</span><span class="special">())</span>
1539      <span class="special">.</span><span class="identifier">def</span><span class="special">(</span><span class="keyword">long</span><span class="special">()</span> <span class="special">%</span> <span class="identifier">self</span><span class="special">)</span>
1540      <span class="special">;</span>
1541<span class="special">}</span>
1542</pre>
1543</div>
1544</div>
1545<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
1546<td align="left"></td>
1547<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2015 David Abrahams, Stefan Seefeld<p>
1548        Distributed under the Boost Software License, Version 1.0. (See accompanying
1549        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>
1550      </p>
1551</div></td>
1552</tr></table>
1553<hr>
1554<div class="spirit-nav">
1555<a accesskey="p" href="boost_python_module_hpp.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../high_level_components.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="boost_python_scope_hpp.html"><img src="../../images/next.png" alt="Next"></a>
1556</div>
1557</body>
1558</html>
1559