aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/libshiboken/basewrapper.h
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken2/libshiboken/basewrapper.h')
-rw-r--r--sources/shiboken2/libshiboken/basewrapper.h467
1 files changed, 0 insertions, 467 deletions
diff --git a/sources/shiboken2/libshiboken/basewrapper.h b/sources/shiboken2/libshiboken/basewrapper.h
deleted file mode 100644
index a4a8629fb..000000000
--- a/sources/shiboken2/libshiboken/basewrapper.h
+++ /dev/null
@@ -1,467 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt for Python.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef BASEWRAPPER_H
-#define BASEWRAPPER_H
-
-#include "sbkpython.h"
-#include "shibokenmacros.h"
-
-#include <vector>
-#include <string>
-
-extern "C"
-{
-
-struct SbkConverter;
-struct SbkObjectPrivate;
-
-/// Base Python object for all the wrapped C++ classes.
-struct LIBSHIBOKEN_API SbkObject
-{
- PyObject_HEAD
- /// Instance dictionary.
- PyObject *ob_dict;
- /// List of weak references
- PyObject *weakreflist;
- SbkObjectPrivate *d;
-};
-
-
-/// PYSIDE-939: A general replacement for object_dealloc.
-LIBSHIBOKEN_API void Sbk_object_dealloc(PyObject *self);
-
-/// Dealloc the python object \p pyObj and the C++ object represented by it.
-LIBSHIBOKEN_API void SbkDeallocWrapper(PyObject *pyObj);
-LIBSHIBOKEN_API void SbkDeallocQAppWrapper(PyObject *pyObj);
-LIBSHIBOKEN_API void SbkDeallocWrapperWithPrivateDtor(PyObject *self);
-
-struct SbkObjectType;
-
-/// Function signature for the multiple inheritance information initializers that should be provided by classes with multiple inheritance.
-typedef int *(*MultipleInheritanceInitFunction)(const void *);
-
-/**
- * Special cast function is used to correctly cast an object when it's
- * part of a multiple inheritance hierarchy.
- * The implementation of this function is auto generated by the generator and you don't need to care about it.
- */
-typedef void *(*SpecialCastFunction)(void *, SbkObjectType *);
-typedef SbkObjectType *(*TypeDiscoveryFunc)(void *, SbkObjectType *);
-typedef void *(*TypeDiscoveryFuncV2)(void *, SbkObjectType *);
-
-// Used in userdata dealloc function
-typedef void (*DeleteUserDataFunc)(void *);
-
-typedef void (*ObjectDestructor)(void *);
-
-typedef void (*SubTypeInitHook)(SbkObjectType *, PyObject *, PyObject *);
-
-typedef PyObject *(*SelectableFeatureHook)(PyTypeObject *);
-LIBSHIBOKEN_API void initSelectableFeature(SelectableFeatureHook func);
-
-extern LIBSHIBOKEN_API PyTypeObject *SbkObjectType_TypeF(void);
-extern LIBSHIBOKEN_API SbkObjectType *SbkObject_TypeF(void);
-
-
-struct SbkObjectTypePrivate;
-/// PyTypeObject extended with C++ multiple inheritance information.
-struct LIBSHIBOKEN_API SbkObjectType
-{
- PyTypeObject type;
-};
-
-LIBSHIBOKEN_API PyObject *SbkObjectTpNew(PyTypeObject *subtype, PyObject *, PyObject *);
-// the special case of a switchable singleton
-LIBSHIBOKEN_API PyObject *SbkQAppTpNew(PyTypeObject *subtype, PyObject *args, PyObject *kwds);
-
-/**
- * PYSIDE-832: Use object_dealloc instead of nullptr.
- *
- * When moving to heaptypes, we were struck by a special default behavior of
- * PyType_FromSpecWithBases that inserts subtype_dealloc when tp_dealloc is
- * nullptr. But the default before conversion to heaptypes was to assign
- * object_dealloc. This seems to be a bug in the Limited API.
- */
-/// PYSIDE-939: Replaced by Sbk_object_dealloc.
-LIBSHIBOKEN_API PyObject *SbkDummyNew(PyTypeObject *type, PyObject *, PyObject *);
-
-/// PYSIDE-1286: Generate correct __module__ and __qualname__
-LIBSHIBOKEN_API PyObject *SbkType_FromSpec(PyType_Spec *);
-LIBSHIBOKEN_API PyObject *SbkType_FromSpecWithBases(PyType_Spec *, PyObject *);
-
-} // extern "C"
-
-namespace Shiboken
-{
-
-/**
-* Init shiboken library.
-*/
-LIBSHIBOKEN_API void init();
-
-
-/// Delete the class T allocated on \p cptr.
-template<typename T>
-void callCppDestructor(void *cptr)
-{
- delete reinterpret_cast<T *>(cptr);
-}
-
-// setErrorAboutWrongArguments now gets overload info from the signature module.
-LIBSHIBOKEN_API void setErrorAboutWrongArguments(PyObject *args, const char *funcName);
-
-namespace ObjectType {
-
-/**
-* Returns true if the object is an instance of a type created by the Shiboken generator.
-*/
-LIBSHIBOKEN_API bool checkType(PyTypeObject *pyObj);
-
-/**
-* Returns true if this object is an instance of an user defined type derived from an Shiboken type.
-*/
-LIBSHIBOKEN_API bool isUserType(PyTypeObject *pyObj);
-
-/**
-* Returns true if the constructor of \p ctorType can be called for a instance of type \p myType.
-* \note This function set a python error when returning false.
-*/
-LIBSHIBOKEN_API bool canCallConstructor(PyTypeObject *myType, PyTypeObject *ctorType);
-
-/**
- * Tells if the \p type represents an object of a class with multiple inheritance in C++.
- * When this occurs, the C++ pointer held by the Python wrapper will need to be cast when
- * passed as a parameter that expects a type of its ancestry.
- * \returns true if a call to ObjectType::cast() is needed to obtain the correct
- * C++ pointer for Python objects of type \p type.
- */
-LIBSHIBOKEN_API bool hasCast(SbkObjectType *type);
-/**
- * Cast the C++ pointer held by a Python object \p obj of type \p sourceType,
- * to a C++ pointer of a C++ class indicated by type \p targetType.
- * \returns The cast C++ pointer.
- */
-LIBSHIBOKEN_API void *cast(SbkObjectType *sourceType, SbkObject *obj, PyTypeObject *targetType);
-/// Set the C++ cast function for \p type.
-LIBSHIBOKEN_API void setCastFunction(SbkObjectType *type, SpecialCastFunction func);
-
-LIBSHIBOKEN_API void setOriginalName(SbkObjectType *self, const char *name);
-LIBSHIBOKEN_API const char *getOriginalName(SbkObjectType *self);
-
-LIBSHIBOKEN_API void setTypeDiscoveryFunctionV2(SbkObjectType *self, TypeDiscoveryFuncV2 func);
-LIBSHIBOKEN_API void copyMultipleInheritance(SbkObjectType *self, SbkObjectType *other);
-LIBSHIBOKEN_API void setMultipleInheritanceFunction(SbkObjectType *self, MultipleInheritanceInitFunction func);
-LIBSHIBOKEN_API MultipleInheritanceInitFunction getMultipleInheritanceFunction(SbkObjectType *self);
-
-LIBSHIBOKEN_API void setDestructorFunction(SbkObjectType *self, ObjectDestructor func);
-
-LIBSHIBOKEN_API void initPrivateData(SbkObjectType *self);
-
-enum WrapperFlags
-{
- InnerClass = 0x1,
- DeleteInMainThread = 0x2
-};
-
-/**
- * Initializes a Shiboken wrapper type and adds it to the module,
- * or to the enclosing class if the type is an inner class.
- * This function also calls initPrivateData and setDestructorFunction.
- * \param enclosingObject The module or enclosing class to where the new \p type will be added.
- * \param typeName Name by which the type will be known in Python.
- * \param originalName Original C++ name of the type.
- * \param type The new type to be initialized and added to the module.
- * \param cppObjDtor Memory deallocation function for the C++ object held by \p type.
- * Should not be used if the underlying C++ class has a private destructor.
- * \param baseType Base type from whom the new \p type inherits.
- * \param baseTypes Other base types from whom the new \p type inherits.
- * \param isInnerClass Tells if the new \p type is an inner class (the default is that it isn't).
- * If false then the \p enclosingObject is a module, otherwise it is another
- * wrapper type.
- * \returns true if the initialization went fine, false otherwise.
- */
-LIBSHIBOKEN_API SbkObjectType *introduceWrapperType(PyObject *enclosingObject,
- const char *typeName,
- const char *originalName,
- PyType_Spec *typeSpec,
- const char *signatureStrings[],
- ObjectDestructor cppObjDtor,
- SbkObjectType *baseType,
- PyObject *baseTypes,
- unsigned wrapperFlags = 0);
-
-/**
- * Set the subtype init hook for a type.
- *
- * This hook will be invoked every time the user creates a sub-type inherited from a Shiboken based type.
- * The hook gets 3 params, they are: The new type being created, args and kwds. The last two are the very
- * same got from tp_new.
- */
-LIBSHIBOKEN_API void setSubTypeInitHook(SbkObjectType *self, SubTypeInitHook func);
-
-/**
- * Get the user data previously set by Shiboken::Object::setTypeUserData
- */
-LIBSHIBOKEN_API void *getTypeUserData(SbkObjectType *self);
-LIBSHIBOKEN_API void setTypeUserData(SbkObjectType *self, void *userData, DeleteUserDataFunc d_func);
-
-/**
- * Return an instance of SbkObjectType for a C++ type name as determined by
- * typeinfo().name().
- * \param typeName Type name
- * \since 5.12
- */
-LIBSHIBOKEN_API SbkObjectType *typeForTypeName(const char *typeName);
-
-/**
- * Returns whether SbkObjectType has a special cast function (multiple inheritance)
- * \param sbkType Sbk type
- * \since 5.12
- */
-LIBSHIBOKEN_API bool hasSpecialCastFunction(SbkObjectType *sbkType);
-}
-
-namespace Object {
-
-/**
- * Returns a string with information about the internal state of the instance object, useful for debug purposes.
- */
-LIBSHIBOKEN_API std::string info(SbkObject *self);
-
-/**
-* Returns true if the object is an instance of a type created by the Shiboken generator.
-*/
-LIBSHIBOKEN_API bool checkType(PyObject *pyObj);
-
-/**
- * Returns true if this object type is an instance of an user defined type derived from an Shiboken type.
- * \see Shiboken::ObjectType::isUserType
- */
-LIBSHIBOKEN_API bool isUserType(PyObject *pyObj);
-
-/**
- * Generic function used to make ObjectType hashable, the C++ pointer is used as hash value.
- */
-LIBSHIBOKEN_API Py_hash_t hash(PyObject *pyObj);
-
-/**
- * Find a child of given wrapper having same address having the specified type.
- */
-LIBSHIBOKEN_API SbkObject *findColocatedChild(SbkObject *wrapper,
- const SbkObjectType *instanceType);
-
-/**
- * Bind a C++ object to Python.
- * \param instanceType equivalent Python type for the C++ object.
- * \param hasOwnership if true, Python will try to delete the underlying C++ object when there's no more refs.
- * \param isExactType if false, Shiboken will use some heuristics to detect the correct Python type of this C++
- * object, in any case you must provide \p instanceType, it'll be used as search starting point
- * and as fallback.
- * \param typeName If non-null, this will be used as helper to find the correct Python type for this object.
- */
-LIBSHIBOKEN_API PyObject *newObject(SbkObjectType *instanceType,
- void *cptr,
- bool hasOwnership = true,
- bool isExactType = false,
- const char *typeName = nullptr);
-
-/**
- * Changes the valid flag of a PyObject, invalid objects will raise an exception when someone tries to access it.
- */
-LIBSHIBOKEN_API void setValidCpp(SbkObject *pyObj, bool value);
-/**
- * Tells shiboken the Python object \p pyObj has a C++ wrapper used to intercept virtual method calls.
- */
-LIBSHIBOKEN_API void setHasCppWrapper(SbkObject *pyObj, bool value);
-/**
- * Return true if the Python object \p pyObj has a C++ wrapper used to intercept virtual method calls.
- */
-LIBSHIBOKEN_API bool hasCppWrapper(SbkObject *pyObj);
-
-/**
- * Return true if the Python object was created by Python, false otherwise.
- * \note This function was added to libshiboken only to be used by shiboken.wasCreatedByPython()
- */
-LIBSHIBOKEN_API bool wasCreatedByPython(SbkObject *pyObj);
-
-/**
- * Call the C++ object destructor and invalidates the Python object.
- * \note This function was added to libshiboken only to be used by shiboken.delete()
- */
-LIBSHIBOKEN_API void callCppDestructors(SbkObject *pyObj);
-
-/**
- * Return true if the Python is responsible for deleting the underlying C++ object.
- */
-LIBSHIBOKEN_API bool hasOwnership(SbkObject *pyObj);
-
-/**
- * Sets python as responsible to delete the underlying C++ object.
- * \note You this overload only when the PyObject can be a sequence and you want to
- * call this function for every item in the sequence.
- * \see getOwnership(SbkObject *)
- */
-LIBSHIBOKEN_API void getOwnership(PyObject *pyObj);
-
-/**
- * Sets python as responsible to delete the underlying C++ object.
- */
-LIBSHIBOKEN_API void getOwnership(SbkObject *pyObj);
-
-/**
- * Release the ownership, so Python will not delete the underlying C++ object.
- * \note You this overload only when the PyObject can be a sequence and you want to
- * call this function for every item in the sequence.
- * \see releaseOwnership(SbkObject *)
- */
-LIBSHIBOKEN_API void releaseOwnership(PyObject *pyObj);
-/**
- * Release the ownership, so Python will not delete the underlying C++ object.
- */
-LIBSHIBOKEN_API void releaseOwnership(SbkObject *pyObj);
-
-/**
- * Get the C++ pointer of type \p desiredType from a Python object.
- */
-LIBSHIBOKEN_API void *cppPointer(SbkObject *pyObj, PyTypeObject *desiredType);
-
-/**
- * Return a list with all C++ pointers held from a Python object.
- * \note This function was added to libshiboken only to be used by shiboken.getCppPointer()
- */
-LIBSHIBOKEN_API std::vector<void *>cppPointers(SbkObject *pyObj);
-
-/**
- * Set the C++ pointer of type \p desiredType of a Python object.
- */
-LIBSHIBOKEN_API bool setCppPointer(SbkObject *sbkObj, PyTypeObject *desiredType, void *cptr);
-
-/**
- * Returns false and sets a Python RuntimeError if the Python wrapper is not marked as valid.
- */
-LIBSHIBOKEN_API bool isValid(PyObject *pyObj);
-
-/**
- * Returns false if the Python wrapper is not marked as valid.
- * \param pyObj the object.
- * \param throwPyError sets a Python RuntimeError when the object isn't valid.
- */
-LIBSHIBOKEN_API bool isValid(SbkObject *pyObj, bool throwPyError = true);
-
-/**
- * Returns false if the Python wrapper is not marked as valid.
- * \param pyObj the object.
- * \param throwPyError sets a Python RuntimeError when the object isn't valid.
- */
-LIBSHIBOKEN_API bool isValid(PyObject *pyObj, bool throwPyError);
-
-/**
-* Set the parent of \p child to \p parent.
-* When an object dies, all their children, grandchildren, etc, are tagged as invalid.
-* \param parent the parent object, if null, the child will have no parents.
-* \param child the child.
-*/
-LIBSHIBOKEN_API void setParent(PyObject *parent, PyObject *child);
-
-/**
-* Remove this child from their parent, if any.
-* \param child the child.
-*/
-LIBSHIBOKEN_API void removeParent(SbkObject *child, bool giveOwnershipBack = true, bool keepReferenc = false);
-
-/**
- * Mark the object as invalid
- */
-LIBSHIBOKEN_API void invalidate(SbkObject *self);
-
-/**
- * Help function can be used to invalidate a sequence of object
- **/
-LIBSHIBOKEN_API void invalidate(PyObject *pyobj);
-
-/**
- * Make the object valid again
- */
-LIBSHIBOKEN_API void makeValid(SbkObject *self);
-
-/**
- * Destroy any data in Shiboken structure and c++ pointer if the pyboject has the ownership
- */
-LIBSHIBOKEN_API void destroy(SbkObject *self, void *cppData);
-
-/**
- * Set user data on type of \p wrapper.
- * \param wrapper instance object, the user data will be set on his type
- * \param userData the user data
- * \param d_func a function used to delete the user data
- */
-LIBSHIBOKEN_API void setTypeUserData(SbkObject *wrapper, void *userData, DeleteUserDataFunc d_func);
-/**
- * Get the user data previously set by Shiboken::Object::setTypeUserData
- */
-LIBSHIBOKEN_API void *getTypeUserData(SbkObject *wrapper);
-
-/**
- * Increments the reference count of the referred Python object.
- * A previous Python object in the same position identified by the 'key' parameter
- * will have its reference counter decremented automatically when replaced.
- * All the kept references should be decremented when the Python wrapper indicated by
- * 'self' dies.
- * No checking is done for any of the passed arguments, since it is meant to be used
- * by generated code it is supposed that the generator is correct.
- * \param self the wrapper instance that keeps references to other objects.
- * \param key a key that identifies the C++ method signature and argument where the referred Object came from.
- * \param referredObject the object whose reference is used by the self object.
- */
-LIBSHIBOKEN_API void keepReference(SbkObject *self, const char *key, PyObject *referredObject, bool append = false);
-
-/**
- * Removes any reference previously added by keepReference function
- * \param self the wrapper instance that keeps references to other objects.
- * \param key a key that identifies the C++ method signature and argument from where the referred Object came.
- * \param referredObject the object whose reference is used by the self object.
- */
-LIBSHIBOKEN_API void removeReference(SbkObject *self, const char *key, PyObject *referredObject);
-
-} // namespace Object
-
-} // namespace Shiboken
-
-#endif // BASEWRAPPER_H