aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/pycxx/Python2
diff options
context:
space:
mode:
authorqrort <qrort@yandex-team.com>2022-12-02 11:31:25 +0300
committerqrort <qrort@yandex-team.com>2022-12-02 11:31:25 +0300
commitb1f4ffc9c8abff3ba58dc1ec9a9f92d2f0de6806 (patch)
tree2a23209faf0fea5586a6d4b9cee60d1b318d29fe /contrib/libs/pycxx/Python2
parent559174a9144de40d6bb3997ea4073c82289b4974 (diff)
downloadydb-b1f4ffc9c8abff3ba58dc1ec9a9f92d2f0de6806.tar.gz
remove kikimr/driver DEPENDS
Diffstat (limited to 'contrib/libs/pycxx/Python2')
-rwxr-xr-xcontrib/libs/pycxx/Python2/Config.hxx124
-rwxr-xr-xcontrib/libs/pycxx/Python2/CxxDebug.hxx17
-rwxr-xr-xcontrib/libs/pycxx/Python2/Exception.hxx210
-rwxr-xr-xcontrib/libs/pycxx/Python2/ExtensionModule.hxx207
-rwxr-xr-xcontrib/libs/pycxx/Python2/ExtensionOldType.hxx397
-rwxr-xr-xcontrib/libs/pycxx/Python2/ExtensionType.hxx418
-rwxr-xr-xcontrib/libs/pycxx/Python2/ExtensionTypeBase.hxx181
-rwxr-xr-xcontrib/libs/pycxx/Python2/Extensions.hxx189
-rwxr-xr-xcontrib/libs/pycxx/Python2/IndirectPythonInterface.hxx159
-rwxr-xr-xcontrib/libs/pycxx/Python2/Objects.hxx3629
-rwxr-xr-xcontrib/libs/pycxx/Python2/PythonType.hxx209
-rw-r--r--contrib/libs/pycxx/Python2/cxx_exceptions.cxx72
-rw-r--r--contrib/libs/pycxx/Python2/cxx_extensions.cxx2073
-rw-r--r--contrib/libs/pycxx/Python2/cxx_standard_exceptions.hxx46
-rw-r--r--contrib/libs/pycxx/Python2/cxxextensions.c49
-rw-r--r--contrib/libs/pycxx/Python2/cxxsupport.cxx174
16 files changed, 0 insertions, 8154 deletions
diff --git a/contrib/libs/pycxx/Python2/Config.hxx b/contrib/libs/pycxx/Python2/Config.hxx
deleted file mode 100755
index 8e59bd0e9c9..00000000000
--- a/contrib/libs/pycxx/Python2/Config.hxx
+++ /dev/null
@@ -1,124 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-
-#ifndef __PyCXX_config_hh__
-#define __PyCXX_config_hh__
-
-//
-// Microsoft VC++ 6.0 has no traits
-//
-#if defined( _MSC_VER )
-
-# define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1
-
-#elif defined( __GNUC__ )
-# if __GNUC__ >= 3
-# define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1
-# else
-# define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 0
-#endif
-
-//
-// Assume all other compilers do
-//
-#else
-
-// Macros to deal with deficiencies in compilers
-# define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1
-#endif
-
-#if STANDARD_LIBRARY_HAS_ITERATOR_TRAITS
-# define random_access_iterator_parent(itemtype) std::iterator<std::random_access_iterator_tag,itemtype,int>
-#else
-# define random_access_iterator_parent(itemtype) std::random_access_iterator<itemtype, int>
-#endif
-
-//
-// Which C++ standard is in use?
-//
-#if defined( _MSC_VER )
-# if _MSC_VER <= 1200
-// MSVC++ 6.0
-# define PYCXX_ISO_CPP_LIB 0
-# define STR_STREAM <strstream>
-# define TEMPLATE_TYPENAME class
-# else
-# define PYCXX_ISO_CPP_LIB 1
-# define STR_STREAM <sstream>
-# define TEMPLATE_TYPENAME typename
-# endif
-#elif defined( __GNUC__ )
-# if __GNUC__ >= 3
-# define PYCXX_ISO_CPP_LIB 1
-# define STR_STREAM <sstream>
-# define TEMPLATE_TYPENAME typename
-# else
-# define PYCXX_ISO_CPP_LIB 0
-# define STR_STREAM <strstream>
-# define TEMPLATE_TYPENAME class
-# endif
-#endif
-
-#if PYCXX_ISO_CPP_LIB
-# define STR_STREAM <sstream>
-# define OSTRSTREAM ostringstream
-# define EXPLICIT_TYPENAME typename
-# define EXPLICIT_CLASS class
-# define TEMPLATE_TYPENAME typename
-#else
-# define STR_STREAM <strstream>
-# define OSTRSTREAM ostrstream
-# define EXPLICIT_TYPENAME
-# define EXPLICIT_CLASS
-# define TEMPLATE_TYPENAME class
-#endif
-
-// specified for ymake for successful build in sandboxing mode
-#if 0
-# include <sstream>
-# include <strstream>
-#endif
-
-// before 2.5 Py_ssize_t was missing
-#ifndef PY_MAJOR_VERSION
-#error not defined PY_MAJOR_VERSION
-#endif
-#if PY_MAJOR_VERSION < 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 5)
-typedef int Py_ssize_t;
-#endif
-
-#endif // __PyCXX_config_hh__
diff --git a/contrib/libs/pycxx/Python2/CxxDebug.hxx b/contrib/libs/pycxx/Python2/CxxDebug.hxx
deleted file mode 100755
index b646ffdd9af..00000000000
--- a/contrib/libs/pycxx/Python2/CxxDebug.hxx
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// CxxDebug.hxx
-//
-// Copyright (c) 2008 Barry A. Scott
-//
-#ifndef __CXX_Debug_hxx
-#define __CXX_Debug_hxx
-
-//
-// Functions useful when debugging PyCXX
-//
-#ifdef PYCXX_DEBUG
-extern void bpt();
-extern void printRefCount( PyObject *obj );
-#endif
-
-#endif
diff --git a/contrib/libs/pycxx/Python2/Exception.hxx b/contrib/libs/pycxx/Python2/Exception.hxx
deleted file mode 100755
index dd5219cd434..00000000000
--- a/contrib/libs/pycxx/Python2/Exception.hxx
+++ /dev/null
@@ -1,210 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-
-#ifndef __CXX_Exception_h
-#define __CXX_Exception_h
-
-#include "../WrapPython.h"
-#include "../Version.hxx"
-#include "Config.hxx"
-#include "CxxDebug.hxx"
-#include "IndirectPythonInterface.hxx"
-
-#include <string>
-#include <iostream>
-
-// This mimics the Python structure, in order to minimize confusion
-namespace Py
-{
- class ExtensionExceptionType;
-
- class Object;
-
- class BaseException: public std::exception
- {
- public:
- BaseException( ExtensionExceptionType &exception, const std::string &reason );
- BaseException( ExtensionExceptionType &exception, Object &reason );
- BaseException( ExtensionExceptionType &exception, PyObject *reason );
- BaseException( PyObject *exception, Object &reason );
- BaseException( PyObject *exception, PyObject *reason );
- BaseException( PyObject *exception, const std::string &reason );
- explicit BaseException();
-
- void clear(); // clear the error
-
- virtual const char* what() const noexcept;
-
- // is the exception this specific exception 'exc'
- bool matches( ExtensionExceptionType &exc );
-
- private:
- std::string reasonMessage;
- };
-
-#if defined( PYCXX_6_2_COMPATIBILITY )
- class Exception : public BaseException
- {
- public:
- Exception( ExtensionExceptionType &exception, const std::string &reason )
- : BaseException( exception, reason )
- {}
-
- Exception( ExtensionExceptionType &exception, Object &reason )
- : BaseException( exception, reason )
- {}
-
- Exception( ExtensionExceptionType &exception, PyObject *reason )
- : BaseException( exception, reason )
- {}
-
- Exception( PyObject *exception, Object &reason )
- : BaseException ( exception, reason )
- {}
-
- Exception( PyObject *exception, PyObject *reason )
- : BaseException ( exception, reason )
- {}
-
- Exception( PyObject *exception, const std::string &reason )
- : BaseException( exception, reason )
- {}
-
- explicit Exception()
- : BaseException()
- {}
- };
-#endif
-
- // for user defined exceptions to be made know to pycxx
- typedef void (*throw_exception_func_t)( PyObject* exc );
- void addPythonException( ExtensionExceptionType &py_exc_type, throw_exception_func_t throw_func );
-
-#define PYCXX_STANDARD_EXCEPTION( eclass, bclass ) \
- class eclass : public bclass \
- { \
- public: \
- eclass( const std::string &reason ) \
- : bclass( _Exc_##eclass(), reason ) \
- , reason(reason) \
- { } \
- eclass( const char *reason ) \
- : bclass( _Exc_##eclass(), reason ) \
- , reason(reason) \
- { } \
- eclass( PyObject *reason ) \
- : bclass( _Exc_##eclass(), reason ) \
- { } \
- eclass( PyObject *exception, const std::string &reason ) \
- : bclass( exception, reason ) \
- , reason(reason) \
- { } \
- eclass( PyObject *exception, const char *reason ) \
- : bclass( exception, reason ) \
- , reason(reason) \
- { } \
- eclass( PyObject *exception, PyObject *reason ) \
- : bclass( exception, reason ) \
- { } \
- eclass( PyObject *exception, Object &reason ) \
- : bclass( exception, reason ) \
- { } \
- eclass() : bclass() {} \
- static void throwFunc(const std::string &reason) { throw eclass(reason); } \
- static void throwFuncObj(PyObject *exception) { throw eclass(exception); } \
- static PyObject *exceptionType() { return _Exc_##eclass(); } \
- ~eclass() {} \
- private: \
- std::string reason; \
- };
-
-#include "cxx_standard_exceptions.hxx"
-
-#undef PYCXX_STANDARD_EXCEPTION
-
-#define PYCXX_USER_EXCEPTION_STR_ARG( uclass ) \
-class uclass : public Py::BaseException \
-{ \
-public: \
- uclass( const std::string &reason ) \
- : Py::BaseException( m_error, reason ) \
- { } \
- ~uclass() {} \
- static void init( Py::ExtensionModuleBase &module ) \
- { \
- m_error.init( module, #uclass ); \
- Py::addPythonException( m_error, throwFunc ); \
- Py::Dict d( module.moduleDictionary() ); \
- d[#uclass] = m_error; \
- } \
-private: \
- uclass() : Py::BaseException() {} \
- static void throwFunc() \
- { \
- throw uclass(); \
- } \
- static Py::ExtensionExceptionType m_error; \
-}; \
-Py::ExtensionExceptionType uclass::m_error;
-
-#define PYCXX_USER_EXCEPTION_NO_ARG( uclass ) \
-class uclass : public Py::BaseException \
-{ \
-public: \
- uclass() \
- : Py::BaseException() \
- { } \
- ~uclass() {} \
- static void init( Py::ExtensionModuleBase &module ) \
- { \
- m_error.init( module, #uclass ); \
- Py::addPythonException( m_error, throwFunc ); \
- Py::Dict d( module.moduleDictionary() ); \
- d[#uclass] = m_error; \
- } \
-private: \
- static void throwFunc() \
- { \
- throw uclass(); \
- } \
- static Py::ExtensionExceptionType m_error; \
-}; \
-Py::ExtensionExceptionType uclass::m_error;
-
-}// Py
-
-#endif
diff --git a/contrib/libs/pycxx/Python2/ExtensionModule.hxx b/contrib/libs/pycxx/Python2/ExtensionModule.hxx
deleted file mode 100755
index 5f59dc075ff..00000000000
--- a/contrib/libs/pycxx/Python2/ExtensionModule.hxx
+++ /dev/null
@@ -1,207 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-
-#ifndef __CXX_ExtensionModule__h
-#define __CXX_ExtensionModule__h
-
-namespace Py
-{
- class ExtensionModuleBase
- {
- public:
- ExtensionModuleBase( const char *name );
- virtual ~ExtensionModuleBase();
-
- Module module( void ) const; // only valid after initialize() has been called
- Dict moduleDictionary( void ) const; // only valid after initialize() has been called
-
- virtual Object invoke_method_noargs( void *method_def ) = 0;
- virtual Object invoke_method_keyword( void *method_def, const Tuple &_args, const Dict &_keywords ) = 0;
- virtual Object invoke_method_varargs( void *method_def, const Tuple &_args ) = 0;
-
- const std::string &name() const;
- const std::string &fullName() const;
-
- // what is returned from PyInit_<module> function
- Object moduleObject( void ) const;
-
- protected:
- // Initialize the module
- void initialize( const char *module_doc );
-
- const std::string m_module_name;
- const std::string m_full_module_name;
- MethodTable m_method_table;
- PyObject *m_module;
-
- private:
- //
- // prevent the compiler generating these unwanted functions
- //
- ExtensionModuleBase( const ExtensionModuleBase & ); //unimplemented
- void operator=( const ExtensionModuleBase & ); //unimplemented
- };
-
- // Note: Python calls noargs as varargs buts args==NULL
- extern "C" PyObject *method_noargs_call_handler( PyObject *_self_and_name_tuple, PyObject * );
- extern "C" PyObject *method_varargs_call_handler( PyObject *_self_and_name_tuple, PyObject *_args );
- extern "C" PyObject *method_keyword_call_handler( PyObject *_self_and_name_tuple, PyObject *_args, PyObject *_keywords );
-
- extern "C" void do_not_dealloc( void * );
-
- template<TEMPLATE_TYPENAME T>
- class ExtensionModule : public ExtensionModuleBase
- {
- public:
- ExtensionModule( const char *name )
- : ExtensionModuleBase( name )
- {}
- virtual ~ExtensionModule()
- {}
-
- protected:
- typedef Object (T::*method_noargs_function_t)();
- typedef Object (T::*method_varargs_function_t)( const Tuple &args );
- typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws );
- typedef std::map<std::string, MethodDefExt<T> *> method_map_t;
-
- static void add_noargs_method( const char *name, method_noargs_function_t function, const char *doc="" )
- {
- method_map_t &mm = methods();
- mm[ std::string( name ) ] = new MethodDefExt<T>( name, function, method_noargs_call_handler, doc );
- }
-
- static void add_varargs_method( const char *name, method_varargs_function_t function, const char *doc="" )
- {
- method_map_t &mm = methods();
- mm[ std::string( name ) ] = new MethodDefExt<T>( name, function, method_varargs_call_handler, doc );
- }
-
- static void add_keyword_method( const char *name, method_keyword_function_t function, const char *doc="" )
- {
- method_map_t &mm = methods();
- mm[ std::string( name ) ] = new MethodDefExt<T>( name, function, method_keyword_call_handler, doc );
- }
-
- void initialize( const char *module_doc="" )
- {
- ExtensionModuleBase::initialize( module_doc );
- Dict dict( moduleDictionary() );
-
- //
- // put each of the methods into the modules dictionary
- // so that we get called back at the function in T.
- //
- method_map_t &mm = methods();
- EXPLICIT_TYPENAME method_map_t::const_iterator i = mm.begin();
- EXPLICIT_TYPENAME method_map_t::const_iterator i_end = mm.end();
- for ( ; i != i_end; ++i )
- {
- MethodDefExt<T> *method_def = (*i).second;
-
- static PyObject *self = PyCObject_FromVoidPtr( this, do_not_dealloc );
-
- Tuple args( 2 );
- args[0] = Object( self, true );
- args[1] = Object( PyCObject_FromVoidPtr( method_def, do_not_dealloc ), true );
-
- assert( m_module != NULL );
- PyObject *func = PyCFunction_NewEx
- (
- &method_def->ext_meth_def,
- new_reference_to( args ),
- m_module
- );
-
- method_def->py_method = Object( func, true );
-
- dict[ (*i).first ] = method_def->py_method;
- }
- }
-
- protected: // Tom Malcolmson reports that derived classes need access to these
- static method_map_t &methods( void )
- {
- static method_map_t *map_of_methods = NULL;
- if( map_of_methods == NULL )
- map_of_methods = new method_map_t;
-
- return *map_of_methods;
- }
-
- // this invoke function must be called from within a try catch block
- virtual Object invoke_method_noargs( void *method_def )
- {
- // cast up to the derived class, method_def and call
- T *self = static_cast<T *>( this );
- MethodDefExt<T> *meth_def = reinterpret_cast<MethodDefExt<T> *>( method_def );
-
- return (self->*meth_def->ext_noargs_function)();
- }
-
- // this invoke function must be called from within a try catch block
- virtual Object invoke_method_varargs( void *method_def, const Tuple &args )
- {
- // cast up to the derived class, method_def and call
- T *self = static_cast<T *>( this );
- MethodDefExt<T> *meth_def = reinterpret_cast<MethodDefExt<T> *>( method_def );
-
- return (self->*meth_def->ext_varargs_function)( args );
- }
-
- // this invoke function must be called from within a try catch block
- virtual Object invoke_method_keyword( void *method_def, const Tuple &args, const Dict &keywords )
- {
- // cast up to the derived class, method_def and call
- T *self = static_cast<T *>( this );
- MethodDefExt<T> *meth_def = reinterpret_cast<MethodDefExt<T> *>( method_def );
-
- return (self->*meth_def->ext_keyword_function)( args, keywords );
- }
-
- private:
- //
- // prevent the compiler generating these unwanted functions
- //
- ExtensionModule( const ExtensionModule<T> & ); //unimplemented
- void operator=( const ExtensionModule<T> & ); //unimplemented
- };
-} // Namespace Py
-
-
-// End of __CXX_ExtensionModule__h
-#endif
diff --git a/contrib/libs/pycxx/Python2/ExtensionOldType.hxx b/contrib/libs/pycxx/Python2/ExtensionOldType.hxx
deleted file mode 100755
index 570e31f6128..00000000000
--- a/contrib/libs/pycxx/Python2/ExtensionOldType.hxx
+++ /dev/null
@@ -1,397 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-
-#ifndef __CXX_ExtensionOldType__h
-#define __CXX_ExtensionOldType__h
-
-namespace Py
-{
- template<TEMPLATE_TYPENAME T> class PythonExtension
- : public PythonExtensionBase
- {
- public:
- static PyTypeObject *type_object()
- {
- return behaviors().type_object();
- }
-
- static bool check( PyObject *p )
- {
- // is p like me?
- return p->ob_type == type_object();
- }
-
- static bool check( const Object &ob )
- {
- return check( ob.ptr() );
- }
-
- //
- // every object needs getattr implemented
- // to support methods
- //
- virtual Object getattr( const char *name )
- {
- return getattr_methods( name );
- }
-
- PyObject *selfPtr()
- {
- return this;
- }
-
- Object self()
- {
- return asObject( this );
- }
-
- protected:
- explicit PythonExtension()
- : PythonExtensionBase()
- {
- PyObject_Init( this, type_object() );
-
- // every object must support getattr
- behaviors().supportGetattr();
- }
-
- virtual ~PythonExtension()
- {}
-
- static PythonType &behaviors()
- {
- static PythonType* p;
- if( p == NULL )
- {
-#if defined( _CPPRTTI ) || defined( __GNUG__ )
- const char *default_name =( typeid( T ) ).name();
-#else
- const char *default_name = "unknown";
-#endif
- p = new PythonType( sizeof( T ), 0, default_name );
- p->set_tp_dealloc( extension_object_deallocator );
- }
-
- return *p;
- }
-
- typedef Object (T::*method_noargs_function_t)();
- typedef Object (T::*method_varargs_function_t)( const Tuple &args );
- typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws );
- typedef std::map<std::string, MethodDefExt<T> *> method_map_t;
-
- // support the default attributes, __name__, __doc__ and methods
- virtual Object getattr_default( const char *_name )
- {
- std::string name( _name );
-
- if( name == "__name__" && type_object()->tp_name != NULL )
- {
- return Py::String( type_object()->tp_name );
- }
-
- if( name == "__doc__" && type_object()->tp_doc != NULL )
- {
- return Py::String( type_object()->tp_doc );
- }
-
-// trying to fake out being a class for help()
-// else if( name == "__bases__" )
-// {
-// return Py::Tuple( 0 );
-// }
-// else if( name == "__module__" )
-// {
-// return Py::Nothing();
-// }
-// else if( name == "__dict__" )
-// {
-// return Py::Dict();
-// }
-
- return getattr_methods( _name );
- }
-
- // turn a name into function object
- virtual Object getattr_methods( const char *_name )
- {
- std::string name( _name );
-
- method_map_t &mm = methods();
-
- // see if name exists and get entry with method
- EXPLICIT_TYPENAME method_map_t::const_iterator i = mm.find( name );
- if( i == mm.end() )
- {
- if( name == "__methods__" )
- {
- List methods;
-
- i = mm.begin();
- EXPLICIT_TYPENAME method_map_t::const_iterator i_end = mm.end();
-
- for( ; i != i_end; ++i )
- methods.append( String( (*i).first ) );
-
- return methods;
- }
-
- throw AttributeError( name );
- }
-
- MethodDefExt<T> *method_def = i->second;
-
- Tuple self( 2 );
-
- self[0] = Object( this );
- self[1] = Object( PyCObject_FromVoidPtr( method_def, do_not_dealloc ), true );
-
- PyObject *func = PyCFunction_NewEx( &method_def->ext_meth_def, self.ptr(), NULL );
-
- return Object(func, true);
- }
-
- // check that all methods added are unique
- static void check_unique_method_name( const char *name )
- {
- method_map_t &mm = methods();
- EXPLICIT_TYPENAME method_map_t::const_iterator i;
- i = mm.find( name );
- if( i != mm.end() )
- throw AttributeError( name );
- }
-
- static void add_noargs_method( const char *name, method_noargs_function_t function, const char *doc="" )
- {
- check_unique_method_name( name );
- method_map_t &mm = methods();
- mm[ std::string( name ) ] = new MethodDefExt<T>( name, function, method_noargs_call_handler, doc );
- }
-
- static void add_varargs_method( const char *name, method_varargs_function_t function, const char *doc="" )
- {
- check_unique_method_name( name );
- method_map_t &mm = methods();
- mm[ std::string( name ) ] = new MethodDefExt<T>( name, function, method_varargs_call_handler, doc );
- }
-
- static void add_keyword_method( const char *name, method_keyword_function_t function, const char *doc="" )
- {
- check_unique_method_name( name );
- method_map_t &mm = methods();
- mm[ std::string( name ) ] = new MethodDefExt<T>( name, function, method_keyword_call_handler, doc );
- }
-
- private:
- static method_map_t &methods( void )
- {
- static method_map_t *map_of_methods = NULL;
- if( map_of_methods == NULL )
- map_of_methods = new method_map_t;
-
- return *map_of_methods;
- }
-
- // Note: Python calls noargs as varargs buts args==NULL
- static PyObject *method_noargs_call_handler( PyObject *_self_and_name_tuple, PyObject * )
- {
- try
- {
- Tuple self_and_name_tuple( _self_and_name_tuple );
-
- PyObject *self_in_cobject = self_and_name_tuple[0].ptr();
- T *self = static_cast<T *>( self_in_cobject );
- MethodDefExt<T> *meth_def = reinterpret_cast<MethodDefExt<T> *>(
- PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ) );
- Object result;
-
- // Adding try & catch in case of STL debug-mode exceptions.
- #ifdef _STLP_DEBUG
- try
- {
- result = (self->*meth_def->ext_noargs_function)();
- }
- catch( std::__stl_debug_exception )
- {
- // throw cxx::RuntimeError( sErrMsg );
- throw RuntimeError( "Error message not set yet." );
- }
- #else
- result = (self->*meth_def->ext_noargs_function)();
- #endif // _STLP_DEBUG
-
- return new_reference_to( result.ptr() );
- }
- catch( BaseException & )
- {
- return 0;
- }
- }
-
- static PyObject *method_varargs_call_handler( PyObject *_self_and_name_tuple, PyObject *_args )
- {
- try
- {
- Tuple self_and_name_tuple( _self_and_name_tuple );
-
- PyObject *self_in_cobject = self_and_name_tuple[0].ptr();
- T *self = static_cast<T *>( self_in_cobject );
-
- MethodDefExt<T> *meth_def = reinterpret_cast<MethodDefExt<T> *>(
- PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ) );
- Tuple args( _args );
-
- Object result;
-
- // Adding try & catch in case of STL debug-mode exceptions.
- #ifdef _STLP_DEBUG
- try
- {
- result = (self->*meth_def->ext_varargs_function)( args );
- }
- catch( std::__stl_debug_exception )
- {
- throw RuntimeError( "Error message not set yet." );
- }
- #else
- result = (self->*meth_def->ext_varargs_function)( args );
- #endif // _STLP_DEBUG
-
- return new_reference_to( result.ptr() );
- }
- catch( BaseException & )
- {
- return 0;
- }
- }
-
- static PyObject *method_keyword_call_handler( PyObject *_self_and_name_tuple, PyObject *_args, PyObject *_keywords )
- {
- try
- {
- Tuple self_and_name_tuple( _self_and_name_tuple );
-
- PyObject *self_in_cobject = self_and_name_tuple[0].ptr();
- T *self = static_cast<T *>( self_in_cobject );
-
- MethodDefExt<T> *meth_def = reinterpret_cast<MethodDefExt<T> *>(
- PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ) );
-
- Tuple args( _args );
-
- // _keywords may be NULL so be careful about the way the dict is created
- Dict keywords;
- if( _keywords != NULL )
- keywords = Dict( _keywords );
-
- Object result( ( self->*meth_def->ext_keyword_function )( args, keywords ) );
-
- return new_reference_to( result.ptr() );
- }
- catch( BaseException & )
- {
- return 0;
- }
- }
-
- static void extension_object_deallocator( PyObject* t )
- {
- delete (T *)( t );
- }
-
- //
- // prevent the compiler generating these unwanted functions
- //
- explicit PythonExtension( const PythonExtension<T> &other );
- void operator=( const PythonExtension<T> &rhs );
- };
-
- //
- // ExtensionObject<T> is an Object that will accept only T's.
- //
- template<TEMPLATE_TYPENAME T>
- class ExtensionObject: public Object
- {
- public:
-
- explicit ExtensionObject( PyObject *pyob )
- : Object( pyob )
- {
- validate();
- }
-
- ExtensionObject( const ExtensionObject<T> &other )
- : Object( *other )
- {
- validate();
- }
-
- ExtensionObject( const Object &other )
- : Object( *other )
- {
- validate();
- }
-
- ExtensionObject &operator=( const Object &rhs )
- {
- return( *this = *rhs );
- }
-
- ExtensionObject &operator=( PyObject *rhsp )
- {
- if( ptr() != rhsp )
- set( rhsp );
- return *this;
- }
-
- virtual bool accepts( PyObject *pyob ) const
- {
- return( pyob && T::check( pyob ) );
- }
-
- //
- // Obtain a pointer to the PythonExtension object
- //
- T *extensionObject( void )
- {
- return static_cast<T *>( ptr() );
- }
- };
-} // Namespace Py
-
-// End of __CXX_ExtensionOldType__h
-#endif
diff --git a/contrib/libs/pycxx/Python2/ExtensionType.hxx b/contrib/libs/pycxx/Python2/ExtensionType.hxx
deleted file mode 100755
index 7145bd0833d..00000000000
--- a/contrib/libs/pycxx/Python2/ExtensionType.hxx
+++ /dev/null
@@ -1,418 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-
-#ifndef __CXX_ExtensionClass__h
-#define __CXX_ExtensionClass__h
-
-#define PYCXX_NOARGS_METHOD_NAME( NAME ) _callNoArgsMethod__##NAME
-#define PYCXX_VARARGS_METHOD_NAME( NAME ) _callVarArgsMethod__##NAME
-#define PYCXX_KEYWORDS_METHOD_NAME( NAME ) _callKeywordsMethod__##NAME
-
-#define PYCXX_NOARGS_METHOD_DECL( CLS, NAME ) \
- static PyObject *PYCXX_NOARGS_METHOD_NAME( NAME )( PyObject *_self, PyObject *, PyObject * ) \
- { \
- try \
- { \
- Py::PythonClassInstance *self_python = reinterpret_cast< Py::PythonClassInstance * >( _self ); \
- CLS *self = reinterpret_cast< CLS * >( self_python->m_pycxx_object ); \
- Py::Object r( (self->NAME)() ); \
- return Py::new_reference_to( r.ptr() ); \
- } \
- catch( Py::BaseException & ) \
- { \
- return 0; \
- } \
- }
-#define PYCXX_VARARGS_METHOD_DECL( CLS, NAME ) \
- static PyObject *PYCXX_VARARGS_METHOD_NAME( NAME )( PyObject *_self, PyObject *_a, PyObject * ) \
- { \
- try \
- { \
- Py::PythonClassInstance *self_python = reinterpret_cast< Py::PythonClassInstance * >( _self ); \
- CLS *self = reinterpret_cast< CLS * >( self_python->m_pycxx_object ); \
- Py::Tuple a( _a ); \
- Py::Object r( (self->NAME)( a ) ); \
- return Py::new_reference_to( r.ptr() ); \
- } \
- catch( Py::BaseException & ) \
- { \
- return 0; \
- } \
- }
-#define PYCXX_KEYWORDS_METHOD_DECL( CLS, NAME ) \
- static PyObject *PYCXX_KEYWORDS_METHOD_NAME( NAME )( PyObject *_self, PyObject *_a, PyObject *_k ) \
- { \
- try \
- { \
- Py::PythonClassInstance *self_python = reinterpret_cast< Py::PythonClassInstance * >( _self ); \
- CLS *self = reinterpret_cast< CLS * >( self_python->m_pycxx_object ); \
- Py::Tuple a( _a ); \
- Py::Dict k; \
- if( _k != NULL ) \
- k = _k; \
- Py::Object r( (self->NAME)( a, k ) ); \
- return Py::new_reference_to( r.ptr() ); \
- } \
- catch( Py::BaseException & ) \
- { \
- return 0; \
- } \
- }
-
-// need to support METH_STATIC and METH_CLASS
-
-#define PYCXX_ADD_NOARGS_METHOD( PYNAME, NAME, docs ) \
- add_method( #PYNAME, (PyCFunction)PYCXX_NOARGS_METHOD_NAME( NAME ), METH_NOARGS, docs )
-#define PYCXX_ADD_VARARGS_METHOD( PYNAME, NAME, docs ) \
- add_method( #PYNAME, (PyCFunction)PYCXX_VARARGS_METHOD_NAME( NAME ), METH_VARARGS, docs )
-#define PYCXX_ADD_KEYWORDS_METHOD( PYNAME, NAME, docs ) \
- add_method( #PYNAME, (PyCFunction)PYCXX_KEYWORDS_METHOD_NAME( NAME ), METH_VARARGS | METH_KEYWORDS, docs )
-
-namespace Py
-{
- extern PythonExtensionBase *getPythonExtensionBase( PyObject *self );
-
- struct PythonClassInstance
- {
- PyObject_HEAD
- PythonExtensionBase *m_pycxx_object;
- };
-
- class ExtensionClassMethodsTable
- {
- public:
- ExtensionClassMethodsTable()
- : m_methods_table( new PyMethodDef[ METHOD_TABLE_SIZE_INCREMENT ] )
- , m_methods_used( 0 )
- , m_methods_size( METHOD_TABLE_SIZE_INCREMENT )
- {
- // add the sentinel marking the table end
- PyMethodDef *p = &m_methods_table[ 0 ];
-
- p->ml_name = NULL;
- p->ml_meth = NULL;
- p->ml_flags = 0;
- p->ml_doc = NULL;
- }
-
- ~ExtensionClassMethodsTable()
- {
- delete[] m_methods_table;
- }
-
- // check that all methods added are unique
- void check_unique_method_name( const char *_name )
- {
- std::string name( _name );
- for( int i=0; i<m_methods_used; i++ )
- {
- if( name == m_methods_table[i].ml_name )
- {
- throw AttributeError( name );
- }
- }
- }
- PyMethodDef *add_method( const char *name, PyCFunction function, int flags, const char *doc )
- {
- check_unique_method_name( name );
-
- // see if there is enough space for one more method
- if( m_methods_used == (m_methods_size-1) )
- {
- PyMethodDef *old_mt = m_methods_table;
- m_methods_size += METHOD_TABLE_SIZE_INCREMENT;
- PyMethodDef *new_mt = new PyMethodDef[ m_methods_size ];
- for( int i=0; i<m_methods_used; i++ )
- {
- new_mt[ i ] = old_mt[ i ];
- }
- delete[] old_mt;
- m_methods_table = new_mt;
- }
-
- // add method into the table
- PyMethodDef *p = &m_methods_table[ m_methods_used ];
- p->ml_name = const_cast<char *>( name );
- p->ml_meth = function;
- p->ml_flags = flags;
- p->ml_doc = const_cast<char *>( doc );
-
- m_methods_used++;
- p++;
-
- // add the sentinel marking the table end
- p->ml_name = NULL;
- p->ml_meth = NULL;
- p->ml_flags = 0;
- p->ml_doc = NULL;
-
- return m_methods_table;
- }
-
- private:
- enum {METHOD_TABLE_SIZE_INCREMENT = 1};
- PyMethodDef *m_methods_table;
- int m_methods_used;
- int m_methods_size;
- };
-
- template<TEMPLATE_TYPENAME T> class PythonClass
- : public PythonExtensionBase
- {
- protected:
- explicit PythonClass( PythonClassInstance *self, Tuple &/*args*/, Dict &/*kwds*/ )
- : PythonExtensionBase()
- , m_class_instance( self )
- {
- }
-
- virtual ~PythonClass()
- {}
-
- static ExtensionClassMethodsTable &methodTable()
- {
- static ExtensionClassMethodsTable *method_table;
- if( method_table == NULL )
- method_table = new ExtensionClassMethodsTable;
- return *method_table;
- }
-
- static void add_method( const char *name, PyCFunction function, int flags, const char *doc=NULL )
- {
- behaviors().set_methods( methodTable().add_method( name, function, flags, doc ) );
- }
-
- static PythonType &behaviors()
- {
- static PythonType *p;
- if( p == NULL )
- {
-#if defined( _CPPRTTI ) || defined( __GNUG__ )
- const char *default_name = (typeid( T )).name();
-#else
- const char *default_name = "unknown";
-#endif
- p = new PythonType( sizeof( PythonClassInstance ), 0, default_name );
- p->set_tp_new( extension_object_new );
- p->set_tp_init( extension_object_init );
- p->set_tp_dealloc( extension_object_deallocator );
- // we are a class
- p->supportClass();
-
- // always support get and set attr
- p->supportGetattro();
- p->supportSetattro();
- }
-
- return *p;
- }
-
- static PyObject *extension_object_new( PyTypeObject *subtype, PyObject * /*args*/, PyObject * /*kwds*/ )
- {
-#ifdef PYCXX_DEBUG
- std::cout << "extension_object_new()" << std::endl;
-#endif
- PythonClassInstance *o = reinterpret_cast<PythonClassInstance *>( subtype->tp_alloc( subtype, 0 ) );
- if( o == NULL )
- return NULL;
-
- o->m_pycxx_object = NULL;
-
- PyObject *self = reinterpret_cast<PyObject *>( o );
-#ifdef PYCXX_DEBUG
- std::cout << "extension_object_new() => self=0x" << std::hex << reinterpret_cast< unsigned long >( self ) << std::dec << std::endl;
-#endif
- return self;
- }
-
- static int extension_object_init( PyObject *_self, PyObject *args_, PyObject *kwds_ )
- {
- try
- {
- Py::Tuple args( args_ );
- Py::Dict kwds;
- if( kwds_ != NULL )
- kwds = kwds_;
-
- PythonClassInstance *self = reinterpret_cast<PythonClassInstance *>( _self );
-#ifdef PYCXX_DEBUG
- std::cout << "extension_object_init( self=0x" << std::hex << reinterpret_cast< unsigned long >( self ) << std::dec << " )" << std::endl;
- std::cout << " self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned long >( self->m_pycxx_object ) << std::dec << std::endl;
-#endif
-
- if( self->m_pycxx_object == NULL )
- {
- self->m_pycxx_object = new T( self, args, kwds );
-#ifdef PYCXX_DEBUG
- std::cout << " self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned long >( self->m_pycxx_object ) << std::dec << std::endl;
-#endif
- }
- else
- {
-#ifdef PYCXX_DEBUG
- std::cout << " reinit - self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned long >( self->m_pycxx_object ) << std::dec << std::endl;
-#endif
- self->m_pycxx_object->reinit( args, kwds );
- }
- }
- catch( BaseException & )
- {
- return -1;
- }
- return 0;
- }
-
- static void extension_object_deallocator( PyObject *_self )
- {
- PythonClassInstance *self = reinterpret_cast< PythonClassInstance * >( _self );
-#ifdef PYCXX_DEBUG
- std::cout << "extension_object_deallocator( self=0x" << std::hex << reinterpret_cast< unsigned long >( self ) << std::dec << " )" << std::endl;
- std::cout << " self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned long >( self->m_pycxx_object ) << std::dec << std::endl;
-#endif
- delete self->m_pycxx_object;
- _self->ob_type->tp_free( _self );
- }
-
- public:
- static PyTypeObject *type_object()
- {
- return behaviors().type_object();
- }
-
- static Object type()
- {
- return Object( reinterpret_cast<PyObject *>( behaviors().type_object() ) );
- }
-
- static bool check( PyObject *p )
- {
- // is p a me or a derived me
- switch( PyObject_IsInstance( p, reinterpret_cast<PyObject *>( type_object() ) ) )
- {
- default:
- case -1:
- throw Exception();
- case 0:
- return false;
- case 1:
- return true;
- }
- }
-
- static bool check( const Object &ob )
- {
- return check( ob.ptr() );
- }
-
- virtual PyObject *selfPtr()
- {
- return reinterpret_cast<PyObject *>( m_class_instance );
- }
-
- virtual Object self()
- {
- return Object( reinterpret_cast<PyObject *>( m_class_instance ) );
- }
-
- protected:
- private:
- PythonClassInstance *m_class_instance;
-
- private:
- //
- // prevent the compiler generating these unwanted functions
- //
- explicit PythonClass( const PythonClass<T> &other );
- void operator=( const PythonClass<T> &rhs );
- };
-
- //
- // ExtensionObject<T> is an Object that will accept only T's.
- //
- template<TEMPLATE_TYPENAME T>
- class PythonClassObject: public Object
- {
- public:
-
- explicit PythonClassObject( PyObject *pyob )
- : Object( pyob )
- {
- validate();
- }
-
- PythonClassObject( const PythonClassObject<T> &other )
- : Object( *other )
- {
- validate();
- }
-
- PythonClassObject( const Object &other )
- : Object( *other )
- {
- validate();
- }
-
- PythonClassObject &operator=( const Object &rhs )
- {
- *this = *rhs;
- return *this;
- }
-
- PythonClassObject &operator=( PyObject *rhsp )
- {
- if( ptr() != rhsp )
- set( rhsp );
- return *this;
- }
-
- virtual bool accepts( PyObject *pyob ) const
- {
- return( pyob && T::check( pyob ) );
- }
-
- //
- // Obtain a pointer to the PythonExtension object
- //
- T *getCxxObject( void )
- {
- return dynamic_cast< T * >( getPythonExtensionBase( ptr() ) );
- }
- };
-} // Namespace Py
-
-// End of __CXX_ExtensionClass__h
-#endif
diff --git a/contrib/libs/pycxx/Python2/ExtensionTypeBase.hxx b/contrib/libs/pycxx/Python2/ExtensionTypeBase.hxx
deleted file mode 100755
index 237ae786feb..00000000000
--- a/contrib/libs/pycxx/Python2/ExtensionTypeBase.hxx
+++ /dev/null
@@ -1,181 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-
-#ifndef __CXX_ExtensionTypeBase__h
-#define __CXX_ExtensionTypeBase__h
-
-namespace Py
-{
- // Class PythonExtension is what you inherit from to create
- // a new Python extension type. You give your class itself
- // as the template paramter.
-
- // There are two ways that extension objects can get destroyed.
- // 1. Their reference count goes to zero
- // 2. Someone does an explicit delete on a pointer.
- // In(1) the problem is to get the destructor called
- // We register a special deallocator in the Python type object
- // (see behaviors()) to do this.
- // In(2) there is no problem, the dtor gets called.
-
- // PythonExtension does not use the usual Python heap allocator,
- // instead using new/delete. We do the setting of the type object
- // and reference count, usually done by PyObject_New, in the
- // base class ctor.
-
- // This special deallocator does a delete on the pointer.
-
- class PythonExtensionBase : public PyObject
- {
- public:
- PythonExtensionBase();
- virtual ~PythonExtensionBase();
-
- public:
- // object
- virtual void reinit( Tuple &args, Dict &kwds );
-
- // object basics
- virtual int print( FILE *, int );
- virtual Object getattr( const char * );
- virtual int setattr( const char *, const Object & );
- virtual Object getattro( const String & );
- Object genericGetAttro( const String & );
- virtual int setattro( const String &, const Object & );
- int genericSetAttro( const String &, const Object & );
- virtual int compare( const Object & );
- virtual Object rich_compare( const Object &, int );
- virtual Object repr();
- virtual Object str();
- virtual long hash();
- virtual Object call( const Object &, const Object & );
- virtual Object iter();
- virtual PyObject *iternext();
-
- // Sequence methods
- virtual PyCxx_ssize_t sequence_length();
- virtual Object sequence_concat( const Object & );
- virtual Object sequence_repeat( Py_ssize_t );
- virtual Object sequence_item( Py_ssize_t );
- virtual Object sequence_slice( Py_ssize_t, Py_ssize_t );
-
- virtual int sequence_ass_item( Py_ssize_t, const Object & );
- virtual int sequence_ass_slice( Py_ssize_t, Py_ssize_t, const Object & );
-
- virtual Object sequence_inplace_concat( const Object & );
- virtual Object sequence_inplace_repeat( Py_ssize_t );
-
- virtual int sequence_contains( const Object & );
-
- // Mapping
- virtual PyCxx_ssize_t mapping_length();
- virtual Object mapping_subscript( const Object & );
- virtual int mapping_ass_subscript( const Object &, const Object & );
-
- // Number
- virtual int number_nonzero();
- virtual Object number_negative();
- virtual Object number_positive();
- virtual Object number_absolute();
- virtual Object number_invert();
- virtual Object number_int();
- virtual Object number_float();
- virtual Object number_long();
- virtual Object number_oct();
- virtual Object number_hex();
- virtual Object number_add( const Object & );
- virtual Object number_subtract( const Object & );
- virtual Object number_multiply( const Object & );
- virtual Object number_divide( const Object & );
- virtual Object number_remainder( const Object & );
- virtual Object number_divmod( const Object & );
- virtual Object number_lshift( const Object & );
- virtual Object number_rshift( const Object & );
- virtual Object number_and( const Object & );
- virtual Object number_xor( const Object & );
- virtual Object number_or( const Object & );
- virtual Object number_power( const Object &, const Object & );
-
- // Buffer
- virtual Py_ssize_t buffer_getreadbuffer( Py_ssize_t, void** );
- virtual Py_ssize_t buffer_getwritebuffer( Py_ssize_t, void** );
- virtual Py_ssize_t buffer_getsegcount( Py_ssize_t* );
-
- public:
- // helper functions to call function fn_name with 0 to 9 args
- Object callOnSelf( const std::string &fn_name );
- Object callOnSelf( const std::string &fn_name,
- const Object &arg1 );
- Object callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2 );
- Object callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3 );
- Object callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4 );
- Object callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4, const Object &arg5 );
- Object callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4, const Object &arg5, const Object &arg6 );
- Object callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4, const Object &arg5, const Object &arg6,
- const Object &arg7 );
- Object callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4, const Object &arg5, const Object &arg6,
- const Object &arg7, const Object &arg8 );
- Object callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4, const Object &arg5, const Object &arg6,
- const Object &arg7, const Object &arg8, const Object &arg9 );
-
- public:
- virtual PyObject *selfPtr() = 0;
- virtual Object self() = 0;
-
- private:
- void missing_method( void );
- static PyObject *method_call_handler( PyObject *self, PyObject *args );
- };
-
-} // Namespace Py
-
-// End of __CXX_ExtensionTypeBase__h
-#endif
diff --git a/contrib/libs/pycxx/Python2/Extensions.hxx b/contrib/libs/pycxx/Python2/Extensions.hxx
deleted file mode 100755
index 42516eb1c64..00000000000
--- a/contrib/libs/pycxx/Python2/Extensions.hxx
+++ /dev/null
@@ -1,189 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-
-#ifndef __CXX_Extensions__h
-#define __CXX_Extensions__h
-
-
-#ifdef _MSC_VER
-// disable warning C4786: symbol greater than 255 character,
-// okay to ignore
-#pragma warning( disable: 4786 )
-#endif
-
-#include "../WrapPython.h"
-#include "../Version.hxx"
-#include "Config.hxx"
-#include "CxxDebug.hxx"
-#include "Objects.hxx"
-
-extern "C" { extern PyObject py_object_initializer; }
-
-#include <vector>
-#include <map>
-
-// ----------------------------------------------------------------------
-
-namespace Py
-{
- class ExtensionModuleBase;
-
- // Make an Exception Type for use in raising custom exceptions
- class ExtensionExceptionType : public Object
- {
- public:
- ExtensionExceptionType();
- virtual ~ExtensionExceptionType();
-
- // call init to create the type
- void init( ExtensionModuleBase &module, const std::string &name, ExtensionExceptionType &parent );
- void init( ExtensionModuleBase &module, const std::string &name );
- };
-
- class MethodTable
- {
- public:
- MethodTable();
- virtual ~MethodTable();
-
- void add( const char *method_name, PyCFunction f, const char *doc="", int flag=1 );
- PyMethodDef *table();
-
- protected:
- std::vector<PyMethodDef> t; // accumulator of PyMethodDef's
- PyMethodDef *mt; // Actual method table produced when full
-
- static PyMethodDef method( const char* method_name, PyCFunction f, int flags=1, const char* doc="" );
-
- private:
- //
- // prevent the compiler generating these unwanted functions
- //
- MethodTable( const MethodTable &m ); //unimplemented
- void operator=( const MethodTable &m ); //unimplemented
-
- }; // end class MethodTable
-
- // Note: Python calls noargs as varargs buts args==NULL
- extern "C" typedef PyObject *(*method_noargs_call_handler_t)( PyObject *_self, PyObject * );
- extern "C" typedef PyObject *(*method_varargs_call_handler_t)( PyObject *_self, PyObject *_args );
- extern "C" typedef PyObject *(*method_keyword_call_handler_t)( PyObject *_self, PyObject *_args, PyObject *_dict );
-
- template<class T>
- class MethodDefExt
- {
- public:
- typedef Object (T::*method_noargs_function_t)();
- typedef Object (T::*method_varargs_function_t)( const Tuple &args );
- typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws );
-
- // NOARGS
- MethodDefExt
- (
- const char *_name,
- method_noargs_function_t _function,
- method_noargs_call_handler_t _handler,
- const char *_doc
- )
- {
- ext_meth_def.ml_name = const_cast<char *>( _name );
- ext_meth_def.ml_meth = reinterpret_cast<method_varargs_call_handler_t>( _handler );
- ext_meth_def.ml_flags = METH_NOARGS;
- ext_meth_def.ml_doc = const_cast<char *>( _doc );
-
- ext_noargs_function = _function;
- ext_varargs_function = NULL;
- ext_keyword_function = NULL;
- }
-
- // VARARGS
- MethodDefExt
- (
- const char *_name,
- method_varargs_function_t _function,
- method_varargs_call_handler_t _handler,
- const char *_doc
- )
- {
- ext_meth_def.ml_name = const_cast<char *>( _name );
- ext_meth_def.ml_meth = reinterpret_cast<method_varargs_call_handler_t>( _handler );
- ext_meth_def.ml_flags = METH_VARARGS;
- ext_meth_def.ml_doc = const_cast<char *>( _doc );
-
- ext_noargs_function = NULL;
- ext_varargs_function = _function;
- ext_keyword_function = NULL;
- }
-
- // VARARGS + KEYWORD
- MethodDefExt
- (
- const char *_name,
- method_keyword_function_t _function,
- method_keyword_call_handler_t _handler,
- const char *_doc
- )
- {
- ext_meth_def.ml_name = const_cast<char *>( _name );
- ext_meth_def.ml_meth = reinterpret_cast<method_varargs_call_handler_t>( _handler );
- ext_meth_def.ml_flags = METH_VARARGS|METH_KEYWORDS;
- ext_meth_def.ml_doc = const_cast<char *>( _doc );
-
- ext_noargs_function = NULL;
- ext_varargs_function = NULL;
- ext_keyword_function = _function;
- }
-
- ~MethodDefExt()
- {}
-
- PyMethodDef ext_meth_def;
- method_noargs_function_t ext_noargs_function;
- method_varargs_function_t ext_varargs_function;
- method_keyword_function_t ext_keyword_function;
- Object py_method;
- };
-} // Namespace Py
-
-#include "ExtensionModule.hxx"
-#include "PythonType.hxx"
-#include "ExtensionTypeBase.hxx"
-#include "ExtensionOldType.hxx"
-#include "ExtensionType.hxx"
-
-// End of CXX_Extensions.h
-#endif
diff --git a/contrib/libs/pycxx/Python2/IndirectPythonInterface.hxx b/contrib/libs/pycxx/Python2/IndirectPythonInterface.hxx
deleted file mode 100755
index b15bdde7bb8..00000000000
--- a/contrib/libs/pycxx/Python2/IndirectPythonInterface.hxx
+++ /dev/null
@@ -1,159 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-
-#ifndef __CXX_INDIRECT_PYTHON_INTERFACE__HXX__
-#define __CXX_INDIRECT_PYTHON_INTERFACE__HXX__
-
-#include "../WrapPython.h"
-
-namespace Py
-{
-bool InitialisePythonIndirectInterface();
-
-//
-// Wrap Exception variables as function calls
-//
-PyObject * _Exc_BaseException();
-
-#define PYCXX_STANDARD_EXCEPTION( eclass, bclass ) \
- PyObject * _Exc_##eclass();
-
-#include "cxx_standard_exceptions.hxx"
-#undef PYCXX_STANDARD_EXCEPTION
-
-//
-// Wrap Object variables as function calls
-//
-PyObject * _None();
-
-PyObject * _False();
-PyObject * _True();
-
-//
-// Wrap Type variables as function calls
-//
-PyTypeObject * _List_Type();
-bool _List_Check( PyObject *o );
-
-PyTypeObject * _Buffer_Type();
-bool _Buffer_Check( PyObject *op );
-
-PyTypeObject * _Class_Type();
-bool _Class_Check( PyObject *op );
-
-PyTypeObject * _Instance_Type();
-bool _Instance_Check( PyObject *op );
-
-PyTypeObject * _Method_Type();
-bool _Method_Check( PyObject *op );
-
-PyTypeObject * _CObject_Type();
-bool _CObject_Check( PyObject *op );
-
-PyTypeObject * _Complex_Type();
-bool _Complex_Check( PyObject *op );
-
-PyTypeObject * _Dict_Type();
-bool _Dict_Check( PyObject *op );
-
-PyTypeObject * _File_Type();
-bool _File_Check( PyObject *op );
-
-PyTypeObject * _Float_Type();
-bool _Float_Check( PyObject *op );
-
-PyTypeObject * _Frame_Type();
-bool _Frame_Check( PyObject *op );
-
-PyTypeObject * _Function_Type();
-bool _Function_Check( PyObject *op );
-
-PyTypeObject * _Bool_Type();
-bool _Boolean_Check( PyObject *op );
-
-PyTypeObject * _Int_Type();
-bool _Int_Check( PyObject *op );
-
-PyTypeObject * _List_Type();
-bool _List_Check( PyObject *op );
-
-PyTypeObject * _Long_Type();
-bool _Long_Check( PyObject *op );
-
-PyTypeObject * _CFunction_Type();
-bool _CFunction_Check( PyObject *op );
-
-PyTypeObject * _Module_Type();
-bool _Module_Check( PyObject *op );
-
-PyTypeObject * _Type_Type();
-bool _Type_Check( PyObject *op );
-
-PyTypeObject * _Range_Type();
-bool _Range_Check( PyObject *op );
-
-PyTypeObject * _Slice_Type();
-bool _Slice_Check( PyObject *op );
-
-PyTypeObject * _String_Type();
-bool _String_Check( PyObject *op );
-
-PyTypeObject * _TraceBack_Type();
-bool _TraceBack_Check( PyObject *v );
-
-PyTypeObject * _Tuple_Type();
-bool _Tuple_Check( PyObject *op );
-
-#if PY_MAJOR_VERSION >= 2
-PyTypeObject * _Unicode_Type();
-bool _Unicode_Check( PyObject *op );
-#endif
-
-int &_Py_DebugFlag();
-int &_Py_InteractiveFlag();
-int &_Py_OptimizeFlag();
-int &_Py_NoSiteFlag();
-int &_Py_TabcheckFlag();
-int &_Py_VerboseFlag();
-
-void _XINCREF( PyObject *op );
-void _XDECREF( PyObject *op );
-
-char *__Py_PackageContext();
-}
-
-#endif // __CXX_INDIRECT_PYTHON_INTERFACE__HXX__
diff --git a/contrib/libs/pycxx/Python2/Objects.hxx b/contrib/libs/pycxx/Python2/Objects.hxx
deleted file mode 100755
index 25b61a3c8e4..00000000000
--- a/contrib/libs/pycxx/Python2/Objects.hxx
+++ /dev/null
@@ -1,3629 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-
-#ifndef __CXX_Objects__h
-#define __CXX_Objects__h
-
-#include "../WrapPython.h"
-#include "../Version.hxx"
-#include "../Config.hxx"
-#include "../Exception.hxx"
-
-#include <iostream>
-#include STR_STREAM
-#include <string>
-#include <iterator>
-#include <utility>
-#include <typeinfo>
-#include <algorithm>
-
-
-namespace Py
-{
- void ifPyErrorThrowCxxException();
-
- typedef PyCxx_ssize_t sequence_index_type; // type of an index into a sequence
-
- // Forward declarations
- class Object;
- class Type;
- template<TEMPLATE_TYPENAME T> class SeqBase;
- class String;
- class List;
- template<TEMPLATE_TYPENAME T> class MapBase;
- class Tuple;
- class Dict;
-
- // new_reference_to also overloaded below on Object
- inline PyObject* new_reference_to(PyObject* p)
- {
- Py::_XINCREF(p);
- return p;
- }
-
- // returning Null() from an extension method triggers a
- // Python exception
- inline PyObject* Null()
- {
- return (static_cast<PyObject*>(0));
- }
-
- //===========================================================================//
- // class Object
- // The purpose of this class is to serve as the most general kind of
- // Python object, for the purpose of writing C++ extensions in Python
- // Objects hold a PyObject* which they own. This pointer is always a
- // valid pointer to a Python object. In children we must maintain this behavior.
- //
- // Instructions on how to make your own class MyType descended from Object:
- // (0) Pick a base class, either Object or perhaps SeqBase<T> or MapBase<T>.
- // This example assumes Object.
-
- // (1) Write a routine int MyType_Check (PyObject *) modeled after PyInt_Check,
- // PyFloat_Check, etc.
-
- // (2) Add method accepts:
- // virtual bool accepts (PyObject *pyob) const {
- // return pyob && MyType_Check (pyob);
- // }
-
- // (3) Include the following constructor and copy constructor
- //
- /*
- explicit MyType (PyObject *pyob): Object(pyob) {
- validate();
- }
-
- MyType(const Object& other): Object(other.ptr()) {
- validate();
- }
- */
-
- // Alernate version for the constructor to allow for construction from owned pointers:
- /*
- explicit MyType (PyObject *pyob)
- : Object(pyob) {
- validate();
- }
- */
-
- // You may wish to add other constructors; see the classes below for examples.
- // Each constructor must use "set" to set the pointer
- // and end by validating the pointer you have created.
-
- // (4) Each class needs at least these two assignment operators:
- /*
- MyType& operator= (const Object& rhs) {
- return (*this = *rhs);
- }
-
- Mytype& operator= (PyObject* rhsp) {
- if(ptr() == rhsp) return *this;
- set(rhsp);
- return *this;
- }
- */
- // Note on accepts: constructors call the base class
- // version of a virtual when calling the base class constructor,
- // so the test has to be done explicitly in a descendent.
-
- // If you are inheriting from PythonExtension<T> to define an object
- // note that it contains PythonExtension<T>::check
- // which you can use in accepts when writing a wrapper class.
- // See Demo/range.h and Demo/range.cxx for an example.
-
- class Object
- {
- private:
- // the pointer to the Python object
- // Only Object sets this directly.
- // The default constructor for Object sets it to Py_None and
- // child classes must use "set" to set it
- //
- PyObject* p;
-
- protected:
-
- void set (PyObject* pyob, bool owned = false)
- {
- release();
- p = pyob;
- if (!owned)
- {
- Py::_XINCREF (p);
- }
- validate();
- }
-
- void release ()
- {
- Py::_XDECREF (p);
- p = 0;
- }
-
- void validate();
-
- public:
- // Constructor acquires new ownership of pointer unless explicitly told not to.
- explicit Object (PyObject* pyob=Py::_None(), bool owned = false)
- : p(pyob)
- {
- if(!owned)
- {
- Py::_XINCREF (p);
- }
- validate();
- }
-
- // Copy constructor acquires new ownership of pointer
- Object (const Object& ob)
- : p(ob.p)
- {
- Py::_XINCREF (p);
- validate();
- }
-
- // Assignment acquires new ownership of pointer
- Object& operator= (const Object& rhs)
- {
- set(rhs.p);
- return *this;
- }
-
- Object& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (rhsp);
- return *this;
- }
-
- // Destructor
- virtual ~Object ()
- {
- release ();
- }
-
- // Loaning the pointer to others, retain ownership
- PyObject* operator* () const
- {
- return p;
- }
-
- // Explicit reference_counting changes
- void increment_reference_count()
- {
- Py::_XINCREF(p);
- }
-
- void decrement_reference_count()
- {
- // not allowed to commit suicide, however
- if(reference_count() == 1)
- throw RuntimeError("Object::decrement_reference_count error.");
- Py::_XDECREF(p);
- }
-
- // Would like to call this pointer() but messes up STL in SeqBase<T>
- PyObject* ptr () const
- {
- return p;
- }
-
- //
- // Queries
- //
-
- // Can pyob be used in this object's constructor?
- virtual bool accepts (PyObject *) const
- {
- // allow any object or NULL
- return true;
- }
-
- Py_ssize_t reference_count () const
- { // the reference count
- return p ? p->ob_refcnt : 0;
- }
-
- Type type () const; // the type object associated with this one
-
- String str () const; // the str() representation
-
- std::string as_string() const;
-
- String repr () const; // the repr () representation
-
- List dir () const; // the dir() list
-
- bool hasAttr (const std::string& s) const
- {
- return PyObject_HasAttrString (p, const_cast<char*>(s.c_str())) ? true: false;
- }
-
- Object getAttr (const std::string& s) const
- {
- return Object (PyObject_GetAttrString (p, const_cast<char*>(s.c_str())), true);
- }
-
- Object callMemberFunction( const std::string& function_name ) const;
- Object callMemberFunction( const std::string& function_name, const Tuple &args ) const;
- Object callMemberFunction( const std::string& function_name, const Tuple &args, const Dict &kw ) const;
-
- Object getItem (const Object& key) const
- {
- return Object (PyObject_GetItem(p, *key), true);
- }
-
- long hashValue () const
- {
- return PyObject_Hash (p);
- }
-
- // convert to bool
- bool as_bool() const
- {
- return PyObject_IsTrue( ptr() ) != 0;
- }
-
- bool is(PyObject *pother) const
- { // identity test
- return p == pother;
- }
-
- bool is(const Object& other) const
- { // identity test
- return p == other.p;
- }
-
- bool isNull() const
- {
- return p == NULL;
- }
-
- bool isNone() const
- {
- return p == _None();
- }
-
- bool isCallable () const
- {
- return PyCallable_Check (p) != 0;
- }
-
- bool isInstance () const
- {
- return PyInstance_Check (p) != 0;
- }
-
- bool isDict () const
- {
- return Py::_Dict_Check (p);
- }
-
- bool isList () const
- {
- return Py::_List_Check (p);
- }
-
- bool isMapping () const
- {
- return PyMapping_Check (p) != 0;
- }
-
- bool isNumeric () const
- {
- return PyNumber_Check (p) != 0;
- }
-
- bool isSequence () const
- {
- return PySequence_Check (p) != 0;
- }
-
- bool isTrue () const
- {
- return PyObject_IsTrue (p) != 0;
- }
-
- bool isType (const Type& t) const;
-
- bool isTuple() const
- {
- return Py::_Tuple_Check(p);
- }
-
- bool isString() const
- {
- return Py::_String_Check(p) || Py::_Unicode_Check(p);
- }
-
- bool isUnicode() const
- {
- return Py::_Unicode_Check( p );
- }
-
- bool isBoolean() const
- {
- return Py::_Boolean_Check( p );
- }
-
- // Commands
- void setAttr (const std::string& s, const Object& value)
- {
- if(PyObject_SetAttrString (p, const_cast<char*>(s.c_str()), *value) == -1)
- ifPyErrorThrowCxxException();
- }
-
- void delAttr (const std::string& s)
- {
- if(PyObject_DelAttrString (p, const_cast<char*>(s.c_str())) == -1)
- ifPyErrorThrowCxxException();
- }
-
- // PyObject_SetItem is too weird to be using from C++
- // so it is intentionally omitted.
-
- void delItem (const Object& key)
- {
- if(PyObject_DelItem(p, *key) == -1)
- ifPyErrorThrowCxxException();
- }
-
- // Equality and comparison use PyObject_RichCompareBool
-
- bool operator==(const Object& o2) const
- {
- int k = PyObject_RichCompareBool (p, *o2, Py_EQ);
- ifPyErrorThrowCxxException();
- return k != 0;
- }
-
- bool operator!=(const Object& o2) const
- {
- int k = PyObject_RichCompareBool (p, *o2, Py_NE);
- ifPyErrorThrowCxxException();
- return k != 0;
- }
-
- bool operator>=(const Object& o2) const
- {
- int k = PyObject_RichCompareBool (p, *o2, Py_GE);
- ifPyErrorThrowCxxException();
- return k != 0;
- }
-
- bool operator<=(const Object& o2) const
- {
- int k = PyObject_RichCompareBool (p, *o2, Py_LE);
- ifPyErrorThrowCxxException();
- return k != 0;
- }
-
- bool operator<(const Object& o2) const
- {
- int k = PyObject_RichCompareBool (p, *o2, Py_LT);
- ifPyErrorThrowCxxException();
- return k != 0;
- }
-
- bool operator>(const Object& o2) const
- {
- int k = PyObject_RichCompareBool (p, *o2, Py_GT);
- ifPyErrorThrowCxxException();
- return k != 0;
- }
- };
- // End of class Object
- inline PyObject* new_reference_to(const Object& g)
- {
- PyObject* p = g.ptr();
- Py::_XINCREF(p);
- return p;
- }
-
- // Nothing() is what an extension method returns if
- // there is no other return value.
- inline Object Nothing()
- {
- return Object(Py::_None());
- }
-
- // Python special None value
- inline Object None()
- {
- return Object(Py::_None());
- }
-
- // Python special Boolean values
- inline Object False()
- {
- return Object(Py::_False());
- }
-
- inline Object True()
- {
- return Object(Py::_True());
- }
-
- // TMM: 31May'01 - Added the #ifndef so I can exlude iostreams.
-#ifndef CXX_NO_IOSTREAMS
- std::ostream& operator<< (std::ostream& os, const Object& ob);
-#endif
-
- // Class Type
- class Type: public Object
- {
- public:
- explicit Type (PyObject* pyob, bool owned = false): Object(pyob, owned)
- {
- validate();
- }
-
- Type (const Object& ob): Object(*ob)
- {
- validate();
- }
-
- Type(const Type& t): Object(t)
- {
- validate();
- }
-
- Type& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- Type& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (rhsp);
- return *this;
- }
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && Py::_Type_Check (pyob);
- }
- };
-
-
- //
- // Convert an owned Python pointer into a CXX Object
- //
- inline Object asObject (PyObject *p)
- {
- return Object(p, true);
- }
-
- // ===============================================
- // class boolean
- class Boolean: public Object
- {
- public:
- // Constructor
- Boolean (PyObject *pyob, bool owned = false)
- : Object (pyob, owned)
- {
- validate();
- }
-
- Boolean (const Boolean& ob): Object(*ob)
- {
- validate();
- }
-
- // create from bool
- Boolean (bool v=false)
- {
- set(PyBool_FromLong(v ? 1 : 0), true);
- validate();
- }
-
- explicit Boolean (const Object& ob)
- : Object( *ob )
- {
- validate();
- }
-
- // Assignment increases reference count on pointer
-
- Boolean& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- Boolean& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (rhsp);
- return *this;
- }
-
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && PyObject_IsTrue(pyob) != -1;
- }
-
- // convert to long
- operator bool() const
- {
- return PyObject_IsTrue (ptr()) != 0;
- }
-
- Boolean& operator= (bool v)
- {
- set (PyBool_FromLong (v ? 1 : 0), true);
- return *this;
- }
- };
-
- // ===============================================
- // class Int
- class Int: public Object
- {
- public:
- // Constructor
- Int (PyObject *pyob, bool owned = false): Object (pyob, owned)
- {
- validate();
- }
-
- Int (const Int& ob): Object(*ob)
- {
- validate();
- }
-
- // create from long
- Int (long v = 0L): Object(PyInt_FromLong(v), true)
- {
- validate();
- }
-
- // create from int
- Int (int v)
- {
- long w = v;
- set(PyInt_FromLong(w), true);
- validate();
- }
-
- // create from bool
- Int (bool v)
- {
- long w = v ? 1 : 0;
- set(PyInt_FromLong(w), true);
- validate();
- }
-
- explicit Int (const Object& ob)
- {
- set(PyNumber_Int(*ob), true);
- validate();
- }
-
- // Assignment acquires new ownership of pointer
-
- Int& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- Int& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (PyNumber_Int(rhsp), true);
- return *this;
- }
-
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && Py::_Int_Check (pyob);
- }
-
- // convert to long
- operator long() const
- {
- return PyInt_AsLong (ptr());
- }
-
-#ifdef HAVE_LONG_LONG
- // convert to long long
- PY_LONG_LONG asLongLong() const
- {
- return PyLong_AsLongLong (ptr());
- }
- // convert to unsigned long long
- unsigned PY_LONG_LONG asUnsignedLongLong() const
- {
- return PyLong_AsUnsignedLongLong (ptr());
- }
-#endif
-
- // assign from an int
- Int& operator= (int v)
- {
- set (PyInt_FromLong (long(v)), true);
- return *this;
- }
-
- // assign from long
- Int& operator= (long v)
- {
- set (PyInt_FromLong (v), true);
- return *this;
- }
-
-#ifdef HAVE_LONG_LONG
- // assign from long long
- Int& operator= (PY_LONG_LONG v)
- {
- set (PyLong_FromLongLong (v), true);
- return *this;
- }
- // assign from unsigned long long
- Int& operator= (unsigned PY_LONG_LONG v)
- {
- set (PyLong_FromUnsignedLongLong (v), true);
- return *this;
- }
-#endif
- };
-
- // ===============================================
- // class Long
- class Long: public Object
- {
- public:
- // Constructor
- explicit Long (PyObject *pyob, bool owned = false)
- : Object (pyob, owned)
- {
- validate();
- }
-
- Long (const Long& ob)
- : Object(ob.ptr())
- {
- validate();
- }
-
- // try to create from any object
- explicit Long (const Object& ob)
- : Object(PyNumber_Long(*ob), true)
- {
- validate();
- }
-
- // create from long
- explicit Long (long v = 0L)
- : Object(PyLong_FromLong(v), true)
- {
- validate();
- }
-
- // create from unsigned long
- explicit Long (unsigned long v)
- : Object(PyLong_FromUnsignedLong(v), true)
- {
- validate();
- }
-
- // create from int
- explicit Long (int v)
- : Object(PyLong_FromLong(static_cast<long>(v)), true)
- {
- validate();
- }
-
-#ifdef HAVE_LONG_LONG
- // create from long long
- explicit Long( PY_LONG_LONG v )
- : Object( PyLong_FromLongLong( v ), true )
- {
- validate();
- }
-
- // create from unsigned long long
- explicit Long( unsigned PY_LONG_LONG v )
- : Object( PyLong_FromUnsignedLongLong( v ), true )
- {
- validate();
- }
-#endif
-
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && Py::_Long_Check (pyob);
- }
-
- // Assignment acquires new ownership of pointer
- Long& operator= (const Object& rhs)
- {
- return *this = *rhs;
- }
-
- Long& operator= (PyObject* rhsp)
- {
- if(ptr() != rhsp)
- set (PyNumber_Long(rhsp), true);
- return *this;
- }
-
- // assign from an int
- Long& operator= (int v)
- {
- set(PyLong_FromLong (long(v)), true);
- return *this;
- }
-
- // assign from long
- Long& operator= (long v)
- {
- set(PyLong_FromLong (v), true);
- return *this;
- }
-
- // assign from unsigned long
- Long& operator= (unsigned long v)
- {
- set(PyLong_FromUnsignedLong (v), true);
- return *this;
- }
-
-#ifdef HAVE_LONG_LONG
- Long &operator=( PY_LONG_LONG v )
- {
- set( PyLong_FromLongLong( v ), true );
- return *this;
- }
-
- Long &operator=( unsigned PY_LONG_LONG v )
- {
- set( PyLong_FromUnsignedLongLong( v ), true );
- return *this;
- }
-#endif
-
- // convert to long
- long as_long() const
- {
- return PyLong_AsLong( ptr() );
- }
-
- operator long() const
- {
- return as_long();
- }
-
- operator int() const
- {
- return static_cast<int>( as_long() );
- }
-
- // convert to unsigned
- long as_unsigned_long() const
- {
- return PyLong_AsUnsignedLong( ptr() );
- }
-
- // convert to unsigned
- operator unsigned long() const
- {
- return as_unsigned_long();
- }
-
- double as_double() const
- {
- return PyLong_AsDouble( ptr() );
- }
-
- operator double() const
- {
- return as_double();
- }
-
-#ifdef HAVE_LONG_LONG
- PY_LONG_LONG as_long_long() const
- {
- return PyLong_AsLongLong( ptr() );
- }
-
- operator PY_LONG_LONG() const
- {
- return as_long_long();
- }
-
- unsigned PY_LONG_LONG as_unsigned_long_long() const
- {
- return PyLong_AsUnsignedLongLong( ptr() );
- }
-
- operator unsigned PY_LONG_LONG() const
- {
- return as_unsigned_long_long();
- }
-#endif
-
- // prefix ++
- Long operator++()
- {
- set( PyNumber_Add( ptr(), *Long( 1 ) ) );
- return *this;
- }
-
- // postfix ++
- Long operator++( int )
- {
- Long a = *this;
- set( PyNumber_Add( ptr(), *Long( 1 ) ) );
- return a;
- }
-
- // prefix --
- Long operator--()
- {
- set( PyNumber_Subtract( ptr(), *Long( 1 ) ) );
- return *this;
- }
-
- // postfix --
- Long operator--( int )
- {
- Long a = *this;
- set( PyNumber_Subtract( ptr(), *Long( 1 ) ) );
- return a;
- }
- };
-
-#ifdef HAVE_LONG_LONG
- // ===============================================
- // class LongLong
- class LongLong: public Object
- {
- public:
- // Constructor
- explicit LongLong (PyObject *pyob, bool owned = false): Object (pyob, owned)
- {
- validate();
- }
-
- LongLong (const LongLong& ob): Object(ob.ptr())
- {
- validate();
- }
- // create from long long
- explicit LongLong (PY_LONG_LONG v = 0L)
- : Object(PyLong_FromLongLong(v), true)
- {
- validate();
- }
- // create from unsigned long long
- explicit LongLong (unsigned PY_LONG_LONG v)
- : Object(PyLong_FromUnsignedLongLong(v), true)
- {
- validate();
- }
- // create from long
- explicit LongLong (long v)
- : Object(PyLong_FromLongLong(v), true)
- {
- validate();
- }
- // create from unsigned long
- explicit LongLong (unsigned long v)
- : Object(PyLong_FromUnsignedLongLong(v), true)
- {
- validate();
- }
- // create from int
- explicit LongLong (int v)
- : Object(PyLong_FromLongLong(static_cast<PY_LONG_LONG>(v)), true)
- {
- validate();
- }
-
- // try to create from any object
- LongLong (const Object& ob)
- : Object(PyNumber_Long(*ob), true)
- {
- validate();
- }
-
- // Assignment acquires new ownership of pointer
-
- LongLong& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- LongLong& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (PyNumber_Long(rhsp), true);
- return *this;
- }
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && Py::_Long_Check (pyob);
- }
- // convert to long long
- operator PY_LONG_LONG() const
- {
- return PyLong_AsLongLong (ptr());
- }
- // convert to unsigned long
- operator unsigned PY_LONG_LONG() const
- {
- return PyLong_AsUnsignedLongLong (ptr());
- }
- // convert to long
- operator long() const
- {
- return PyLong_AsLong (ptr());
- }
- // convert to unsigned
- operator unsigned long() const
- {
- return PyLong_AsUnsignedLong (ptr());
- }
- operator double() const
- {
- return PyLong_AsDouble (ptr());
- }
- // assign from an int
- LongLong& operator= (int v)
- {
- set(PyLong_FromLongLong (long(v)), true);
- return *this;
- }
- // assign from long long
- LongLong& operator= (PY_LONG_LONG v)
- {
- set(PyLong_FromLongLong (v), true);
- return *this;
- }
- // assign from unsigned long long
- LongLong& operator= (unsigned PY_LONG_LONG v)
- {
- set(PyLong_FromUnsignedLongLong (v), true);
- return *this;
- }
- // assign from long
- LongLong& operator= (long v)
- {
- set(PyLong_FromLongLong (v), true);
- return *this;
- }
- // assign from unsigned long
- LongLong& operator= (unsigned long v)
- {
- set(PyLong_FromUnsignedLongLong (v), true);
- return *this;
- }
- };
-#endif
-
- // ===============================================
- // class Float
- //
- class Float: public Object
- {
- public:
- // Constructor
- explicit Float (PyObject *pyob, bool owned = false): Object(pyob, owned)
- {
- validate();
- }
-
- Float (const Float& f): Object(f)
- {
- validate();
- }
-
- // make from double
- explicit Float (double v=0.0)
- : Object(PyFloat_FromDouble (v), true)
- {
- validate();
- }
-
- // try to make from any object
- Float (const Object& ob)
- : Object(PyNumber_Float(*ob), true)
- {
- validate();
- }
-
- Float& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- Float& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (PyNumber_Float(rhsp), true);
- return *this;
- }
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && Py::_Float_Check (pyob);
- }
- // convert to double
- operator double () const
- {
- return PyFloat_AsDouble (ptr());
- }
- // assign from a double
- Float& operator= (double v)
- {
- set(PyFloat_FromDouble (v), true);
- return *this;
- }
- // assign from an int
- Float& operator= (int v)
- {
- set(PyFloat_FromDouble (double(v)), true);
- return *this;
- }
- // assign from long
- Float& operator= (long v)
- {
- set(PyFloat_FromDouble (double(v)), true);
- return *this;
- }
- // assign from an Int
- Float& operator= (const Int& iob)
- {
- set(PyFloat_FromDouble (double(long(iob))), true);
- return *this;
- }
- };
-
- // ===============================================
- // class Complex
- class Complex: public Object
- {
- public:
- // Constructor
- explicit Complex (PyObject *pyob, bool owned = false): Object(pyob, owned)
- {
- validate();
- }
-
- Complex (const Complex& f): Object(f)
- {
- validate();
- }
-
- // make from double
- explicit Complex (double v=0.0, double w=0.0)
- :Object(PyComplex_FromDoubles (v, w), true)
- {
- validate();
- }
-
- Complex& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- Complex& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (rhsp);
- return *this;
- }
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && Py::_Complex_Check (pyob);
- }
- // convert to Py_complex
- operator Py_complex () const
- {
- return PyComplex_AsCComplex (ptr());
- }
- // assign from a Py_complex
- Complex& operator= (const Py_complex& v)
- {
- set(PyComplex_FromCComplex (v), true);
- return *this;
- }
- // assign from a double
- Complex& operator= (double v)
- {
- set(PyComplex_FromDoubles (v, 0.0), true);
- return *this;
- }
- // assign from an int
- Complex& operator= (int v)
- {
- set(PyComplex_FromDoubles (double(v), 0.0), true);
- return *this;
- }
- // assign from long
- Complex& operator= (long v)
- {
- set(PyComplex_FromDoubles (double(v), 0.0), true);
- return *this;
- }
- // assign from an Int
- Complex& operator= (const Int& iob)
- {
- set(PyComplex_FromDoubles (double(long(iob)), 0.0), true);
- return *this;
- }
-
- double real() const
- {
- return PyComplex_RealAsDouble(ptr());
- }
-
- double imag() const
- {
- return PyComplex_ImagAsDouble(ptr());
- }
- };
- // Sequences
- // Sequences are here represented as sequences of items of type T.
- // The base class SeqBase<T> represents that.
- // In basic Python T is always "Object".
-
- // seqref<T> is what you get if you get elements from a non-const SeqBase<T>.
- // Note: seqref<T> could probably be a nested class in SeqBase<T> but that might stress
- // some compilers needlessly. Simlarly for mapref later.
-
- // While this class is not intended for enduser use, it needs some public
- // constructors for the benefit of the STL.
-
- // See Scott Meyer's More Essential C++ for a description of proxies.
- // This application is even more complicated. We are doing an unusual thing
- // in having a double proxy. If we want the STL to work
- // properly we have to compromise by storing the rvalue inside. The
- // entire Object API is repeated so that things like s[i].isList() will
- // work properly.
-
- // Still, once in a while a weird compiler message may occur using expressions like x[i]
- // Changing them to Object(x[i]) helps the compiler to understand that the
- // conversion of a seqref to an Object is wanted.
-
- template<TEMPLATE_TYPENAME T>
- class seqref
- {
- protected:
- SeqBase<T>& s; // the sequence
- sequence_index_type offset; // item number
- T the_item; // lvalue
- public:
-
- seqref (SeqBase<T>& seq, sequence_index_type j)
- : s(seq), offset(j), the_item (s.getItem(j))
- {}
-
- seqref (const seqref<T>& range)
- : s(range.s), offset(range.offset), the_item(range.the_item)
- {}
-
- // TMM: added this seqref ctor for use with STL algorithms
- seqref (Object& obj)
- : s(dynamic_cast< SeqBase<T>&>(obj))
- , offset( 0 )
- , the_item(s.getItem(offset))
- {}
- ~seqref()
- {}
-
- operator T() const
- { // rvalue
- return the_item;
- }
-
- seqref<T>& operator=(const seqref<T>& rhs)
- { //used as lvalue
- the_item = rhs.the_item;
- s.setItem(offset, the_item);
- return *this;
- }
-
- seqref<T>& operator=(const T& ob)
- { // used as lvalue
- the_item = ob;
- s.setItem(offset, ob);
- return *this;
- }
-
- // forward everything else to the item
- PyObject* ptr () const
- {
- return the_item.ptr();
- }
-
- int reference_count () const
- { // the reference count
- return the_item.reference_count();
- }
-
- Type type () const
- {
- return the_item.type();
- }
-
- String str () const;
-
- String repr () const;
-
- bool hasAttr (const std::string& attr_name) const
- {
- return the_item.hasAttr(attr_name);
- }
-
- Object getAttr (const std::string& attr_name) const
- {
- return the_item.getAttr(attr_name);
- }
-
- Object getItem (const Object& key) const
- {
- return the_item.getItem(key);
- }
-
- long hashValue () const
- {
- return the_item.hashValue();
- }
-
- bool isCallable () const
- {
- return the_item.isCallable();
- }
-
- bool isInstance () const
- {
- return the_item.isInstance();
- }
-
- bool isDict () const
- {
- return the_item.isDict();
- }
-
- bool isList () const
- {
- return the_item.isList();
- }
-
- bool isMapping () const
- {
- return the_item.isMapping();
- }
-
- bool isNumeric () const
- {
- return the_item.isNumeric();
- }
-
- bool isSequence () const
- {
- return the_item.isSequence();
- }
-
- bool isTrue () const
- {
- return the_item.isTrue();
- }
-
- bool isType (const Type& t) const
- {
- return the_item.isType (t);
- }
-
- bool isTuple() const
- {
- return the_item.isTuple();
- }
-
- bool isString() const
- {
- return the_item.isString();
- }
- // Commands
- void setAttr (const std::string& attr_name, const Object& value)
- {
- the_item.setAttr(attr_name, value);
- }
-
- void delAttr (const std::string& attr_name)
- {
- the_item.delAttr(attr_name);
- }
-
- void delItem (const Object& key)
- {
- the_item.delItem(key);
- }
-
- bool operator==(const Object& o2) const
- {
- return the_item == o2;
- }
-
- bool operator!=(const Object& o2) const
- {
- return the_item != o2;
- }
-
- bool operator>=(const Object& o2) const
- {
- return the_item >= o2;
- }
-
- bool operator<=(const Object& o2) const
- {
- return the_item <= o2;
- }
-
- bool operator<(const Object& o2) const
- {
- return the_item < o2;
- }
-
- bool operator>(const Object& o2) const
- {
- return the_item > o2;
- }
- }; // end of seqref
-
-
- // class SeqBase<T>
- // ...the base class for all sequence types
-
- template<TEMPLATE_TYPENAME T>
- class SeqBase: public Object
- {
- public:
- // STL definitions
- typedef PyCxx_ssize_t size_type;
- typedef seqref<T> reference;
- typedef T const_reference;
- typedef seqref<T>* pointer;
- typedef int difference_type;
- typedef T value_type; // TMM: 26Jun'01
-
- virtual size_type max_size() const
- {
- return static_cast<size_type>( std::string::npos ); // why this constant - its not from python?
- }
-
- virtual size_type capacity() const
- {
- return size();
- }
-
- virtual void swap( SeqBase<T> &c )
- {
- SeqBase<T> temp = c;
- c = ptr();
- set(temp.ptr());
- }
-
- virtual size_type size() const
- {
- return PySequence_Length (ptr());
- }
-
- explicit SeqBase<T> ()
- : Object( PyTuple_New( 0 ), true )
- {
- validate();
- }
-
- explicit SeqBase<T> (PyObject* pyob, bool owned=false)
- : Object( pyob, owned )
- {
- validate();
- }
-
- SeqBase<T> (const Object& ob): Object(ob)
- {
- validate();
- }
-
- // Assignment acquires new ownership of pointer
-
- SeqBase<T>& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- SeqBase<T>& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (rhsp);
- return *this;
- }
-
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && PySequence_Check (pyob);
- }
-
- Py_ssize_t length () const
- {
- return PySequence_Length (ptr());
- }
-
- // Element access
- const T operator[](sequence_index_type index) const
- {
- return getItem(index);
- }
-
- seqref<T> operator[](sequence_index_type index)
- {
- return seqref<T>(*this, index);
- }
-
- virtual T getItem (sequence_index_type i) const
- {
- return T(asObject(PySequence_GetItem (ptr(), i)));
- }
-
- virtual void setItem (sequence_index_type i, const T& ob)
- {
- if (PySequence_SetItem (ptr(), i, *ob) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
-
- SeqBase<T> repeat (int count) const
- {
- return SeqBase<T> (PySequence_Repeat (ptr(), count), true);
- }
-
- SeqBase<T> concat (const SeqBase<T>& other) const
- {
- return SeqBase<T> (PySequence_Concat(ptr(), *other), true);
- }
-
- // more STL compatability
- const T front () const
- {
- return getItem(0);
- }
-
- seqref<T> front()
- {
- return seqref<T>(*this, 0);
- }
-
- const T back() const
- {
- return getItem(size()-1);
- }
-
- seqref<T> back()
- {
- return seqref<T>(*this, size()-1);
- }
-
- void verify_length( size_type required_size ) const
- {
- if (size() != required_size)
- throw IndexError ("Unexpected SeqBase<T> length.");
- }
-
- void verify_length( size_type min_size, size_type max_size ) const
- {
- size_type n = size();
- if (n < min_size || n > max_size)
- throw IndexError ("Unexpected SeqBase<T> length.");
- }
-
- class iterator: public random_access_iterator_parent(seqref<T>)
- {
- protected:
- friend class SeqBase<T>;
- SeqBase<T>* seq;
- sequence_index_type count;
-
- public:
- ~iterator ()
- {}
-
- iterator ()
- : seq( 0 )
- , count( 0 )
- {}
-
- iterator (SeqBase<T>* s, sequence_index_type where)
- : seq( s )
- , count( where )
- {}
-
- iterator (const iterator& other)
- : seq( other.seq )
- , count( other.count )
- {}
-
- bool eql (const iterator& other) const
- {
- return (seq->ptr() == other.seq->ptr()) && (count == other.count);
- }
-
- bool neq (const iterator& other) const
- {
- return (seq->ptr() != other.seq->ptr()) || (count != other.count);
- }
-
- bool lss (const iterator& other) const
- {
- return (count < other.count);
- }
-
- bool gtr (const iterator& other) const
- {
- return (count > other.count);
- }
-
- bool leq (const iterator& other) const
- {
- return (count <= other.count);
- }
-
- bool geq (const iterator& other) const
- {
- return (count >= other.count);
- }
-
- seqref<T> operator*()
- {
- return seqref<T>(*seq, count);
- }
-
- seqref<T> operator[] (sequence_index_type i)
- {
- return seqref<T>(*seq, count + i);
- }
-
- iterator& operator=(const iterator& other)
- {
- if (this == &other) return *this;
- seq = other.seq;
- count = other.count;
- return *this;
- }
-
- iterator operator+(sequence_index_type n) const
- {
- return iterator(seq, count + n);
- }
-
- iterator operator-(sequence_index_type n) const
- {
- return iterator(seq, count - n);
- }
-
- iterator& operator+=(sequence_index_type n)
- {
- count = count + n;
- return *this;
- }
-
- iterator& operator-=(sequence_index_type n)
- {
- count = count - n;
- return *this;
- }
-
- int operator-(const iterator& other) const
- {
- if (*seq != *other.seq)
- throw RuntimeError ("SeqBase<T>::iterator comparison error");
- return count - other.count;
- }
-
- // prefix ++
- iterator& operator++ ()
- {
- count++;
- return *this;
- }
- // postfix ++
- iterator operator++ (int)
- {
- return iterator(seq, count++);
- }
- // prefix --
- iterator& operator-- ()
- {
- count--;
- return *this;
- }
- // postfix --
- iterator operator-- (int)
- {
- return iterator(seq, count--);
- }
-
- std::string diagnose() const
- {
- std::OSTRSTREAM oss;
- oss << "iterator diagnosis " << seq << ", " << count << std::ends;
- return std::string(oss.str());
- }
- }; // end of class SeqBase<T>::iterator
-
- iterator begin ()
- {
- return iterator(this, 0);
- }
-
- iterator end ()
- {
- return iterator(this, length());
- }
-
- class const_iterator
- : public random_access_iterator_parent(const Object)
- {
- protected:
- friend class SeqBase<T>;
- const SeqBase<T>* seq;
- sequence_index_type count;
-
- private:
- const_iterator (const SeqBase<T>* s, sequence_index_type where)
- : seq( s )
- , count( where )
- {}
-
- public:
- ~const_iterator ()
- {}
-
- const_iterator ()
- : seq( 0 )
- , count( 0 )
- {}
-
- const_iterator(const const_iterator& other)
- : seq( other.seq )
- , count( other.count )
- {}
-
- const T operator*() const
- {
- return seq->getItem(count);
- }
-
- const T operator[] (sequence_index_type i) const
- {
- return seq->getItem(count + i);
- }
-
- const_iterator& operator=(const const_iterator& other)
- {
- if (this == &other) return *this;
- seq = other.seq;
- count = other.count;
- return *this;
- }
-
- const_iterator operator+(sequence_index_type n) const
- {
- return const_iterator(seq, count + n);
- }
-
- bool eql (const const_iterator& other) const
- {
- return (seq->ptr() == other.seq->ptr()) && (count == other.count);
- }
-
- bool neq (const const_iterator& other) const
- {
- return (seq->ptr() != other.seq->ptr()) || (count != other.count);
- }
-
- bool lss (const const_iterator& other) const
- {
- return (count < other.count);
- }
-
- bool gtr (const const_iterator& other) const
- {
- return (count > other.count);
- }
-
- bool leq (const const_iterator& other) const
- {
- return (count <= other.count);
- }
-
- bool geq (const const_iterator& other) const
- {
- return (count >= other.count);
- }
-
- const_iterator operator-(sequence_index_type n)
- {
- return const_iterator(seq, count - n);
- }
-
- const_iterator& operator+=(sequence_index_type n)
- {
- count = count + n;
- return *this;
- }
-
- const_iterator& operator-=(sequence_index_type n)
- {
- count = count - n;
- return *this;
- }
-
- int operator-(const const_iterator& other) const
- {
- if (*seq != *other.seq)
- throw RuntimeError ("SeqBase<T>::const_iterator::- error");
- return count - other.count;
- }
- // prefix ++
- const_iterator& operator++ ()
- {
- count++;
- return *this;
- }
- // postfix ++
- const_iterator operator++ (int)
- {
- return const_iterator(seq, count++);
- }
- // prefix --
- const_iterator& operator-- ()
- {
- count--;
- return *this;
- }
- // postfix --
- const_iterator operator-- (int)
- {
- return const_iterator(seq, count--);
- }
- }; // end of class SeqBase<T>::const_iterator
-
- const_iterator begin () const
- {
- return const_iterator(this, 0);
- }
-
- const_iterator end () const
- {
- return const_iterator(this, length());
- }
- };
-
- // Here's an important typedef you might miss if reading too fast...
- typedef SeqBase<Object> Sequence;
-
- template <TEMPLATE_TYPENAME T> bool operator==(const EXPLICIT_TYPENAME SeqBase<T>::iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator!=(const EXPLICIT_TYPENAME SeqBase<T>::iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator< (const EXPLICIT_TYPENAME SeqBase<T>::iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator> (const EXPLICIT_TYPENAME SeqBase<T>::iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator<=(const EXPLICIT_TYPENAME SeqBase<T>::iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator>=(const EXPLICIT_TYPENAME SeqBase<T>::iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::iterator& right);
-
- template <TEMPLATE_TYPENAME T> bool operator==(const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator!=(const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator< (const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator> (const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator<=(const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator>=(const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& left, const EXPLICIT_TYPENAME SeqBase<T>::const_iterator& right);
-
- extern bool operator==(const Sequence::iterator& left, const Sequence::iterator& right);
- extern bool operator!=(const Sequence::iterator& left, const Sequence::iterator& right);
- extern bool operator< (const Sequence::iterator& left, const Sequence::iterator& right);
- extern bool operator> (const Sequence::iterator& left, const Sequence::iterator& right);
- extern bool operator<=(const Sequence::iterator& left, const Sequence::iterator& right);
- extern bool operator>=(const Sequence::iterator& left, const Sequence::iterator& right);
-
- extern bool operator==(const Sequence::const_iterator& left, const Sequence::const_iterator& right);
- extern bool operator!=(const Sequence::const_iterator& left, const Sequence::const_iterator& right);
- extern bool operator< (const Sequence::const_iterator& left, const Sequence::const_iterator& right);
- extern bool operator> (const Sequence::const_iterator& left, const Sequence::const_iterator& right);
- extern bool operator<=(const Sequence::const_iterator& left, const Sequence::const_iterator& right);
- extern bool operator>=(const Sequence::const_iterator& left, const Sequence::const_iterator& right);
-
- // ==================================================
- // class Char
- // Python strings return strings as individual elements.
- // I'll try having a class Char which is a String of length 1
- //
- typedef std::basic_string<Py_UNICODE> unicodestring;
- extern Py_UNICODE unicode_null_string[1];
-
- class Char: public Object
- {
- public:
- explicit Char (PyObject *pyob, bool owned = false): Object(pyob, owned)
- {
- validate();
- }
-
- Char (const Object& ob): Object(ob)
- {
- validate();
- }
-
- Char (const std::string& v = "")
- :Object(PyString_FromStringAndSize( const_cast<char*>(v.c_str()), 1 ), true)
- {
- validate();
- }
-
- Char (char v)
- : Object(PyString_FromStringAndSize (&v, 1), true)
- {
- validate();
- }
-
- Char (Py_UNICODE v)
- : Object(PyUnicode_FromUnicode (&v, 1), true)
- {
- validate();
- }
- // Assignment acquires new ownership of pointer
- Char& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- Char& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (rhsp);
- return *this;
- }
-
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return (pyob &&
- (Py::_String_Check(pyob) || Py::_Unicode_Check(pyob))
- && PySequence_Length (pyob) == 1);
- }
-
- // Assignment from C string
- Char& operator= (const std::string& v)
- {
- set(PyString_FromStringAndSize (const_cast<char*>(v.c_str()),1), true);
- return *this;
- }
-
- Char& operator= (char v)
- {
- set(PyString_FromStringAndSize (&v, 1), true);
- return *this;
- }
-
- Char& operator= (const unicodestring& v)
- {
- set(PyUnicode_FromUnicode (const_cast<Py_UNICODE*>(v.data()),1), true);
- return *this;
- }
-
- Char& operator= (Py_UNICODE v)
- {
- set(PyUnicode_FromUnicode (&v, 1), true);
- return *this;
- }
-
- long ord()
- {
- if( Py::_Unicode_Check( ptr() ) )
- {
- Py_UNICODE *unicode = PyUnicode_AS_UNICODE( ptr() );
- return static_cast<long>( unicode[0] );
- }
- else
- {
- unsigned char *str = reinterpret_cast<unsigned char *>( PyString_AS_STRING( ptr() ) );
- return static_cast<long>( str[0] );
- }
- }
-
- // Conversion
- operator String() const;
-
- operator std::string () const
- {
- return std::string(PyString_AsString (ptr()));
- }
- };
-
-#ifdef PYCXX_PYTHON_2TO3
- // String and Bytes compatible with Python3 version in 6.0.0 PyCXX
- class Bytes;
-
- class String: public SeqBase<Char>
- {
- public:
- virtual size_type capacity() const
- {
- return max_size();
- }
-
- explicit String( PyObject *pyob, bool owned = false)
- : SeqBase<Char>( pyob, owned )
- {
- validate();
- }
-
- String( const Object& ob): SeqBase<Char>(ob)
- {
- validate();
- }
-
- String()
- : SeqBase<Char>( PyString_FromStringAndSize( "", 0 ), true )
- {
- validate();
- }
-
- String( const std::string& v )
- : SeqBase<Char>( PyString_FromStringAndSize( const_cast<char*>(v.data()), v.length() ), true )
- {
- validate();
- }
-
- String( const Py_UNICODE *s, int length )
- : SeqBase<Char>( PyUnicode_FromUnicode( s, length ), true )
- {
- validate();
- }
-
- String( const char *s, const char *encoding, const char *error="strict" )
- : SeqBase<Char>( PyUnicode_Decode( s, strlen( s ), encoding, error ), true )
- {
- validate();
- }
-
- String( const char *s, int len, const char *encoding, const char *error="strict" )
- : SeqBase<Char>( PyUnicode_Decode( s, len, encoding, error ), true )
- {
- validate();
- }
-
- String( const std::string &s, const char *encoding, const char *error="strict" )
- : SeqBase<Char>( PyUnicode_Decode( s.c_str(), s.length(), encoding, error ), true )
- {
- validate();
- }
-
- String( const char *v, int vsize )
- : SeqBase<Char>(PyString_FromStringAndSize( const_cast<char*>(v), vsize ), true )
- {
- validate();
- }
-
- String( const char *v )
- : SeqBase<Char>( PyString_FromString( v ), true )
- {
- validate();
- }
-
- // Assignment acquires new ownership of pointer
- String &operator=( const Object &rhs )
- {
- return *this = *rhs;
- }
-
- String& operator= (PyObject *rhsp)
- {
- if( ptr() == rhsp )
- return *this;
- set (rhsp);
- return *this;
- }
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && (Py::_String_Check(pyob) || Py::_Unicode_Check(pyob));
- }
-
- // Assignment from C string
- String& operator=( const std::string &v )
- {
- set( PyString_FromStringAndSize( const_cast<char*>( v.data() ), v.length() ), true );
- return *this;
- }
- String& operator=( const unicodestring &v )
- {
- set( PyUnicode_FromUnicode( const_cast<Py_UNICODE*>( v.data() ), v.length() ), true );
- return *this;
- }
-
- // Encode
- Bytes encode( const char *encoding, const char *error="strict" ) const;
-
- // Queries
- virtual size_type size() const
- {
- if( isUnicode() )
- {
- return PyUnicode_GET_SIZE (ptr());
- }
- else
- {
- return PyString_Size (ptr());
- }
- }
-
- operator std::string() const
- {
- return as_std_string( "utf-8" );
- }
-
- std::string as_std_string( const char *encoding, const char *error="strict" ) const;
-
- unicodestring as_unicodestring() const
- {
- if( isUnicode() )
- {
- return unicodestring( PyUnicode_AS_UNICODE( ptr() ),
- PyUnicode_GET_SIZE( ptr() ) );
- }
- else
- {
- throw TypeError("can only return unicodestring from Unicode object");
- }
- }
-
- const Py_UNICODE *unicode_data() const
- {
- if( isUnicode() )
- {
- return PyUnicode_AS_UNICODE( ptr() );
- }
- else
- {
- throw TypeError("can only return unicode_data from Unicode object");
- }
- }
- };
- class Bytes: public SeqBase<Char>
- {
- public:
- virtual size_type capacity() const
- {
- return max_size();
- }
-
- explicit Bytes (PyObject *pyob, bool owned = false)
- : SeqBase<Char>(pyob, owned)
- {
- validate();
- }
-
- Bytes (const Object& ob): SeqBase<Char>(ob)
- {
- validate();
- }
-
- Bytes()
- : SeqBase<Char>( PyString_FromStringAndSize( "", 0 ), true )
- {
- validate();
- }
-
- Bytes( const std::string& v )
- : SeqBase<Char>( PyString_FromStringAndSize( const_cast<char*>(v.data()), v.length()), true )
- {
- validate();
- }
-
- Bytes( const char *v, size_type vsize )
- : SeqBase<Char>(PyString_FromStringAndSize( const_cast<char*>(v), vsize ), true )
- {
- validate();
- }
-
- Bytes( const char *v )
- : SeqBase<Char>( PyString_FromString( v ), true )
- {
- validate();
- }
-
- // Assignment acquires new ownership of pointer
- Bytes &operator= ( const Object& rhs )
- {
- return *this = *rhs;
- }
-
- Bytes &operator= (PyObject *rhsp)
- {
- if( ptr() == rhsp )
- return *this;
- set (rhsp);
- return *this;
- }
- // Membership
- virtual bool accepts( PyObject *pyob ) const
- {
- return pyob && (Py::_String_Check( pyob ) || Py::_Unicode_Check( pyob ));
- }
-
- // Assignment from C string
- Bytes &operator= (const std::string& v)
- {
- set( PyString_FromStringAndSize( const_cast<char*>( v.data() ), v.length() ), true );
- return *this;
- }
- Bytes &operator= (const unicodestring& v)
- {
- set( PyUnicode_FromUnicode( const_cast<Py_UNICODE*>( v.data() ), v.length() ), true );
- return *this;
- }
-
- String decode( const char *encoding, const char *error="strict" )
- {
- return Object( PyString_AsDecodedObject( ptr(), encoding, error ), true );
- }
-
- // Queries
- virtual size_type size () const
- {
- if( isUnicode() )
- {
- return PyUnicode_GET_SIZE (ptr());
- }
- else
- {
- return PyString_Size (ptr());
- }
- }
-
- operator std::string () const
- {
- return as_std_string();
- }
-
- std::string as_std_string() const
- {
- if( isUnicode() )
- {
- throw TypeError("cannot return std::string from Unicode object");
- }
- else
- {
- return std::string( PyString_AsString( ptr() ), static_cast<size_t>( PyString_Size( ptr() ) ) );
- }
- }
-
- unicodestring as_unicodestring() const
- {
- if( isUnicode() )
- {
- return unicodestring( PyUnicode_AS_UNICODE( ptr() ),
- static_cast<size_t>( PyUnicode_GET_SIZE( ptr() ) ) );
- }
- else
- {
- throw TypeError("can only return unicodestring from Unicode object");
- }
- }
- };
-
-#else
- // original PyCXX 5.4.x version of String
- class String: public SeqBase<Char>
- {
- public:
- virtual size_type capacity() const
- {
- return max_size();
- }
-
- explicit String (PyObject *pyob, bool owned = false): SeqBase<Char>(pyob, owned)
- {
- validate();
- }
-
- String (const Object& ob): SeqBase<Char>(ob)
- {
- validate();
- }
-
- String()
- : SeqBase<Char>( PyString_FromStringAndSize( "", 0 ), true )
- {
- validate();
- }
-
- String( const std::string& v )
- : SeqBase<Char>( PyString_FromStringAndSize( const_cast<char*>(v.data()), v.length() ), true )
- {
- validate();
- }
-
- String( const char *s, const char *encoding, const char *error="strict" )
- : SeqBase<Char>( PyUnicode_Decode( s, strlen( s ), encoding, error ), true )
- {
- validate();
- }
-
- String( const char *s, size_type len, const char *encoding, const char *error="strict" )
- : SeqBase<Char>( PyUnicode_Decode( s, len, encoding, error ), true )
- {
- validate();
- }
-
- String( const std::string &s, const char *encoding, const char *error="strict" )
- : SeqBase<Char>( PyUnicode_Decode( s.c_str(), s.length(), encoding, error ), true )
- {
- validate();
- }
-
- String( const char *v, size_type vsize )
- : SeqBase<Char>(PyString_FromStringAndSize( const_cast<char*>(v), vsize ), true )
- {
- validate();
- }
-
- String( const char* v )
- : SeqBase<Char>( PyString_FromString( v ), true )
- {
- validate();
- }
-
- // Assignment acquires new ownership of pointer
- String& operator= ( const Object& rhs )
- {
- return *this = *rhs;
- }
-
- String& operator= (PyObject* rhsp)
- {
- if( ptr() == rhsp )
- return *this;
- set (rhsp);
- return *this;
- }
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && (Py::_String_Check(pyob) || Py::_Unicode_Check(pyob));
- }
-
- // Assignment from C string
- String& operator= (const std::string& v)
- {
- set( PyString_FromStringAndSize( const_cast<char*>( v.data() ), v.length() ), true );
- return *this;
- }
- String& operator= (const unicodestring& v)
- {
- set( PyUnicode_FromUnicode( const_cast<Py_UNICODE*>( v.data() ), v.length() ), true );
- return *this;
- }
-
-
- // Encode
- String encode( const char *encoding, const char *error="strict" ) const
- {
- if( isUnicode() )
- {
- return String( PyUnicode_AsEncodedString( ptr(), encoding, error ), true );
- }
- else
- {
- return String( PyString_AsEncodedObject( ptr(), encoding, error ), true );
- }
- }
-
- String decode( const char *encoding, const char *error="strict" )
- {
- return Object( PyString_AsDecodedObject( ptr(), encoding, error ), true );
- }
-
- // Queries
- virtual size_type size () const
- {
- if( isUnicode() )
- {
- return PyUnicode_GET_SIZE (ptr());
- }
- else
- {
- return PyString_Size (ptr());
- }
- }
-
- operator std::string () const
- {
- return as_std_string();
- }
-
- std::string as_std_string() const
- {
- if( isUnicode() )
- {
- throw TypeError("cannot return std::string from Unicode object");
- }
- else
- {
- return std::string( PyString_AsString( ptr() ), static_cast<size_t>( PyString_Size( ptr() ) ) );
- }
- }
-
- std::string as_std_string( const char *encoding, const char *error="strict" ) const;
-
- unicodestring as_unicodestring() const
- {
- if( isUnicode() )
- {
- return unicodestring( PyUnicode_AS_UNICODE( ptr() ),
- static_cast<size_t>( PyUnicode_GET_SIZE( ptr() ) ) );
- }
- else
- {
- throw TypeError("can only return unicodestring from Unicode object");
- }
- }
- };
-#endif
-
- // ==================================================
- // class Tuple
- class Tuple: public Sequence
- {
- public:
- virtual void setItem (sequence_index_type offset, const Object&ob)
- {
- // note PyTuple_SetItem is a thief...
- if(PyTuple_SetItem (ptr(), offset, new_reference_to(ob)) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
-
- // Constructor
- explicit Tuple (PyObject *pyob, bool owned = false): Sequence (pyob, owned)
- {
- validate();
- }
-
- Tuple (const Object& ob): Sequence(ob)
- {
- validate();
- }
-
- // New tuple of a given size
- explicit Tuple (int size = 0)
- {
- set(PyTuple_New (size), true);
- validate ();
- for (sequence_index_type i=0; i < size; i++)
- {
- if(PyTuple_SetItem (ptr(), i, new_reference_to(Py::_None())) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
- }
- // Tuple from any sequence
- explicit Tuple (const Sequence& s)
- {
- sequence_index_type limit( sequence_index_type( s.length() ) );
-
- set(PyTuple_New (limit), true);
- validate();
-
- for(sequence_index_type i=0; i < limit; i++)
- {
- if(PyTuple_SetItem (ptr(), i, new_reference_to(s[i])) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
- }
- // Assignment acquires new ownership of pointer
-
- Tuple& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- Tuple& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (rhsp);
- return *this;
- }
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && Py::_Tuple_Check (pyob);
- }
-
- Tuple getSlice (int i, int j) const
- {
- return Tuple (PySequence_GetSlice (ptr(), i, j), true);
- }
-
- };
-
- class TupleN: public Tuple
- {
- public:
- TupleN()
- : Tuple( 0 )
- {
- }
-
- TupleN( const Object &obj1 )
- : Tuple( 1 )
- {
- setItem( 0, obj1 );
- }
-
- TupleN( const Object &obj1, const Object &obj2 )
- : Tuple( 2 )
- {
- setItem( 0, obj1 );
- setItem( 1, obj2 );
- }
-
- TupleN( const Object &obj1, const Object &obj2, const Object &obj3 )
- : Tuple( 3 )
- {
- setItem( 0, obj1 );
- setItem( 1, obj2 );
- setItem( 2, obj3 );
- }
-
- TupleN( const Object &obj1, const Object &obj2, const Object &obj3,
- const Object &obj4 )
- : Tuple( 4 )
- {
- setItem( 0, obj1 );
- setItem( 1, obj2 );
- setItem( 2, obj3 );
- setItem( 3, obj4 );
- }
-
- TupleN( const Object &obj1, const Object &obj2, const Object &obj3,
- const Object &obj4, const Object &obj5 )
- : Tuple( 5 )
- {
- setItem( 0, obj1 );
- setItem( 1, obj2 );
- setItem( 2, obj3 );
- setItem( 3, obj4 );
- setItem( 4, obj5 );
- }
-
- TupleN( const Object &obj1, const Object &obj2, const Object &obj3,
- const Object &obj4, const Object &obj5, const Object &obj6 )
- : Tuple( 6 )
- {
- setItem( 0, obj1 );
- setItem( 1, obj2 );
- setItem( 2, obj3 );
- setItem( 3, obj4 );
- setItem( 4, obj5 );
- setItem( 5, obj6 );
- }
-
- TupleN( const Object &obj1, const Object &obj2, const Object &obj3,
- const Object &obj4, const Object &obj5, const Object &obj6,
- const Object &obj7 )
- : Tuple( 7 )
- {
- setItem( 0, obj1 );
- setItem( 1, obj2 );
- setItem( 2, obj3 );
- setItem( 3, obj4 );
- setItem( 4, obj5 );
- setItem( 5, obj6 );
- setItem( 6, obj7 );
- }
-
- TupleN( const Object &obj1, const Object &obj2, const Object &obj3,
- const Object &obj4, const Object &obj5, const Object &obj6,
- const Object &obj7, const Object &obj8 )
- : Tuple( 8 )
- {
- setItem( 0, obj1 );
- setItem( 1, obj2 );
- setItem( 2, obj3 );
- setItem( 3, obj4 );
- setItem( 4, obj5 );
- setItem( 5, obj6 );
- setItem( 6, obj7 );
- setItem( 7, obj8 );
- }
-
- TupleN( const Object &obj1, const Object &obj2, const Object &obj3,
- const Object &obj4, const Object &obj5, const Object &obj6,
- const Object &obj7, const Object &obj8, const Object &obj9 )
- : Tuple( 9 )
- {
- setItem( 0, obj1 );
- setItem( 1, obj2 );
- setItem( 2, obj3 );
- setItem( 3, obj4 );
- setItem( 4, obj5 );
- setItem( 5, obj6 );
- setItem( 6, obj7 );
- setItem( 7, obj8 );
- setItem( 8, obj9 );
- }
-
- virtual ~TupleN()
- { }
- };
-
-
- // ==================================================
- // class List
-
- class List: public Sequence
- {
- public:
- // Constructor
- explicit List (PyObject *pyob, bool owned = false): Sequence(pyob, owned)
- {
- validate();
- }
- List (const Object& ob): Sequence(ob)
- {
- validate();
- }
- // Creation at a fixed size
- List (size_type size = 0)
- {
- set(PyList_New (size), true);
- validate();
- for (sequence_index_type i=0; i < size; i++)
- {
- if(PyList_SetItem (ptr(), i, new_reference_to(Py::_None())) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
- }
-
- // List from a sequence
- List (const Sequence& s): Sequence()
- {
- size_type n = s.length();
- set(PyList_New (n), true);
- validate();
- for (sequence_index_type i=0; i < n; i++)
- {
- if(PyList_SetItem (ptr(), i, new_reference_to(s[i])) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
- }
-
- virtual size_type capacity() const
- {
- return max_size();
- }
- // Assignment acquires new ownership of pointer
-
- List& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- List& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (rhsp);
- return *this;
- }
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && Py::_List_Check (pyob);
- }
-
- List getSlice (int i, int j) const
- {
- return List (PyList_GetSlice (ptr(), i, j), true);
- }
-
- void setSlice (int i, int j, const Object& v)
- {
- if(PyList_SetSlice (ptr(), i, j, *v) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
-
- void append (const Object& ob)
- {
- if(PyList_Append (ptr(), *ob) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
-
- void insert (int i, const Object& ob)
- {
- if(PyList_Insert (ptr(), i, *ob) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
-
- void sort ()
- {
- if(PyList_Sort(ptr()) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
-
- void reverse ()
- {
- if(PyList_Reverse(ptr()) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
- };
-
-
- // Mappings
- // ==================================================
- template<TEMPLATE_TYPENAME T>
- class mapref
- {
- protected:
- MapBase<T>& s; // the map
- Object key; // item key
- T the_item;
-
- public:
- mapref<T> (MapBase<T>& map, const std::string& k)
- : s(map), the_item()
- {
- key = String(k);
- if(map.hasKey(key)) the_item = map.getItem(key);
- }
-
- mapref<T> (MapBase<T>& map, const Object& k)
- : s(map), key(k), the_item()
- {
- if(map.hasKey(key)) the_item = map.getItem(key);
- }
-
- virtual ~mapref<T>()
- {}
-
- // MapBase<T> stuff
- // lvalue
- mapref<T>& operator=(const mapref<T>& other)
- {
- if(this == &other) return *this;
- the_item = other.the_item;
- s.setItem(key, other.the_item);
- return *this;
- }
-
- mapref<T>& operator= (const T& ob)
- {
- the_item = ob;
- s.setItem (key, ob);
- return *this;
- }
-
- // rvalue
- operator T() const
- {
- return the_item;
- }
-
- // forward everything else to the_item
- PyObject* ptr () const
- {
- return the_item.ptr();
- }
-
- int reference_count () const
- { // the mapref count
- return the_item.reference_count();
- }
-
- Type type () const
- {
- return the_item.type();
- }
-
- String str () const
- {
- return the_item.str();
- }
-
- String repr () const
- {
- return the_item.repr();
- }
-
- bool hasAttr (const std::string& attr_name) const
- {
- return the_item.hasAttr(attr_name);
- }
-
- Object getAttr (const std::string& attr_name) const
- {
- return the_item.getAttr(attr_name);
- }
-
- Object getItem (const Object& k) const
- {
- return the_item.getItem(k);
- }
-
- long hashValue () const
- {
- return the_item.hashValue();
- }
-
- bool isCallable () const
- {
- return the_item.isCallable();
- }
-
- bool isInstance () const
- {
- return the_item.isInstance();
- }
-
- bool isList () const
- {
- return the_item.isList();
- }
-
- bool isMapping () const
- {
- return the_item.isMapping();
- }
-
- bool isNumeric () const
- {
- return the_item.isNumeric();
- }
-
- bool isSequence () const
- {
- return the_item.isSequence();
- }
-
- bool isTrue () const
- {
- return the_item.isTrue();
- }
-
- bool isType (const Type& t) const
- {
- return the_item.isType (t);
- }
-
- bool isTuple() const
- {
- return the_item.isTuple();
- }
-
- bool isString() const
- {
- return the_item.isString();
- }
-
- // Commands
- void setAttr (const std::string& attr_name, const Object& value)
- {
- the_item.setAttr(attr_name, value);
- }
-
- void delAttr (const std::string& attr_name)
- {
- the_item.delAttr(attr_name);
- }
-
- void delItem (const Object& k)
- {
- the_item.delItem(k);
- }
- }; // end of mapref
-
- // TMM: now for mapref<T>
- template< class T >
- bool operator==(const mapref<T>& /* left */, const mapref<T>& /* right */)
- {
- return true; // NOT completed.
- }
-
- template< class T >
- bool operator!=(const mapref<T>& /* left */, const mapref<T>& /* right */)
- {
- return true; // not completed.
- }
-
- template<TEMPLATE_TYPENAME T>
- class MapBase: public Object
- {
- protected:
- explicit MapBase<T>()
- {}
- public:
- // reference: proxy class for implementing []
- // TMM: 26Jun'01 - the types
- // If you assume that Python mapping is a hash_map...
- // hash_map::value_type is not assignable, but
- // (*it).second = data must be a valid expression
- typedef PyCxx_ssize_t size_type;
- typedef Object key_type;
- typedef mapref<T> data_type;
- typedef std::pair< const T, T > value_type;
- typedef std::pair< const T, mapref<T> > reference;
- typedef const std::pair< const T, const T > const_reference;
- typedef std::pair< const T, mapref<T> > pointer;
-
- // Constructor
- explicit MapBase<T> (PyObject *pyob, bool owned = false): Object(pyob, owned)
- {
- validate();
- }
-
- // TMM: 02Jul'01 - changed MapBase<T> to Object in next line
- MapBase<T> (const Object& ob): Object(ob)
- {
- validate();
- }
-
- // Assignment acquires new ownership of pointer
- MapBase<T>& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- MapBase<T>& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (rhsp);
- return *this;
- }
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && PyMapping_Check(pyob);
- }
-
- // Clear -- PyMapping Clear is missing
- //
-
- void clear ()
- {
- List k = keys();
- for(List::iterator i = k.begin(); i != k.end(); i++)
- {
- delItem(*i);
- }
- }
-
- virtual Py_ssize_t size() const
- {
- return PyMapping_Length (ptr());
- }
-
- // Element Access
- T operator[](const std::string& key) const
- {
- return getItem(key);
- }
-
- T operator[](const Object& key) const
- {
- return getItem(key);
- }
-
- mapref<T> operator[](const std::string& key)
- {
- return mapref<T>(*this, key);
- }
-
- mapref<T> operator[](const Object& key)
- {
- return mapref<T>(*this, key);
- }
-
- Py_ssize_t length () const
- {
- return PyMapping_Length (ptr());
- }
-
- bool hasKey (const std::string& s) const
- {
- return PyMapping_HasKeyString (ptr(),const_cast<char*>(s.c_str())) != 0;
- }
-
- bool hasKey (const Object& s) const
- {
- return PyMapping_HasKey (ptr(), s.ptr()) != 0;
- }
-
- T getItem (const std::string& s) const
- {
- return T(
- asObject(PyMapping_GetItemString (ptr(),const_cast<char*>(s.c_str())))
- );
- }
-
- T getItem (const Object& s) const
- {
- return T(
- asObject(PyObject_GetItem (ptr(), s.ptr()))
- );
- }
-
- virtual void setItem (const char *s, const Object& ob)
- {
- if (PyMapping_SetItemString (ptr(), const_cast<char*>(s), *ob) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
-
- virtual void setItem (const std::string& s, const Object& ob)
- {
- if (PyMapping_SetItemString (ptr(), const_cast<char*>(s.c_str()), *ob) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
-
- virtual void setItem (const Object& s, const Object& ob)
- {
- if (PyObject_SetItem (ptr(), s.ptr(), ob.ptr()) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
-
- void delItem (const std::string& s)
- {
- if (PyMapping_DelItemString (ptr(), const_cast<char*>(s.c_str())) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
-
- void delItem (const Object& s)
- {
- if (PyMapping_DelItem (ptr(), *s) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- }
- // Queries
- List keys () const
- {
- static char keys[] = {'k', 'e', 'y', 's', 0};
- return List(PyObject_CallMethod( ptr(), keys, NULL ), true );
- }
-
- List values () const
- { // each returned item is a (key, value) pair
- return List(PyMapping_Values(ptr()), true);
- }
-
- List items () const
- {
- return List(PyMapping_Items(ptr()), true);
- }
-
- class iterator
- {
- // : public forward_iterator_parent( std::pair<const T,T> ) {
- protected:
- typedef std::forward_iterator_tag iterator_category;
- typedef std::pair< const T, T > value_type;
- typedef int difference_type;
- typedef std::pair< const T, mapref<T> > pointer;
- typedef std::pair< const T, mapref<T> > reference;
-
- friend class MapBase<T>;
- //
- MapBase<T> *map;
- List keys; // for iterating over the map
- sequence_index_type pos; // index into the keys
-
- private:
- iterator( MapBase<T>* m, List k, sequence_index_type p )
- : map( m )
- , keys( k )
- , pos( p )
- {}
-
- public:
- ~iterator ()
- {}
-
- iterator ()
- : map( 0 )
- , keys()
- , pos()
- {}
-
- iterator (MapBase<T>* m, bool end = false )
- : map( m )
- , keys( m->keys() )
- , pos( end ? keys.length() : 0 )
- {}
-
- iterator (const iterator& other)
- : map( other.map )
- , keys( other.keys )
- , pos( other.pos )
- {}
-
- reference operator*()
- {
- Object key = keys[ pos ];
- return std::make_pair(key, mapref<T>(*map,key));
- }
-
- iterator& operator=(const iterator& other)
- {
- if (this == &other)
- return *this;
- map = other.map;
- keys = other.keys;
- pos = other.pos;
- return *this;
- }
-
- bool eql(const iterator& right) const
- {
- return map->ptr() == right.map->ptr() && pos == right.pos;
- }
- bool neq( const iterator& right ) const
- {
- return map->ptr() != right.map->ptr() || pos != right.pos;
- }
-
- // pointer operator->() {
- // return ;
- // }
-
- // prefix ++
- iterator& operator++ ()
- { pos++; return *this;}
- // postfix ++
- iterator operator++ (int)
- { return iterator(map, keys, pos++);}
- // prefix --
- iterator& operator-- ()
- { pos--; return *this;}
- // postfix --
- iterator operator-- (int)
- { return iterator(map, keys, pos--);}
-
- std::string diagnose() const
- {
- std::OSTRSTREAM oss;
- oss << "iterator diagnosis " << map << ", " << pos << std::ends;
- return std::string(oss.str());
- }
- }; // end of class MapBase<T>::iterator
-
- iterator begin ()
- {
- return iterator(this);
- }
-
- iterator end ()
- {
- return iterator(this, true);
- }
-
- class const_iterator
- {
- protected:
- typedef std::forward_iterator_tag iterator_category;
- typedef const std::pair< const T, T > value_type;
- typedef int difference_type;
- typedef const std::pair< const T, T > pointer;
- typedef const std::pair< const T, T > reference;
-
- friend class MapBase<T>;
- const MapBase<T> *map;
- List keys; // for iterating over the map
- sequence_index_type pos; // index into the keys
-
- private:
- const_iterator( const MapBase<T>* m, List k, int p )
- : map( m )
- , keys( k )
- , pos( p )
- {}
-
- public:
- ~const_iterator ()
- {}
-
- const_iterator ()
- : map( 0 )
- , keys()
- , pos()
- {}
-
- const_iterator (const MapBase<T>* m, bool end = false )
- : map( m )
- , keys( m->keys() )
- , pos( end ? keys.length() : 0 )
- {}
-
- const_iterator(const const_iterator& other)
- : map( other.map )
- , keys( other.keys )
- , pos( other.pos )
- {}
-
- bool eql(const const_iterator& right) const
- {
- return map->ptr() == right.map->ptr() && pos == right.pos;
- }
-
- bool neq( const const_iterator& right ) const
- {
- return map->ptr() != right.map->ptr() || pos != right.pos;
- }
-
- const_reference operator*()
- {
- Object key = keys[ pos ];
- return std::make_pair( key, mapref<T>( *map, key ) );
- }
-
- const_iterator& operator=(const const_iterator& other)
- {
- if (this == &other) return *this;
- map = other.map;
- keys = other.keys;
- pos = other.pos;
- return *this;
- }
-
- // prefix ++
- const_iterator& operator++ ()
- { pos++; return *this;}
- // postfix ++
- const_iterator operator++ (int)
- { return const_iterator(map, keys, pos++);}
- // prefix --
- const_iterator& operator-- ()
- { pos--; return *this;}
- // postfix --
- const_iterator operator-- (int)
- { return const_iterator(map, keys, pos--);}
- }; // end of class MapBase<T>::const_iterator
-
- const_iterator begin () const
- {
- return const_iterator(this);
- }
-
- const_iterator end () const
- {
- return const_iterator(this, true);
- }
-
- }; // end of MapBase<T>
-
- typedef MapBase<Object> Mapping;
-
- template <TEMPLATE_TYPENAME T> bool operator==(const EXPLICIT_TYPENAME MapBase<T>::iterator& left, const EXPLICIT_TYPENAME MapBase<T>::iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator!=(const EXPLICIT_TYPENAME MapBase<T>::iterator& left, const EXPLICIT_TYPENAME MapBase<T>::iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator==(const EXPLICIT_TYPENAME MapBase<T>::const_iterator& left, const EXPLICIT_TYPENAME MapBase<T>::const_iterator& right);
- template <TEMPLATE_TYPENAME T> bool operator!=(const EXPLICIT_TYPENAME MapBase<T>::const_iterator& left, const EXPLICIT_TYPENAME MapBase<T>::const_iterator& right);
-
- extern bool operator==(const Mapping::iterator& left, const Mapping::iterator& right);
- extern bool operator!=(const Mapping::iterator& left, const Mapping::iterator& right);
- extern bool operator==(const Mapping::const_iterator& left, const Mapping::const_iterator& right);
- extern bool operator!=(const Mapping::const_iterator& left, const Mapping::const_iterator& right);
-
-
- // ==================================================
- // class Dict
- class Dict: public Mapping
- {
- public:
- // Constructor
- explicit Dict (PyObject *pyob, bool owned=false): Mapping (pyob, owned)
- {
- validate();
- }
- Dict (const Object& ob): Mapping(ob)
- {
- validate();
- }
- // Creation
- Dict ()
- {
- set(PyDict_New (), true);
- validate();
- }
- // Assignment acquires new ownership of pointer
-
- Dict& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- Dict& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set(rhsp);
- return *this;
- }
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && Py::_Dict_Check (pyob);
- }
- };
-
- class Callable: public Object
- {
- public:
- // Constructor
- explicit Callable (): Object() {}
- explicit Callable (PyObject *pyob, bool owned = false): Object (pyob, owned)
- {
- validate();
- }
-
- Callable (const Object& ob): Object(ob)
- {
- validate();
- }
-
- // Assignment acquires new ownership of pointer
-
- Callable& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- Callable& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set (rhsp);
- return *this;
- }
-
- // Membership
- virtual bool accepts (PyObject *pyob) const
- {
- return pyob && PyCallable_Check (pyob);
- }
-
- // Call
- Object apply(const Tuple& args) const
- {
- PyObject *result = PyObject_CallObject( ptr(), args.ptr() );
- if( result == NULL )
- {
- ifPyErrorThrowCxxException();
- }
- return asObject( result );
- }
-
- // Call with keywords
- Object apply(const Tuple& args, const Dict& kw) const
- {
- PyObject *result = PyEval_CallObjectWithKeywords( ptr(), args.ptr(), kw.ptr() );
- if( result == NULL )
- {
- ifPyErrorThrowCxxException();
- }
- return asObject( result );
- }
-
- Object apply(PyObject* pargs = 0) const
- {
- if( pargs == 0 )
- {
- return apply( Tuple() );
- }
- else
- {
- return apply( Tuple( pargs ) );
- }
- }
- };
-
- class Module: public Object
- {
- public:
- explicit Module (PyObject* pyob, bool owned = false): Object (pyob, owned)
- {
- validate();
- }
-
- // Construct from module name
- explicit Module (const std::string&s): Object()
- {
- PyObject *m = PyImport_AddModule( const_cast<char *>(s.c_str()) );
- set( m, false );
- validate ();
- }
-
- // Copy constructor acquires new ownership of pointer
- Module (const Module& ob): Object(*ob)
- {
- validate();
- }
-
- Module& operator= (const Object& rhs)
- {
- return (*this = *rhs);
- }
-
- Module& operator= (PyObject* rhsp)
- {
- if(ptr() == rhsp) return *this;
- set(rhsp);
- return *this;
- }
-
- Dict getDict()
- {
- return Dict(PyModule_GetDict(ptr()));
- // Caution -- PyModule_GetDict returns borrowed reference!
- }
- };
-
- // Call function helper
- inline Object Object::callMemberFunction( const std::string &function_name ) const
- {
- Callable target( getAttr( function_name ) );
- Tuple args( 0 );
- return target.apply( args );
- }
-
- inline Object Object::callMemberFunction( const std::string &function_name, const Tuple &args ) const
- {
- Callable target( getAttr( function_name ) );
- return target.apply( args );
- }
-
- inline Object Object::callMemberFunction( const std::string &function_name, const Tuple &args, const Dict &kw ) const
- {
- Callable target( getAttr( function_name ) );
- return target.apply( args, kw );
- }
-
- // Numeric interface
- inline Object operator+ (const Object& a)
- {
- return asObject(PyNumber_Positive(*a));
- }
- inline Object operator- (const Object& a)
- {
- return asObject(PyNumber_Negative(*a));
- }
-
- inline Object abs(const Object& a)
- {
- return asObject(PyNumber_Absolute(*a));
- }
-
- inline std::pair<Object,Object> coerce(const Object& a, const Object& b)
- {
- PyObject *p1, *p2;
- p1 = *a;
- p2 = *b;
- if(PyNumber_Coerce(&p1,&p2) == -1)
- {
- ifPyErrorThrowCxxException();
- }
- return std::pair<Object,Object>(asObject(p1), asObject(p2));
- }
-
- inline Object operator+ (const Object& a, const Object& b)
- {
- return asObject(PyNumber_Add(*a, *b));
- }
- inline Object operator+ (const Object& a, int j)
- {
- return asObject(PyNumber_Add(*a, *Int(j)));
- }
- inline Object operator+ (const Object& a, double v)
- {
- return asObject(PyNumber_Add(*a, *Float(v)));
- }
- inline Object operator+ (int j, const Object& b)
- {
- return asObject(PyNumber_Add(*Int(j), *b));
- }
- inline Object operator+ (double v, const Object& b)
- {
- return asObject(PyNumber_Add(*Float(v), *b));
- }
-
- inline Object operator- (const Object& a, const Object& b)
- {
- return asObject(PyNumber_Subtract(*a, *b));
- }
- inline Object operator- (const Object& a, int j)
- {
- return asObject(PyNumber_Subtract(*a, *Int(j)));
- }
- inline Object operator- (const Object& a, double v)
- {
- return asObject(PyNumber_Subtract(*a, *Float(v)));
- }
- inline Object operator- (int j, const Object& b)
- {
- return asObject(PyNumber_Subtract(*Int(j), *b));
- }
- inline Object operator- (double v, const Object& b)
- {
- return asObject(PyNumber_Subtract(*Float(v), *b));
- }
-
- inline Object operator* (const Object& a, const Object& b)
- {
- return asObject(PyNumber_Multiply(*a, *b));
- }
- inline Object operator* (const Object& a, int j)
- {
- return asObject(PyNumber_Multiply(*a, *Int(j)));
- }
- inline Object operator* (const Object& a, double v)
- {
- return asObject(PyNumber_Multiply(*a, *Float(v)));
- }
- inline Object operator* (int j, const Object& b)
- {
- return asObject(PyNumber_Multiply(*Int(j), *b));
- }
- inline Object operator* (double v, const Object& b)
- {
- return asObject(PyNumber_Multiply(*Float(v), *b));
- }
-
- inline Object operator/ (const Object& a, const Object& b)
- {
- return asObject(PyNumber_Divide(*a, *b));
- }
- inline Object operator/ (const Object& a, int j)
- {
- return asObject(PyNumber_Divide(*a, *Int(j)));
- }
- inline Object operator/ (const Object& a, double v)
- {
- return asObject(PyNumber_Divide(*a, *Float(v)));
- }
- inline Object operator/ (int j, const Object& b)
- {
- return asObject(PyNumber_Divide(*Int(j), *b));
- }
- inline Object operator/ (double v, const Object& b)
- {
- return asObject(PyNumber_Divide(*Float(v), *b));
- }
-
- inline Object operator% (const Object& a, const Object& b)
- {
- return asObject(PyNumber_Remainder(*a, *b));
- }
- inline Object operator% (const Object& a, int j)
- {
- return asObject(PyNumber_Remainder(*a, *Int(j)));
- }
- inline Object operator% (const Object& a, double v)
- {
- return asObject(PyNumber_Remainder(*a, *Float(v)));
- }
- inline Object operator% (int j, const Object& b)
- {
- return asObject(PyNumber_Remainder(*Int(j), *b));
- }
- inline Object operator% (double v, const Object& b)
- {
- return asObject(PyNumber_Remainder(*Float(v), *b));
- }
-
- inline Object type(const BaseException&) // return the type of the error
- {
- PyObject *ptype, *pvalue, *ptrace;
- PyErr_Fetch(&ptype, &pvalue, &ptrace);
- Object result;
- if(ptype) result = ptype;
- PyErr_Restore(ptype, pvalue, ptrace);
- return result;
- }
-
- inline Object value(const BaseException&) // return the value of the error
- {
- PyObject *ptype, *pvalue, *ptrace;
- PyErr_Fetch(&ptype, &pvalue, &ptrace);
- Object result;
- if(pvalue) result = pvalue;
- PyErr_Restore(ptype, pvalue, ptrace);
- return result;
- }
-
- inline Object trace(const BaseException&) // return the traceback of the error
- {
- PyObject *ptype, *pvalue, *ptrace;
- PyErr_Fetch(&ptype, &pvalue, &ptrace);
- Object result;
- if(ptrace) result = ptrace;
- PyErr_Restore(ptype, pvalue, ptrace);
- return result;
- }
-
-template<TEMPLATE_TYPENAME T>
-String seqref<T>::str () const
-{
- return the_item.str();
-}
-
-template<TEMPLATE_TYPENAME T>
-String seqref<T>::repr () const
-{
- return the_item.repr();
-}
-
-} // namespace Py
-#endif // __CXX_Objects__h
diff --git a/contrib/libs/pycxx/Python2/PythonType.hxx b/contrib/libs/pycxx/Python2/PythonType.hxx
deleted file mode 100755
index dce6917a5c5..00000000000
--- a/contrib/libs/pycxx/Python2/PythonType.hxx
+++ /dev/null
@@ -1,209 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-
-#ifndef __CXX_PythonType__h
-#define __CXX_PythonType__h
-
-namespace Py
-{
- class PythonType
- {
- public:
-#define B(n) (1<<(n))
- // if you define one sequence method you must define
- // all of them except the assigns
-
- PythonType( size_t base_size, int itemsize, const char *default_name );
- virtual ~PythonType();
-
- const char *getName() const;
- const char *getDoc() const;
-
- PyTypeObject *type_object() const;
- PythonType &name( const char *nam );
- PythonType &doc( const char *d );
-
- PythonType &supportClass( void );
- PythonType &dealloc( void (*f)( PyObject* ) );
-#if defined( PYCXX_PYTHON_2TO3 )
- PythonType &supportPrint( void );
-#endif
- PythonType &supportGetattr( void );
- PythonType &supportSetattr( void );
- PythonType &supportGetattro( void );
- PythonType &supportSetattro( void );
-#if defined( PYCXX_PYTHON_2TO3 )
- PythonType &supportCompare( void );
-#endif
- PythonType &supportRichCompare( void );
- PythonType &supportRepr( void );
- PythonType &supportStr( void );
- PythonType &supportHash( void );
- PythonType &supportCall( void );
-
- enum {
- support_iter_iter = B(0),
- support_iter_iternext = B(1)
- };
- PythonType &supportIter( int methods_to_support=
- support_iter_iter |
- support_iter_iternext );
-
- enum {
- support_sequence_length = B(0),
- support_sequence_repeat = B(1),
- support_sequence_item = B(2),
- support_sequence_slice = B(3),
- support_sequence_concat = B(4),
- support_sequence_ass_item = B(5),
- support_sequence_ass_slice = B(6),
- support_sequence_inplace_concat = B(7),
- support_sequence_inplace_repeat = B(8),
- support_sequence_contains = B(9)
- };
- PythonType &supportSequenceType( int methods_to_support=
- support_sequence_length |
- support_sequence_repeat |
- support_sequence_item |
- support_sequence_slice |
- support_sequence_concat
- );
-
- enum {
- support_mapping_length = B(0),
- support_mapping_subscript = B(1),
- support_mapping_ass_subscript = B(2)
- };
- PythonType &supportMappingType( int methods_to_support=
- support_mapping_length |
- support_mapping_subscript
- );
-
- enum {
- support_number_add = B(0),
- support_number_subtract = B(1),
- support_number_multiply = B(2),
- support_number_divide = B(3),
- support_number_remainder = B(4),
- support_number_divmod = B(5),
- support_number_power = B(6),
- support_number_negative = B(7),
- support_number_positive = B(8),
- support_number_absolute = B(9),
- support_number_nonzero = B(10),
- support_number_invert = B(11),
- support_number_lshift = B(12),
- support_number_rshift = B(13),
- support_number_and = B(14),
- support_number_xor = B(15),
- support_number_or = B(16),
- support_number_int = B(17),
- support_number_long = B(18),
- support_number_float = B(19),
- support_number_oct = B(20),
- support_number_hex = B(21)
- };
- PythonType &supportNumberType( int methods_to_support=
- support_number_add |
- support_number_subtract |
- support_number_multiply |
- support_number_divide |
- support_number_remainder |
- support_number_divmod |
- support_number_power |
- support_number_negative |
- support_number_positive |
- support_number_absolute |
- support_number_nonzero |
- support_number_invert |
- support_number_lshift |
- support_number_rshift |
- support_number_and |
- support_number_xor |
- support_number_or |
- support_number_int |
- support_number_long |
- support_number_float |
- support_number_oct |
- support_number_hex
- );
-
- enum {
- support_buffer_getreadbuffer = B(0),
- support_buffer_getwritebuffer = B(1),
- support_buffer_getsegcount = B(2)
- };
- PythonType &supportBufferType( int methods_to_support=
- support_buffer_getreadbuffer |
- support_buffer_getwritebuffer |
- support_buffer_getsegcount
- );
-#undef B
-
- PythonType &set_tp_dealloc( void (*tp_dealloc)( PyObject * ) );
- PythonType &set_tp_init( int (*tp_init)( PyObject *self, PyObject *args, PyObject *kwds ) );
- PythonType &set_tp_new( PyObject *(*tp_new)( PyTypeObject *subtype, PyObject *args, PyObject *kwds ) );
- PythonType &set_methods( PyMethodDef *methods );
-
- // call once all support functions have been called to ready the type
- bool readyType();
-
- protected:
- void init_sequence();
- void init_mapping();
- void init_number();
- void init_buffer();
-
- PyTypeObject *table;
- PySequenceMethods *sequence_table;
- PyMappingMethods *mapping_table;
- PyNumberMethods *number_table;
- PyBufferProcs *buffer_table;
-
- private:
- //
- // prevent the compiler generating these unwanted functions
- //
- PythonType( const PythonType &tb ); // unimplemented
- void operator=( const PythonType &t ); // unimplemented
-
- };
-
-} // Namespace Py
-
-// End of __CXX_PythonType__h
-#endif
diff --git a/contrib/libs/pycxx/Python2/cxx_exceptions.cxx b/contrib/libs/pycxx/Python2/cxx_exceptions.cxx
deleted file mode 100644
index 9dff2753ddd..00000000000
--- a/contrib/libs/pycxx/Python2/cxx_exceptions.cxx
+++ /dev/null
@@ -1,72 +0,0 @@
-//
-// cxx_exceptions.cxx
-//
-#include "../Exception.hxx"
-#include "../Extensions.hxx"
-
-#include <map>
-
-namespace Py
-{
-typedef void (*throw_exception_func_t)( PyObject* exc );
-
-std::map<void *, throw_exception_func_t> py_exc_type_to_exc_func;
-
-void addPythonException( ExtensionExceptionType &py_exc_type, throw_exception_func_t func )
-{
- py_exc_type_to_exc_func.insert( std::make_pair( py_exc_type.ptr(), func ) );
-}
-
-void addPythonException( PyObject *py_exc_type, throw_exception_func_t func )
-{
- py_exc_type_to_exc_func.insert( std::make_pair( py_exc_type, func ) );
-}
-
-void ifPyErrorThrowCxxException()
-{
- if( PyErr_Occurred() )
- {
- PyObject *ptype, *pvalue, *ptrace;
- PyErr_Fetch( &ptype, &pvalue, &ptrace );
- PyErr_Restore( ptype, pvalue, ptrace );
-
- Object q( ptype );
-
- std::map<void *, throw_exception_func_t>::iterator func = py_exc_type_to_exc_func.find( ptype );
- if( func != py_exc_type_to_exc_func.end() )
- {
-#ifdef PYCXX_DEBUG
- std::cout << "ifPyErrorThrowCxxException found throwFunc: " << q << std::endl;
-#endif
- (func->second)(pvalue);
- }
- else
- {
-#ifdef PYCXX_DEBUG
- std::cout << "ifPyErrorThrowCxxException no throwFunc: " << q << std::endl;
-#endif
- throw Exception();
- }
- }
-}
-
-void initExceptions()
-{
- static bool init_done = false;
- if( init_done )
- {
- return;
- }
-
-#define PYCXX_STANDARD_EXCEPTION( eclass, bclass ) \
- addPythonException( eclass::exceptionType(), eclass::throwFuncObj );
-
-#include "cxx_standard_exceptions.hxx"
-
-#undef PYCXX_STANDARD_EXCEPTION
-
- init_done = true;
-}
-
-
-} // end of namespace Py
diff --git a/contrib/libs/pycxx/Python2/cxx_extensions.cxx b/contrib/libs/pycxx/Python2/cxx_extensions.cxx
deleted file mode 100644
index dafb08ed141..00000000000
--- a/contrib/libs/pycxx/Python2/cxx_extensions.cxx
+++ /dev/null
@@ -1,2073 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-#include "../Extensions.hxx"
-#include "../Exception.hxx"
-
-#include <assert.h>
-
-extern "C" { // sanitizers API. Avoid dependency on util.
-#if defined(_asan_enabled_)
-void __lsan_ignore_object(const void* p);
-#endif
-}
-
-#ifdef PYCXX_DEBUG
-//
-// Functions useful when debugging PyCXX
-//
-void bpt( void )
-{
-}
-
-void printRefCount( PyObject *obj )
-{
- std::cout << "RefCount of 0x" << std::hex << reinterpret_cast< unsigned long >( obj ) << std::dec << " is " << Py_REFCNT( obj ) << std::endl;
-}
-#endif
-
-namespace Py
-{
-#ifdef PYCXX_PYTHON_2TO3
-std::string String::as_std_string( const char *encoding, const char *error ) const
-{
- if( isUnicode() )
- {
- Bytes encoded( encode( encoding, error ) );
- return encoded.as_std_string();
- }
- else
- {
- return std::string( PyString_AsString( ptr() ), static_cast<size_type>( PyString_Size( ptr() ) ) );
- }
-}
-
-Bytes String::encode( const char *encoding, const char *error ) const
-{
- if( isUnicode() )
- {
- return Bytes( PyUnicode_AsEncodedString( ptr(), encoding, error ) );
- }
- else
- {
- return Bytes( PyString_AsEncodedObject( ptr(), encoding, error ) );
- }
-}
-
-#else
-std::string String::as_std_string( const char *encoding, const char *error ) const
-{
- if( isUnicode() )
- {
- String encoded( encode( encoding, error ) );
- return encoded.as_std_string();
- }
- else
- {
- return std::string( PyString_AsString( ptr() ), static_cast<size_type>( PyString_Size( ptr() ) ) );
- }
-}
-#endif
-
-void Object::validate()
-{
- // release pointer if not the right type
- if( !accepts( p ) )
- {
-#if defined( _CPPRTTI ) || defined( __GNUG__ )
- std::string s( "PyCXX: Error creating object of type " );
- s += (typeid( *this )).name();
-
- if( p != NULL )
- {
- String from_repr = repr();
- s += " from ";
- s += from_repr.as_std_string( "utf-8" );
- }
- else
- {
- s += " from (nil)";
- }
-#endif
- release();
-
- // Error message already set
- ifPyErrorThrowCxxException();
-
- // Better error message if RTTI available
-#if defined( _CPPRTTI ) || defined( __GNUG__ )
- throw TypeError( s );
-#else
- throw TypeError( "PyCXX: type error." );
-#endif
- }
-}
-
-//================================================================================
-//
-// Implementation of MethodTable
-//
-//================================================================================
-PyMethodDef MethodTable::method( const char *method_name, PyCFunction f, int flags, const char *doc )
-{
- PyMethodDef m;
- m.ml_name = const_cast<char*>( method_name );
- m.ml_meth = f;
- m.ml_flags = flags;
- m.ml_doc = const_cast<char*>( doc );
- return m;
-}
-
-MethodTable::MethodTable()
-{
- t.push_back( method( 0, 0, 0, 0 ) );
- mt = NULL;
-}
-
-MethodTable::~MethodTable()
-{
- delete [] mt;
-}
-
-void MethodTable::add( const char *method_name, PyCFunction f, const char *doc, int flag )
-{
- if( !mt )
- {
- t.insert( t.end()-1, method( method_name, f, flag, doc ) );
- }
- else
- {
- throw RuntimeError( "Too late to add a module method!" );
- }
-}
-
-PyMethodDef *MethodTable::table()
-{
- if( !mt )
- {
- Py_ssize_t t1size = t.size();
- mt = new PyMethodDef[ t1size ];
- int j = 0;
- for( std::vector<PyMethodDef>::iterator i = t.begin(); i != t.end(); i++ )
- {
- mt[ j++ ] = *i;
- }
- }
- return mt;
-}
-
-//================================================================================
-//
-// Implementation of ExtensionModule
-//
-//================================================================================
-ExtensionModuleBase::ExtensionModuleBase( const char *name )
-: m_module_name( name )
-, m_full_module_name( __Py_PackageContext() != NULL ? std::string( __Py_PackageContext() ) : m_module_name )
-, m_method_table()
-, m_module( NULL )
-{}
-
-ExtensionModuleBase::~ExtensionModuleBase()
-{}
-
-const std::string &ExtensionModuleBase::name() const
-{
- return m_module_name;
-}
-
-const std::string &ExtensionModuleBase::fullName() const
-{
- return m_full_module_name;
-}
-
-class ExtensionModuleBasePtr : public PythonExtension<ExtensionModuleBasePtr>
-{
-public:
- ExtensionModuleBasePtr( ExtensionModuleBase *_module )
- : module( _module )
- {}
-
- virtual ~ExtensionModuleBasePtr()
- {}
-
- ExtensionModuleBase *module;
-};
-
-void initExceptions();
-
-void ExtensionModuleBase::initialize( const char *module_doc )
-{
- initExceptions();
-
- PyObject *module_ptr = new ExtensionModuleBasePtr( this );
-#if defined(_asan_enabled_)
- __lsan_ignore_object(module_ptr);
-#endif
- m_module = Py_InitModule4
- (
- const_cast<char *>( m_module_name.c_str() ), // name
- m_method_table.table(), // methods
- const_cast<char *>( module_doc ), // docs
- module_ptr, // pass to functions as "self"
- PYTHON_API_VERSION // API version
- );
-}
-
-Module ExtensionModuleBase::module( void ) const
-{
- return Module( m_full_module_name );
-}
-
-Dict ExtensionModuleBase::moduleDictionary( void ) const
-{
- return module().getDict();
-}
-
-Object ExtensionModuleBase::moduleObject( void ) const
-{
- return Object( m_module );
-}
-
-//================================================================================
-//
-// Implementation of PythonType
-//
-//================================================================================
-extern "C"
-{
- static void standard_dealloc( PyObject *p );
- //
- // All the following functions redirect the call from Python
- // onto the matching virtual function in PythonExtensionBase
- //
-#if defined( PYCXX_PYTHON_2TO3 )
- static int print_handler( PyObject *, FILE *, int );
-#endif
- static PyObject *getattr_handler( PyObject *, char * );
- static int setattr_handler( PyObject *, char *, PyObject * );
- static PyObject *getattro_handler( PyObject *, PyObject * );
- static int setattro_handler( PyObject *, PyObject *, PyObject * );
-#if defined( PYCXX_PYTHON_2TO3 )
- static int compare_handler( PyObject *, PyObject * );
-#endif
- static PyObject *rich_compare_handler( PyObject *, PyObject *, int );
- static PyObject *repr_handler( PyObject * );
- static PyObject *str_handler( PyObject * );
- static long hash_handler( PyObject * );
- static PyObject *call_handler( PyObject *, PyObject *, PyObject * );
- static PyObject *iter_handler( PyObject * );
- static PyObject *iternext_handler( PyObject * );
-
- // Sequence methods
- static Py_ssize_t sequence_length_handler( PyObject * );
- static PyObject *sequence_concat_handler( PyObject *,PyObject * );
- static PyObject *sequence_repeat_handler( PyObject *, Py_ssize_t );
- static PyObject *sequence_item_handler( PyObject *, Py_ssize_t );
- static PyObject *sequence_slice_handler( PyObject *, Py_ssize_t, Py_ssize_t );
- static int sequence_ass_item_handler( PyObject *, Py_ssize_t, PyObject * );
- static int sequence_ass_slice_handler( PyObject *, Py_ssize_t, Py_ssize_t, PyObject * );
-
- static PyObject *sequence_inplace_concat_handler( PyObject *, PyObject * );
- static PyObject *sequence_inplace_repeat_handler( PyObject *, Py_ssize_t );
-
- static int sequence_contains_handler( PyObject *, PyObject * );
-
- // Mapping
- static Py_ssize_t mapping_length_handler( PyObject * );
- static PyObject *mapping_subscript_handler( PyObject *, PyObject * );
- static int mapping_ass_subscript_handler( PyObject *, PyObject *, PyObject * );
-
- // Numeric methods
- static int number_nonzero_handler( PyObject * );
- static PyObject *number_negative_handler( PyObject * );
- static PyObject *number_positive_handler( PyObject * );
- static PyObject *number_absolute_handler( PyObject * );
- static PyObject *number_invert_handler( PyObject * );
- static PyObject *number_int_handler( PyObject * );
- static PyObject *number_float_handler( PyObject * );
- static PyObject *number_long_handler( PyObject * );
- static PyObject *number_oct_handler( PyObject * );
- static PyObject *number_hex_handler( PyObject * );
- static PyObject *number_add_handler( PyObject *, PyObject * );
- static PyObject *number_subtract_handler( PyObject *, PyObject * );
- static PyObject *number_multiply_handler( PyObject *, PyObject * );
- static PyObject *number_divide_handler( PyObject *, PyObject * );
- static PyObject *number_remainder_handler( PyObject *, PyObject * );
- static PyObject *number_divmod_handler( PyObject *, PyObject * );
- static PyObject *number_lshift_handler( PyObject *, PyObject * );
- static PyObject *number_rshift_handler( PyObject *, PyObject * );
- static PyObject *number_and_handler( PyObject *, PyObject * );
- static PyObject *number_xor_handler( PyObject *, PyObject * );
- static PyObject *number_or_handler( PyObject *, PyObject * );
- static PyObject *number_power_handler( PyObject *, PyObject *, PyObject * );
-
- // Buffer
- static Py_ssize_t buffer_getreadbuffer_handler( PyObject *, Py_ssize_t, void ** );
- static Py_ssize_t buffer_getwritebuffer_handler( PyObject *, Py_ssize_t, void ** );
- static Py_ssize_t buffer_getsegcount_handler( PyObject *, Py_ssize_t * );
-}
-
-extern "C" void standard_dealloc( PyObject *p )
-{
- PyMem_DEL( p );
-}
-
-bool PythonType::readyType()
-{
- return PyType_Ready( table ) >= 0;
-}
-
-PythonType &PythonType::supportSequenceType( int methods_to_support )
-{
- if( !sequence_table )
- {
- sequence_table = new PySequenceMethods;
- memset( sequence_table, 0, sizeof( PySequenceMethods ) ); // ensure new fields are 0
- table->tp_as_sequence = sequence_table;
- if( methods_to_support&support_sequence_length )
- {
- sequence_table->sq_length = sequence_length_handler;
- }
- if( methods_to_support&support_sequence_repeat )
- {
- sequence_table->sq_repeat = sequence_repeat_handler;
- }
- if( methods_to_support&support_sequence_item )
- {
- sequence_table->sq_item = sequence_item_handler;
- }
- if( methods_to_support&support_sequence_slice )
- {
- sequence_table->sq_slice = sequence_slice_handler;
- }
- if( methods_to_support&support_sequence_concat )
- {
- sequence_table->sq_concat = sequence_concat_handler;
- }
- if( methods_to_support&support_sequence_ass_item )
- {
- sequence_table->sq_ass_item = sequence_ass_item_handler;
- }
- if( methods_to_support&support_sequence_ass_slice )
- {
- sequence_table->sq_ass_slice = sequence_ass_slice_handler;
- }
- if( methods_to_support&support_sequence_inplace_concat )
- {
- sequence_table->sq_inplace_concat = sequence_inplace_concat_handler;
- }
- if( methods_to_support&support_sequence_inplace_repeat )
- {
- sequence_table->sq_inplace_repeat = sequence_inplace_repeat_handler;
- }
- if( methods_to_support&support_sequence_contains )
- {
- sequence_table->sq_contains = sequence_contains_handler;
- }
- }
- return *this;
-}
-
-
-PythonType &PythonType::supportMappingType( int methods_to_support )
-{
- if( !mapping_table )
- {
- mapping_table = new PyMappingMethods;
- memset( mapping_table, 0, sizeof( PyMappingMethods ) ); // ensure new fields are 0
- table->tp_as_mapping = mapping_table;
-
- if( methods_to_support&support_mapping_length )
- {
- mapping_table->mp_length = mapping_length_handler;
- }
- if( methods_to_support&support_mapping_subscript )
- {
- mapping_table->mp_subscript = mapping_subscript_handler;
- }
- if( methods_to_support&support_mapping_ass_subscript )
- {
- mapping_table->mp_ass_subscript = mapping_ass_subscript_handler;
- }
- }
- return *this;
-}
-
-PythonType &PythonType::supportNumberType( int methods_to_support )
-{
- if( !number_table )
- {
- number_table = new PyNumberMethods;
- memset( number_table, 0, sizeof( PyNumberMethods ) ); // ensure new fields are 0
- table->tp_as_number = number_table;
- number_table->nb_coerce = 0;
-
- if( methods_to_support&support_number_add )
- {
- number_table->nb_add = number_add_handler;
- }
- if( methods_to_support&support_number_subtract )
- {
- number_table->nb_subtract = number_subtract_handler;
- }
- if( methods_to_support&support_number_multiply )
- {
- number_table->nb_multiply = number_multiply_handler;
- }
- if( methods_to_support&support_number_divide )
- {
- number_table->nb_divide = number_divide_handler;
- }
- if( methods_to_support&support_number_remainder )
- {
- number_table->nb_remainder = number_remainder_handler;
- }
- if( methods_to_support&support_number_divmod )
- {
- number_table->nb_divmod = number_divmod_handler;
- }
- if( methods_to_support&support_number_power )
- {
- number_table->nb_power = number_power_handler;
- }
- if( methods_to_support&support_number_negative )
- {
- number_table->nb_negative = number_negative_handler;
- }
- if( methods_to_support&support_number_positive )
- {
- number_table->nb_positive = number_positive_handler;
- }
- if( methods_to_support&support_number_absolute )
- {
- number_table->nb_absolute = number_absolute_handler;
- }
- if( methods_to_support&support_number_nonzero )
- {
- number_table->nb_nonzero = number_nonzero_handler;
- }
- if( methods_to_support&support_number_invert )
- {
- number_table->nb_invert = number_invert_handler;
- }
- if( methods_to_support&support_number_lshift )
- {
- number_table->nb_lshift = number_lshift_handler;
- }
- if( methods_to_support&support_number_rshift )
- {
- number_table->nb_rshift = number_rshift_handler;
- }
- if( methods_to_support&support_number_and )
- {
- number_table->nb_and = number_and_handler;
- }
- if( methods_to_support&support_number_xor )
- {
- number_table->nb_xor = number_xor_handler;
- }
- if( methods_to_support&support_number_or )
- {
- number_table->nb_or = number_or_handler;
- }
- if( methods_to_support&support_number_int )
- {
- number_table->nb_int = number_int_handler;
- }
- if( methods_to_support&support_number_long )
- {
- number_table->nb_long = number_long_handler;
- }
- if( methods_to_support&support_number_float )
- {
- number_table->nb_float = number_float_handler;
- }
- if( methods_to_support&support_number_oct )
- {
- number_table->nb_oct = number_oct_handler;
- }
- if( methods_to_support&support_number_hex )
- {
- number_table->nb_hex = number_hex_handler;
- }
- }
- return *this;
-}
-
-PythonType &PythonType::supportBufferType( int methods_to_support )
-{
- if( !buffer_table )
- {
- buffer_table = new PyBufferProcs;
- memset( buffer_table, 0, sizeof( PyBufferProcs ) ); // ensure new fields are 0
- table->tp_as_buffer = buffer_table;
-
- if( methods_to_support&support_buffer_getreadbuffer )
- {
- buffer_table->bf_getreadbuffer = buffer_getreadbuffer_handler;
- }
- if( methods_to_support&support_buffer_getwritebuffer )
- {
- buffer_table->bf_getwritebuffer = buffer_getwritebuffer_handler;
- }
- if( methods_to_support&support_buffer_getsegcount )
- {
- buffer_table->bf_getsegcount = buffer_getsegcount_handler;
- }
- }
- return *this;
-}
-
-//
-// if you define add methods that you hook. Use the hook_XXX to choice what to hook.
-//
-PythonType::PythonType( size_t basic_size, int itemsize, const char *default_name )
-: table( new PyTypeObject )
-, sequence_table( NULL )
-, mapping_table( NULL )
-, number_table( NULL )
-, buffer_table( NULL )
-{
- // PyTypeObject is defined in <python-sources>/Include/object.h
-
- memset( table, 0, sizeof( PyTypeObject ) ); // ensure new fields are 0
- *reinterpret_cast<PyObject *>( table ) = py_object_initializer;
- table->ob_type = _Type_Type();
- table->ob_size = 0;
-
- table->tp_name = const_cast<char *>( default_name );
- table->tp_basicsize = basic_size;
- table->tp_itemsize = itemsize;
-
- // Methods to implement standard operations
- table->tp_dealloc = (destructor)standard_dealloc;
- table->tp_print = 0;
- table->tp_getattr = 0;
- table->tp_setattr = 0;
- table->tp_compare = 0;
- table->tp_repr = 0;
-
- // Method suites for standard classes
- table->tp_as_number = 0;
- table->tp_as_sequence = 0;
- table->tp_as_mapping = 0;
-
- // More standard operations (here for binary compatibility)
- table->tp_hash = 0;
- table->tp_call = 0;
- table->tp_str = 0;
- table->tp_getattro = 0;
- table->tp_setattro = 0;
-
- // Functions to access object as input/output buffer
- table->tp_as_buffer = 0;
-
- // Flags to define presence of optional/expanded features
- table->tp_flags = Py_TPFLAGS_DEFAULT;
-
- // Documentation string
- table->tp_doc = 0;
-
-#if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 0)
- table->tp_traverse = 0L;
-
- // delete references to contained objects
- table->tp_clear = 0L;
-#else
- table->tp_xxx5 = 0L;
- table->tp_xxx6 = 0L;
-#endif
-#if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 1)
- // first defined in 2.1
- table->tp_richcompare = 0L;
- // weak reference enabler
- table->tp_weaklistoffset = 0L;
-#else
- table->tp_xxx7 = 0L;
- table->tp_xxx8 = 0L;
-#endif
-#if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 2)
- // first defined in 2.3
- // Iterators
- table->tp_iter = 0L;
- table->tp_iternext = 0L;
-#endif
-#ifdef COUNT_ALLOCS
- table->tp_alloc = 0;
- table->tp_free = 0;
- table->tp_maxalloc = 0;
- table->tp_next = 0;
-#endif
-}
-
-PythonType::~PythonType()
-{
- delete table;
- delete sequence_table;
- delete mapping_table;
- delete number_table;
- delete buffer_table;
-}
-
-PyTypeObject *PythonType::type_object() const
-{
- return table;
-}
-
-PythonType &PythonType::name( const char *nam )
-{
- table->tp_name = const_cast<char *>( nam );
- return *this;
-}
-
-const char *PythonType::getName() const
-{
- return table->tp_name;
-}
-
-PythonType &PythonType::doc( const char *d )
-{
- table->tp_doc = const_cast<char *>( d );
- return *this;
-}
-
-const char *PythonType::getDoc() const
-{
- return table->tp_doc;
-}
-
-PythonType &PythonType::set_tp_dealloc( void (*tp_dealloc)( PyObject *self ) )
-{
- table->tp_dealloc = tp_dealloc;
- return *this;
-}
-
-PythonType &PythonType::set_tp_init( int (*tp_init)( PyObject *self, PyObject *args, PyObject *kwds ) )
-{
- table->tp_init = tp_init;
- return *this;
-}
-
-PythonType &PythonType::set_tp_new( PyObject *(*tp_new)( PyTypeObject *subtype, PyObject *args, PyObject *kwds ) )
-{
- table->tp_new = tp_new;
- return *this;
-}
-
-PythonType &PythonType::set_methods( PyMethodDef *methods )
-{
- table->tp_methods = methods;
- return *this;
-}
-
-PythonType &PythonType::supportClass()
-{
- table->tp_flags |= Py_TPFLAGS_BASETYPE;
- return *this;
-}
-
-PythonType &PythonType::dealloc( void( *f )( PyObject * ))
-{
- table->tp_dealloc = f;
- return *this;
-}
-
-#if defined( PYCXX_PYTHON_2TO3 )
-PythonType &PythonType::supportPrint()
-{
- table->tp_print = print_handler;
- return *this;
-}
-#endif
-
-PythonType &PythonType::supportGetattr()
-{
- table->tp_getattr = getattr_handler;
- return *this;
-}
-
-PythonType &PythonType::supportSetattr()
-{
- table->tp_setattr = setattr_handler;
- return *this;
-}
-
-PythonType &PythonType::supportGetattro()
-{
- table->tp_getattro = getattro_handler;
- return *this;
-}
-
-PythonType &PythonType::supportSetattro()
-{
- table->tp_setattro = setattro_handler;
- return *this;
-}
-
-#if defined( PYCXX_PYTHON_2TO3 )
-PythonType &PythonType::supportCompare()
-{
- table->tp_compare = compare_handler;
- return *this;
-}
-#endif
-
-#if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 1)
-PythonType &PythonType::supportRichCompare()
-{
- table->tp_richcompare = rich_compare_handler;
- return *this;
-}
-#endif
-
-PythonType &PythonType::supportRepr()
-{
- table->tp_repr = repr_handler;
- return *this;
-}
-
-PythonType &PythonType::supportStr()
-{
- table->tp_str = str_handler;
- return *this;
-}
-
-PythonType &PythonType::supportHash()
-{
- table->tp_hash = hash_handler;
- return *this;
-}
-
-PythonType &PythonType::supportCall()
-{
- table->tp_call = call_handler;
- return *this;
-}
-
-PythonType &PythonType::supportIter( int methods_to_support )
-{
- if( methods_to_support&support_iter_iter )
- {
- table->tp_iter = iter_handler;
- }
- if( methods_to_support&support_iter_iternext )
- {
- table->tp_iternext = iternext_handler;
- }
- return *this;
-}
-
-//--------------------------------------------------------------------------------
-//
-// Handlers
-//
-//--------------------------------------------------------------------------------
-PythonExtensionBase *getPythonExtensionBase( PyObject *self )
-{
- if( self->ob_type->tp_flags&Py_TPFLAGS_BASETYPE )
- {
- PythonClassInstance *instance = reinterpret_cast<PythonClassInstance *>( self );
- return instance->m_pycxx_object;
- }
- else
- {
- return static_cast<PythonExtensionBase *>( self );
- }
-}
-
-
-#if defined( PYCXX_PYTHON_2TO3 )
-extern "C" int print_handler( PyObject *self, FILE *fp, int flags )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->print( fp, flags );
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-#endif
-
-extern "C" PyObject *getattr_handler( PyObject *self, char *name )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->getattr( name ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" int setattr_handler( PyObject *self, char *name, PyObject *value )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->setattr( name, Object( value ) );
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-extern "C" PyObject *getattro_handler( PyObject *self, PyObject *name )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->getattro( String( name ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" int setattro_handler( PyObject *self, PyObject *name, PyObject *value )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->setattro( String( name ), Object( value ) );
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-#if defined( PYCXX_PYTHON_2TO3 )
-extern "C" int compare_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->compare( Object( other ) );
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-#endif
-
-#if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 1)
-extern "C" PyObject *rich_compare_handler( PyObject *self, PyObject *other, int op )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->rich_compare( Object( other ), op ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-#endif
-
-extern "C" PyObject *repr_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->repr() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *str_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->str() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" long hash_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->hash();
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-extern "C" PyObject *call_handler( PyObject *self, PyObject *args, PyObject *kw )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- if( kw != NULL )
- return new_reference_to( p->call( Object( args ), Object( kw ) ) );
- else
- return new_reference_to( p->call( Object( args ), Object() ) );
- }
-
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *iter_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->iter() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *iternext_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->iternext(); // might be a NULL ptr on end of iteration
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-// Sequence methods
-extern "C" Py_ssize_t sequence_length_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->sequence_length();
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-extern "C" PyObject *sequence_concat_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->sequence_concat( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *sequence_repeat_handler( PyObject *self, Py_ssize_t count )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->sequence_repeat( count ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *sequence_item_handler( PyObject *self, Py_ssize_t index )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->sequence_item( index ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *sequence_slice_handler( PyObject *self, Py_ssize_t first, Py_ssize_t last )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->sequence_slice( first, last ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" int sequence_ass_item_handler( PyObject *self, Py_ssize_t index, PyObject *value )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->sequence_ass_item( index, Object( value ) );
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-extern "C" int sequence_ass_slice_handler( PyObject *self, Py_ssize_t first, Py_ssize_t last, PyObject *value )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->sequence_ass_slice( first, last, Object( value ) );
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-extern "C" PyObject *sequence_inplace_concat_handler( PyObject *self, PyObject *o2 )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->sequence_inplace_concat( Object( o2 ) ) );
- }
- catch( BaseException & )
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *sequence_inplace_repeat_handler( PyObject *self, Py_ssize_t count )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->sequence_inplace_repeat( count ) );
- }
- catch( BaseException & )
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" int sequence_contains_handler( PyObject *self, PyObject *value )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->sequence_contains( Object( value ) );
- }
- catch( BaseException & )
- {
- return -1; // indicate error
- }
-}
-
-// Mapping
-extern "C" Py_ssize_t mapping_length_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->mapping_length();
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-extern "C" PyObject *mapping_subscript_handler( PyObject *self, PyObject *key )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->mapping_subscript( Object( key ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" int mapping_ass_subscript_handler( PyObject *self, PyObject *key, PyObject *value )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->mapping_ass_subscript( Object( key ), Object( value ) );
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-// Number
-extern "C" int number_nonzero_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->number_nonzero();
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-extern "C" PyObject *number_negative_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_negative() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_positive_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_positive() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_absolute_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_absolute() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_invert_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_invert() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_int_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_int() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_float_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_float() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_long_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_long() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_oct_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_oct() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_hex_handler( PyObject *self )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_hex() );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_add_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_add( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_subtract_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_subtract( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_multiply_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_multiply( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_divide_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_divide( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_remainder_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_remainder( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_divmod_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_divmod( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_lshift_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_lshift( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_rshift_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_rshift( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_and_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_and( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_xor_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_xor( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_or_handler( PyObject *self, PyObject *other )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_or( Object( other ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-extern "C" PyObject *number_power_handler( PyObject *self, PyObject *x1, PyObject *x2 )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return new_reference_to( p->number_power( Object( x1 ), Object( x2 ) ) );
- }
- catch( BaseException &)
- {
- return NULL; // indicate error
- }
-}
-
-// Buffer
-extern "C" Py_ssize_t buffer_getreadbuffer_handler( PyObject *self, Py_ssize_t index, void **pp )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->buffer_getreadbuffer( index, pp );
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-extern "C" Py_ssize_t buffer_getwritebuffer_handler( PyObject *self, Py_ssize_t index, void **pp )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->buffer_getwritebuffer( index, pp );
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-extern "C" Py_ssize_t buffer_getsegcount_handler( PyObject *self, Py_ssize_t *count )
-{
- try
- {
- PythonExtensionBase *p = getPythonExtensionBase( self );
- return p->buffer_getsegcount( count );
- }
- catch( BaseException &)
- {
- return -1; // indicate error
- }
-}
-
-//================================================================================
-//
-// Implementation of PythonExtensionBase
-//
-//================================================================================
-#define missing_method( method ) \
- throw RuntimeError( "Extension object missing implement of " #method );
-
-PythonExtensionBase::PythonExtensionBase()
-{
- ob_refcnt = 0;
-}
-
-PythonExtensionBase::~PythonExtensionBase()
-{
- assert( ob_refcnt == 0 );
-}
-
-Object PythonExtensionBase::callOnSelf( const std::string &fn_name )
-{
- TupleN args;
- return self().callMemberFunction( fn_name, args );
-}
-
-Object PythonExtensionBase::callOnSelf( const std::string &fn_name,
- const Object &arg1 )
-{
- TupleN args( arg1 );
- return self().callMemberFunction( fn_name, args );
-}
-
-Object PythonExtensionBase::callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2 )
-{
- TupleN args( arg1, arg2 );
- return self().callMemberFunction( fn_name, args );
-}
-
-Object PythonExtensionBase::callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3 )
-{
- TupleN args( arg1, arg2, arg3 );
- return self().callMemberFunction( fn_name, args );
-}
-
-Object PythonExtensionBase::callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4 )
-{
- TupleN args( arg1, arg2, arg3, arg4 );
- return self().callMemberFunction( fn_name, args );
-}
-
-Object PythonExtensionBase::callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4, const Object &arg5 )
-{
- TupleN args( arg1, arg2, arg3, arg4, arg5 );
- return self().callMemberFunction( fn_name, args );
-}
-
-Object PythonExtensionBase::callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4, const Object &arg5, const Object &arg6 )
-{
- TupleN args( arg1, arg2, arg3, arg4, arg5, arg6 );
- return self().callMemberFunction( fn_name, args );
-}
-
-Object PythonExtensionBase::callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4, const Object &arg5, const Object &arg6,
- const Object &arg7 )
-{
- TupleN args( arg1, arg2, arg3, arg4, arg5, arg6, arg7 );
- return self().callMemberFunction( fn_name, args );
-}
-
-Object PythonExtensionBase::callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4, const Object &arg5, const Object &arg6,
- const Object &arg7, const Object &arg8 )
-{
- TupleN args( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 );
- return self().callMemberFunction( fn_name, args );
-}
-
-Object PythonExtensionBase::callOnSelf( const std::string &fn_name,
- const Object &arg1, const Object &arg2, const Object &arg3,
- const Object &arg4, const Object &arg5, const Object &arg6,
- const Object &arg7, const Object &arg8, const Object &arg9 )
-{
- TupleN args( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9 );
- return self().callMemberFunction( fn_name, args );
-}
-
-void PythonExtensionBase::reinit( Tuple &/*args*/, Dict &/*kwds*/ )
-{
- throw RuntimeError( "Must not call __init__ twice on this class" );
-}
-
-Object PythonExtensionBase::genericGetAttro( const String &name )
-{
- return asObject( PyObject_GenericGetAttr( selfPtr(), name.ptr() ) );
-}
-
-int PythonExtensionBase::genericSetAttro( const String &name, const Object &value )
-{
- return PyObject_GenericSetAttr( selfPtr(), name.ptr(), value.ptr() );
-}
-
-int PythonExtensionBase::print( FILE *, int )
-{
- missing_method( print );
-}
-
-Object PythonExtensionBase::getattr( const char * )
-{
- missing_method( getattr );
-}
-
-int PythonExtensionBase::setattr( const char *, const Object &)
-{
- missing_method( setattr );
-}
-
-Object PythonExtensionBase::getattro( const String &name )
-{
- return genericGetAttro( name );
-}
-
-int PythonExtensionBase::setattro( const String &name, const Object &value )
-{
- return genericSetAttro( name, value );
-}
-
-int PythonExtensionBase::compare( const Object &)
-{
- missing_method( compare );
-}
-
-#if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 1)
-Object PythonExtensionBase::rich_compare( const Object &, int /*op*/ )
-{
- missing_method( rich_compare );
-}
-
-#endif
-Object PythonExtensionBase::repr()
-{
- missing_method( repr );
-}
-
-Object PythonExtensionBase::str()
-{
- missing_method( str );
-}
-
-long PythonExtensionBase::hash()
-{
- missing_method( hash );
-}
-
-Object PythonExtensionBase::call( const Object &, const Object &)
-{
- missing_method( call );
-}
-
-Object PythonExtensionBase::iter()
-{
- missing_method( iter );
-}
-
-PyObject *PythonExtensionBase::iternext()
-{
- missing_method( iternext );
-}
-
-// Sequence methods
-PyCxx_ssize_t PythonExtensionBase::sequence_length()
-{
- missing_method( sequence_length );
-}
-
-Object PythonExtensionBase::sequence_concat( const Object &)
-{
- missing_method( sequence_concat );
-}
-
-Object PythonExtensionBase::sequence_repeat( Py_ssize_t )
-{
- missing_method( sequence_repeat );
-}
-
-Object PythonExtensionBase::sequence_item( Py_ssize_t )
-{
- missing_method( sequence_item );
-}
-
-Object PythonExtensionBase::sequence_slice( Py_ssize_t, Py_ssize_t )
-{
- missing_method( sequence_slice );
-}
-
-int PythonExtensionBase::sequence_ass_item( Py_ssize_t, const Object &)
-{
- missing_method( sequence_ass_item );
-}
-
-int PythonExtensionBase::sequence_ass_slice( Py_ssize_t, Py_ssize_t, const Object &)
-{
- missing_method( sequence_ass_slice );
-}
-
-Object PythonExtensionBase::sequence_inplace_concat( const Object & )
-{
- missing_method( sequence_inplace_concat );
-}
-
-Object PythonExtensionBase::sequence_inplace_repeat( Py_ssize_t )
-{
- missing_method( sequence_inplace_repeat );
-}
-
-int PythonExtensionBase::sequence_contains( const Object & )
-{
- missing_method( sequence_contains );
-}
-
-// Mapping
-Sequence::size_type PythonExtensionBase::mapping_length()
-{
- missing_method( mapping_length );
-}
-
-Object PythonExtensionBase::mapping_subscript( const Object &)
-{
- missing_method( mapping_subscript );
-}
-
-int PythonExtensionBase::mapping_ass_subscript( const Object &, const Object &)
-{
- missing_method( mapping_ass_subscript );
-}
-
-// Number
-int PythonExtensionBase::number_nonzero()
-{
- missing_method( number_nonzero );
-}
-
-Object PythonExtensionBase::number_negative()
-{
- missing_method( number_negative );
-}
-
-Object PythonExtensionBase::number_positive()
-{
- missing_method( number_positive );
-}
-
-Object PythonExtensionBase::number_absolute()
-{
- missing_method( number_absolute );
-}
-
-Object PythonExtensionBase::number_invert()
-{
- missing_method( number_invert );
-}
-
-Object PythonExtensionBase::number_int()
-{
- missing_method( number_int );
-}
-
-Object PythonExtensionBase::number_float()
-{
- missing_method( number_float );
-}
-
-Object PythonExtensionBase::number_long()
-{
- missing_method( number_long );
-}
-
-Object PythonExtensionBase::number_oct()
-{
- missing_method( number_oct );
-}
-
-Object PythonExtensionBase::number_hex()
-{
- missing_method( number_hex );
-}
-
-Object PythonExtensionBase::number_add( const Object &)
-{
- missing_method( number_add );
-}
-
-Object PythonExtensionBase::number_subtract( const Object &)
-{
- missing_method( number_subtract );
-}
-
-Object PythonExtensionBase::number_multiply( const Object &)
-{
- missing_method( number_multiply );
-}
-
-Object PythonExtensionBase::number_divide( const Object &)
-{
- missing_method( number_divide );
-}
-
-Object PythonExtensionBase::number_remainder( const Object &)
-{
- missing_method( number_remainder );
-}
-
-Object PythonExtensionBase::number_divmod( const Object &)
-{
- missing_method( number_divmod );
-}
-
-Object PythonExtensionBase::number_lshift( const Object &)
-{
- missing_method( number_lshift );
-}
-
-Object PythonExtensionBase::number_rshift( const Object &)
-{
- missing_method( number_rshift );
-}
-
-Object PythonExtensionBase::number_and( const Object &)
-{
- missing_method( number_and );
-}
-
-Object PythonExtensionBase::number_xor( const Object &)
-{
- missing_method( number_xor );
-}
-
-Object PythonExtensionBase::number_or( const Object &)
-{
- missing_method( number_or );
-}
-
-Object PythonExtensionBase::number_power( const Object &, const Object &)
-{
- missing_method( number_power );
-}
-
-// Buffer
-Py_ssize_t PythonExtensionBase::buffer_getreadbuffer( Py_ssize_t, void** )
-{
- missing_method( buffer_getreadbuffer );
-}
-
-Py_ssize_t PythonExtensionBase::buffer_getwritebuffer( Py_ssize_t, void** )
-{
- missing_method( buffer_getwritebuffer );
-}
-
-Py_ssize_t PythonExtensionBase::buffer_getsegcount( Py_ssize_t* )
-{
- missing_method( buffer_getsegcount );
-}
-
-//--------------------------------------------------------------------------------
-//
-// Method call handlers for
-// PythonExtensionBase
-// ExtensionModuleBase
-//
-//--------------------------------------------------------------------------------
-extern "C" PyObject *method_noargs_call_handler( PyObject *_self_and_name_tuple, PyObject * )
-{
- try
- {
- Tuple self_and_name_tuple( _self_and_name_tuple );
-
- PyObject *self_in_cobject = self_and_name_tuple[0].ptr();
- void *self_as_void = PyCObject_AsVoidPtr( self_in_cobject );
- if( self_as_void == NULL )
- return NULL;
-
- ExtensionModuleBase *self = static_cast<ExtensionModuleBase *>( self_as_void );
-
- Object result( self->invoke_method_noargs( PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ) ) );
-
- return new_reference_to( result.ptr() );
- }
- catch( BaseException & )
- {
- return 0;
- }
-}
-
-extern "C" PyObject *method_varargs_call_handler( PyObject *_self_and_name_tuple, PyObject *_args )
-{
- try
- {
- Tuple self_and_name_tuple( _self_and_name_tuple );
-
- PyObject *self_in_cobject = self_and_name_tuple[0].ptr();
- void *self_as_void = PyCObject_AsVoidPtr( self_in_cobject );
- if( self_as_void == NULL )
- return NULL;
-
- ExtensionModuleBase *self = static_cast<ExtensionModuleBase *>( self_as_void );
- Tuple args( _args );
-
- Object result
- (
- self->invoke_method_varargs
- (
- PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ),
- args
- )
- );
-
- return new_reference_to( result.ptr() );
- }
- catch( BaseException & )
- {
- return 0;
- }
-}
-
-extern "C" PyObject *method_keyword_call_handler( PyObject *_self_and_name_tuple, PyObject *_args, PyObject *_keywords )
-{
- try
- {
- Tuple self_and_name_tuple( _self_and_name_tuple );
-
- PyObject *self_in_cobject = self_and_name_tuple[0].ptr();
- void *self_as_void = PyCObject_AsVoidPtr( self_in_cobject );
- if( self_as_void == NULL )
- return NULL;
-
- ExtensionModuleBase *self = static_cast<ExtensionModuleBase *>( self_as_void );
-
- Tuple args( _args );
-
- if( _keywords == NULL )
- {
- Dict keywords; // pass an empty dict
-
- Object result
- (
- self->invoke_method_keyword
- (
- PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ),
- args,
- keywords
- )
- );
-
- return new_reference_to( result.ptr() );
- }
- else
- {
- Dict keywords( _keywords ); // make dict
-
- Object result
- (
- self->invoke_method_keyword
- (
- PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ),
- args,
- keywords
- )
- );
-
- return new_reference_to( result.ptr() );
- }
- }
- catch( BaseException & )
- {
- return 0;
- }
-}
-
-
-extern "C" void do_not_dealloc( void * )
-{}
-
-//--------------------------------------------------------------------------------
-//
-// ExtensionExceptionType
-//
-//--------------------------------------------------------------------------------
-ExtensionExceptionType::ExtensionExceptionType()
-: Object()
-{
-}
-
-void ExtensionExceptionType::init( ExtensionModuleBase &module, const std::string& name )
-{
- std::string module_name( module.fullName() );
- module_name += ".";
- module_name += name;
- set( PyErr_NewException( const_cast<char *>( module_name.c_str() ), NULL, NULL ), true );
-}
-
-void ExtensionExceptionType::init( ExtensionModuleBase &module, const std::string& name, ExtensionExceptionType &parent)
-{
- std::string module_name( module.fullName() );
- module_name += ".";
- module_name += name;
- set( PyErr_NewException( const_cast<char *>( module_name.c_str() ), parent.ptr(), NULL ), true );
-}
-
-ExtensionExceptionType::~ExtensionExceptionType()
-{
-}
-
-// ------------------------------------------------------------
-//
-// BaseException
-//
-//------------------------------------------------------------
-BaseException::BaseException( ExtensionExceptionType &exception, const std::string &reason )
- : reasonMessage(reason)
-{
- PyErr_SetString( exception.ptr(), reason.c_str() );
-}
-
-BaseException::BaseException( ExtensionExceptionType &exception, Object &reason )
-{
- if (reason.hasAttr("message")) {
- reasonMessage = reason.getAttr("message").str();
- }
- PyErr_SetObject( exception.ptr(), reason.ptr() );
-}
-
-BaseException::BaseException( ExtensionExceptionType &exception, PyObject *reason )
-{
- PyErr_SetObject( exception.ptr(), reason );
-}
-
-BaseException::BaseException( PyObject *exception, Object &reason )
-{
- if (reason.hasAttr("message")) {
- reasonMessage = reason.getAttr("message").str();
- }
- PyErr_SetObject( exception, reason.ptr() );
-}
-
-BaseException::BaseException( PyObject *exception, PyObject *reason )
-{
- PyErr_SetObject( exception, reason );
-}
-
-BaseException::BaseException( PyObject *exception, const std::string &reason )
- : reasonMessage(reason)
-{
- PyErr_SetString( exception, reason.c_str() );
-}
-
-BaseException::BaseException()
-{}
-
-void BaseException::clear()
-{
- PyErr_Clear();
-}
-
-const char* BaseException::what() const noexcept
-{
- return reasonMessage.c_str();
-}
-
-bool BaseException::matches( ExtensionExceptionType &exc )
-// is the exception this specific exception 'exc'
-{
- return PyErr_ExceptionMatches( exc.ptr() ) != 0;
-}
-
-} // end of namespace Py
diff --git a/contrib/libs/pycxx/Python2/cxx_standard_exceptions.hxx b/contrib/libs/pycxx/Python2/cxx_standard_exceptions.hxx
deleted file mode 100644
index 9065b33d80a..00000000000
--- a/contrib/libs/pycxx/Python2/cxx_standard_exceptions.hxx
+++ /dev/null
@@ -1,46 +0,0 @@
-#if !defined( PYCXX_STANDARD_EXCEPTION )
-#pragma error( "define PYCXX_STANDARD_EXCEPTION before including" )
-#endif
-
-PYCXX_STANDARD_EXCEPTION( SystemExit, BaseException )
-PYCXX_STANDARD_EXCEPTION( KeyboardInterrupt,BaseException )
-PYCXX_STANDARD_EXCEPTION( GeneratorExit, BaseException )
-#if !defined( PYCXX_6_2_COMPATIBILITY )
-PYCXX_STANDARD_EXCEPTION( Exception, BaseException )
-#endif
-PYCXX_STANDARD_EXCEPTION( StopIteration, Exception )
-PYCXX_STANDARD_EXCEPTION( StandardError, Exception )
-PYCXX_STANDARD_EXCEPTION( BufferError, StandardError )
-PYCXX_STANDARD_EXCEPTION( ArithmeticError, StandardError )
-PYCXX_STANDARD_EXCEPTION( FloatingPointError, ArithmeticError )
-PYCXX_STANDARD_EXCEPTION( OverflowError, ArithmeticError )
-PYCXX_STANDARD_EXCEPTION( ZeroDivisionError, ArithmeticError )
-PYCXX_STANDARD_EXCEPTION( AssertionError, StandardError )
-PYCXX_STANDARD_EXCEPTION( AttributeError, StandardError )
-PYCXX_STANDARD_EXCEPTION( EnvironmentError, StandardError )
-PYCXX_STANDARD_EXCEPTION( IOError, EnvironmentError )
-PYCXX_STANDARD_EXCEPTION( OSError, EnvironmentError )
-#ifdef MS_WINDOWS
-PYCXX_STANDARD_EXCEPTION( WindowsError, OSError )
-#endif
-PYCXX_STANDARD_EXCEPTION( EOFError, StandardError )
-PYCXX_STANDARD_EXCEPTION( ImportError, StandardError )
-PYCXX_STANDARD_EXCEPTION( LookupError, StandardError )
-PYCXX_STANDARD_EXCEPTION( IndexError, LookupError )
-PYCXX_STANDARD_EXCEPTION( KeyError, LookupError )
-PYCXX_STANDARD_EXCEPTION( MemoryError, StandardError )
-PYCXX_STANDARD_EXCEPTION( NameError, StandardError )
-PYCXX_STANDARD_EXCEPTION( UnboundLocalError,NameError )
-PYCXX_STANDARD_EXCEPTION( ReferenceError, StandardError )
-PYCXX_STANDARD_EXCEPTION( RuntimeError, StandardError )
-PYCXX_STANDARD_EXCEPTION( NotImplementedError, RuntimeError )
-PYCXX_STANDARD_EXCEPTION( SyntaxError, StandardError )
-PYCXX_STANDARD_EXCEPTION( IndentationError, SyntaxError )
-PYCXX_STANDARD_EXCEPTION( TabError, IndentationError )
-PYCXX_STANDARD_EXCEPTION( SystemError, StandardError )
-PYCXX_STANDARD_EXCEPTION( TypeError, StandardError )
-PYCXX_STANDARD_EXCEPTION( ValueError, StandardError )
-PYCXX_STANDARD_EXCEPTION( UnicodeError, ValueError )
-PYCXX_STANDARD_EXCEPTION( UnicodeDecodeError, UnicodeError )
-PYCXX_STANDARD_EXCEPTION( UnicodeEncodeError, UnicodeError )
-PYCXX_STANDARD_EXCEPTION( UnicodeTranslateError,UnicodeError )
diff --git a/contrib/libs/pycxx/Python2/cxxextensions.c b/contrib/libs/pycxx/Python2/cxxextensions.c
deleted file mode 100644
index 20278664840..00000000000
--- a/contrib/libs/pycxx/Python2/cxxextensions.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//---------------------------------------------------------------------------*/
-
-#include "../WrapPython.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-PyObject py_object_initializer = {PyObject_HEAD_INIT(0)};
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/contrib/libs/pycxx/Python2/cxxsupport.cxx b/contrib/libs/pycxx/Python2/cxxsupport.cxx
deleted file mode 100644
index 96891564b75..00000000000
--- a/contrib/libs/pycxx/Python2/cxxsupport.cxx
+++ /dev/null
@@ -1,174 +0,0 @@
-//-----------------------------------------------------------------------------
-//
-// Copyright (c) 1998 - 2007, The Regents of the University of California
-// Produced at the Lawrence Livermore National Laboratory
-// All rights reserved.
-//
-// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
-// full copyright notice is contained in the file COPYRIGHT located at the root
-// of the PyCXX distribution.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// - Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the disclaimer below.
-// - Redistributions in binary form must reproduce the above copyright notice,
-// this list of conditions and the disclaimer (as noted below) in the
-// documentation and/or materials provided with the distribution.
-// - Neither the name of the UC/LLNL nor the names of its contributors may be
-// used to endorse or promote products derived from this software without
-// specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
-// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
-// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-// DAMAGE.
-//
-//-----------------------------------------------------------------------------
-
-#include "../Objects.hxx"
-namespace Py {
-
-Py_UNICODE unicode_null_string[1] = { 0 };
-
-Type Object::type () const
-{
- return Type (PyObject_Type (p), true);
-}
-
-String Object::str () const
-{
- return String (PyObject_Str (p), true);
-}
-
-String Object::repr () const
-{
- return String (PyObject_Repr (p), true);
-}
-
-std::string Object::as_string() const
-{
- return static_cast<std::string>(str());
-}
-
-List Object::dir () const
- {
- return List (PyObject_Dir (p), true);
- }
-
-bool Object::isType (const Type& t) const
-{
- return type ().ptr() == t.ptr();
-}
-
-Char::operator String() const
-{
- return String(ptr());
-}
-
-// TMM: non-member operaters for iterators - see above
-// I've also made a bug fix in respect to the cxx code
-// (dereffed the left.seq and right.seq comparison)
-bool operator==(const Sequence::iterator& left, const Sequence::iterator& right)
-{
- return left.eql( right );
-}
-
-bool operator!=(const Sequence::iterator& left, const Sequence::iterator& right)
-{
- return left.neq( right );
-}
-
-bool operator< (const Sequence::iterator& left, const Sequence::iterator& right)
-{
- return left.lss( right );
-}
-
-bool operator> (const Sequence::iterator& left, const Sequence::iterator& right)
-{
- return left.gtr( right );
-}
-
-bool operator<=(const Sequence::iterator& left, const Sequence::iterator& right)
-{
- return left.leq( right );
-}
-
-bool operator>=(const Sequence::iterator& left, const Sequence::iterator& right)
-{
- return left.geq( right );
-}
-
-// now for const_iterator
-bool operator==(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
-{
- return left.eql( right );
-}
-
-bool operator!=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
-{
- return left.neq( right );
-}
-
-bool operator< (const Sequence::const_iterator& left, const Sequence::const_iterator& right)
-{
- return left.lss( right );
-}
-
-bool operator> (const Sequence::const_iterator& left, const Sequence::const_iterator& right)
-{
- return left.gtr( right );
-}
-
-bool operator<=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
-{
- return left.leq( right );
-}
-
-bool operator>=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
-{
- return left.geq( right );
-}
-
-// For mappings:
-bool operator==(const Mapping::iterator& left, const Mapping::iterator& right)
-{
- return left.eql( right );
-}
-
-bool operator!=(const Mapping::iterator& left, const Mapping::iterator& right)
-{
- return left.neq( right );
-}
-
-// now for const_iterator
-bool operator==(const Mapping::const_iterator& left, const Mapping::const_iterator& right)
-{
- return left.eql( right );
-}
-
-bool operator!=(const Mapping::const_iterator& left, const Mapping::const_iterator& right)
-{
- return left.neq( right );
-}
-
-// TMM: 31May'01 - Added the #ifndef so I can exclude iostreams.
-#ifndef CXX_NO_IOSTREAMS
-// output
-
-std::ostream& operator<< (std::ostream& os, const Object& ob)
-{
- return (os << static_cast<std::string>(ob.str()));
-}
-#endif
-
-} // Py