summaryrefslogtreecommitdiff
path: root/libs/python/doc/v2/instance_holder.html
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-06-25 22:59:01 +0000
committer <>2013-09-27 11:49:28 +0000
commit8c4528713d907ee2cfd3bfcbbad272c749867f84 (patch)
treec09e2ce80f47b90c85cc720f5139089ad9c8cfff /libs/python/doc/v2/instance_holder.html
downloadboost-tarball-baserock/morph.tar.gz
Imported from /home/lorry/working-area/delta_boost-tarball/boost_1_54_0.tar.bz2.boost_1_54_0baserock/morph
Diffstat (limited to 'libs/python/doc/v2/instance_holder.html')
-rw-r--r--libs/python/doc/v2/instance_holder.html219
1 files changed, 219 insertions, 0 deletions
diff --git a/libs/python/doc/v2/instance_holder.html b/libs/python/doc/v2/instance_holder.html
new file mode 100644
index 000000000..87571d1da
--- /dev/null
+++ b/libs/python/doc/v2/instance_holder.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+
+<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
+<!-- Software License, Version 1.0. (See accompanying -->
+<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
+<html>
+ <head>
+ <meta name="generator" content="HTML Tidy, see www.w3.org">
+ <meta http-equiv="Content-Type" content=
+ "text/html; charset=iso-8859-1">
+ <link rel="stylesheet" type="text/css" href="../boost.css">
+
+ <title>Boost.Python - &lt;boost/python/instance_holder.hpp&gt;</title>
+ </head>
+
+<style type="text/css">
+ p.c4 {font-style: italic}
+ span.c3 {color: #ff0000}
+ h2.c2 {text-align: center}
+ h1.c1 {text-align: center}
+</style>
+
+ <body link="#0000ff" vlink="#800080">
+ <table border="0" cellpadding="7" cellspacing="0" width="100%"
+ summary="header">
+ <tr>
+ <td valign="top" width="300">
+ <h3><a href="../../../../index.htm"><img height="86" width=
+ "277" alt="C++ Boost" src="../../../../boost.png" border=
+ "0"></a></h3>
+
+ <td valign="top">
+ <h1 class="c1"><a href="../index.html">Boost.Python</a></h1>
+
+ <h2 class="c2">Header &lt;boost/python/instance_holder.hpp&gt;</h2>
+ </table>
+ <hr>
+
+ <h2>Contents</h2>
+
+ <dl class="page-index">
+ <dt><a href="#introduction">Introduction</a>
+
+ <dt><a href="#classes">Classes</a>
+
+ <dd>
+ <dl class="page-index">
+ <dt><a href="#instance_holder-spec">Class
+ <code>instance_holder</code></a>
+
+ <dd>
+ <dl class="page-index">
+ <dt><a href="#instance_holder-spec-synopsis">Class
+ <code>instance_holder</code> synopsis</a>
+
+ <dt><a href="#instance_holder-spec-ctors">Class
+ <code>instance_holder</code> destructor</a>
+
+ <dt><a href="#instance_holder-spec-modifiers">Class
+ <code>instance_holder</code> modifier functions</a>
+
+ <dt><a href="#instance_holder-spec-observers">Class
+ <code>instance_holder</code> observer functions</a>
+ </dl>
+ </dl>
+
+ <dt><a href="#examples">Example</a>
+ </dl>
+ <hr>
+
+ <h2><a name="introduction"></a>Introduction</h2>
+
+ <p><code>&lt;boost/python/instance_holder.hpp&gt;</code> provides
+ <code>class&nbsp;instance_holder</code>, the base class for types
+ which hold C++ instances of wrapped classes.
+
+ <h2><a name="classes"></a>Classes</h2>
+
+ <h3><a name="instance_holder-spec"></a>Class <code>instance_holder</code></h3>
+
+ <p><code>instance_holder</code> is an abstract base class whose
+ concrete derived classes hold C++ class instances within their
+ Python object wrappers. To allow multiple inheritance in Python
+ from C++ class wrappers, each such Python object contains a chain
+ of <code>instance_holder</code>s. When an <code>__init__</code>
+ function for a wrapped C++ class is invoked, a new
+ <code>instance_holder</code> instance is created and installed in
+ the Python object using its <code><a
+ href="#instance_holder-spec-modifiers">install</a></code>()
+ function. Each concrete class derived from
+ <code>instance_holder</code> must provide a <code><a
+ href="#instance_holder-spec-observers">holds</a>()</code>
+ implementation which allows Boost.Python to query it for the
+ type(s) it is holding. In order to support the held type's wrapped
+ constructor(s), the class must also provide constructors that can
+ accept an initial <code>PyObject*</code> argument referring to the
+ owning Python object, and which forward the rest of their
+ arguments to the constructor of the held type. The initial
+ argument is needed to enable virtual function overriding in
+ Python, and may be ignored, depending on the specific
+ <code>instance_holder</code> subclass.
+
+ <h4><a name="instance_holder-spec-synopsis"></a>Class instance_holder
+ synopsis</h4>
+<pre>
+namespace boost { namespace python
+{
+ class instance_holder : <a href="../../../utility/utility.htm#Class_noncopyable">noncopyable</a>
+ {
+ public:
+ // destructor
+ virtual ~instance_holder();
+
+ // instance_holder modifiers
+ void install(PyObject* inst) throw();
+
+ // instance_holder observers
+ virtual void* holds(type_info) = 0;
+ };
+}}
+</pre>
+
+ <h4><a name="instance_holder-spec-ctors">Class <code>instance_holder</code>
+ destructor</a></h4>
+<pre>
+virtual ~instance_holder();
+</pre>
+
+ <dl class="function-semantics">
+ <dt><b>Effects:</b> destroys the object
+ </dl>
+
+ <h4><a name="instance_holder-spec-modifiers">Class
+ <code>instance_holder</code> modifiers</a></h4>
+<pre>
+void install(PyObject* inst) throw();
+</pre>
+
+ <dl class="function-semantics">
+ <dt><b>Requires:</b> <code>inst</code> is a Python instance of a
+ wrapped C++ class type, or is a type derived from a wrapped C++
+ class type.
+ <dt><b>Effects:</b> installs the new instance at the head of the
+ Python object's chain of held instances.
+ <dt><b>Throws:</b> nothing
+ </dl>
+
+ <h4><a name="instance_holder-spec-observers">Class <code>instance_holder</code>
+ observers</a></h4>
+<pre>
+virtual void* holds(type_info x) = 0;
+</pre>
+
+ <dl class="function-semantics">
+ <dt><b>Returns:</b> A pointer to an object of the type described
+ by <code>x</code> if <code>*this</code> contains such an object,
+ 0 otherwise.
+ </dl>
+
+ <h2><a name="examples"></a>Example</h2>
+
+The following is a simplified version of the instance holder template
+used by Boost.Python to wrap classes held by smart pointers:
+<pre>
+template &lt;class SmartPtr, class Value&gt;
+struct pointer_holder : instance_holder
+{
+ // construct from the SmartPtr type
+ pointer_holder(SmartPtr p)
+ :m_p(p)
+
+ // Forwarding constructors for the held type
+ pointer_holder(PyObject*)
+ :m_p(new Value())
+ {
+ }
+
+ template&lt;class A0&gt;
+ pointer_holder(PyObject*,A0 a0)
+ :m_p(new Value(a0))
+ {
+ }
+
+ template&lt;class A0,class A1&gt;
+ pointer_holder(PyObject*,A0 a0,A1 a1)
+ :m_p(new Value(a0,a1))
+ {
+ }
+ ...
+
+ private: // required holder implementation
+ void* holds(type_info dst_t)
+ {
+ // holds an instance of the SmartPtr type...
+ if (dst_t == python::type_id&lt;SmartPtr&gt;())
+ return &amp;this-&gt;m_p;
+
+ // ...and an instance of the SmartPtr's element_type, if the
+ // pointer is non-null
+ return python::type_id&lt;Value&gt;() == dst_t ? &amp;*this-&gt;m_p : 0;
+ }
+
+ private: // data members
+ SmartPtr m_p;
+};
+</pre>
+
+ <p>Revised
+ <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
+ 13 November, 2002
+ <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
+
+
+ <p class="c4">&copy; Copyright <a href=
+ "http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.
+
+ </body>
+</html>