aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/pycxx/Python3/Extensions.hxx
diff options
context:
space:
mode:
authorqrort <qrort@yandex-team.com>2022-11-30 23:47:12 +0300
committerqrort <qrort@yandex-team.com>2022-11-30 23:47:12 +0300
commit22f8ae0e3f5d68b92aecccdf96c1d841a0334311 (patch)
treebffa27765faf54126ad44bcafa89fadecb7a73d7 /contrib/libs/pycxx/Python3/Extensions.hxx
parent332b99e2173f0425444abb759eebcb2fafaa9209 (diff)
downloadydb-22f8ae0e3f5d68b92aecccdf96c1d841a0334311.tar.gz
validate canons without yatest_common
Diffstat (limited to 'contrib/libs/pycxx/Python3/Extensions.hxx')
-rwxr-xr-xcontrib/libs/pycxx/Python3/Extensions.hxx189
1 files changed, 189 insertions, 0 deletions
diff --git a/contrib/libs/pycxx/Python3/Extensions.hxx b/contrib/libs/pycxx/Python3/Extensions.hxx
new file mode 100755
index 00000000000..42516eb1c64
--- /dev/null
+++ b/contrib/libs/pycxx/Python3/Extensions.hxx
@@ -0,0 +1,189 @@
+//-----------------------------------------------------------------------------
+//
+// 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