Revision: 714
http://svn.sourceforge.net/pygccxml/?rev=714&view=rev
Author: roman_yakovenko
Date: 2006-11-11 23:23:32 -0800 (Sat, 11 Nov 2006)
Log Message:
-----------
integrating return_pointee_value with Py++
Added Paths:
-----------
pyplusplus_dev/pyplusplus/code_repository/call_policies.py
Added: pyplusplus_dev/pyplusplus/code_repository/call_policies.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_repository/call_policies.py (rev 0)
+++ pyplusplus_dev/pyplusplus/code_repository/call_policies.py 2006-11-12 07:23:32 UTC (rev 714)
@@ -0,0 +1,78 @@
+# Copyright 2004 Roman Yakovenko.
+# 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)
+
+"""
+This file contains C++ code - custom call policies
+"""
+
+
+namespace = "pyplusplus::call_policies"
+
+file_name = "__call_policies.pypp.hpp"
+
+code = \
+"""// Copyright 2004 Roman Yakovenko.
+// 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)
+
+#ifndef call_policies_pyplusplus_hpp__
+#define call_policies_pyplusplus_hpp__
+
+#include "boost/python.hpp"
+
+namespace pyplusplus{ namespace call_policies{
+
+namespace bpl = boost::python;
+
+namespace detail{
+
+struct make_value_holder{
+
+ template <class T>
+ static PyObject* execute(T* p){
+ if (p == 0){
+ return bpl::detail::none();
+ }
+ else{
+ bpl::object p_value( *p );
+ return bpl::incref( p_value.ptr() );
+ }
+ }
+
+};
+
+template <class R>
+struct return_pointee_value_requires_a_pointer_return_type
+# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+{}
+# endif
+;
+
+} //detail
+
+struct return_pointee_value{
+
+ template <class T>
+ struct apply{
+
+ BOOST_STATIC_CONSTANT( bool, ok = boost::is_pointer<T>::value );
+
+ typedef typename boost::mpl::if_c<
+ ok
+ , bpl::to_python_indirect<T, detail::make_value_holder>
+ , detail::return_pointee_value_requires_a_pointer_return_type<T>
+ >::type type;
+
+ };
+
+};
+
+} /*pyplusplus*/ } /*call_policies*/
+
+
+#endif//call_policies_pyplusplus_hpp__
+
+"""
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|