summaryrefslogtreecommitdiffstats
path: root/python/sip/siplib/sip.h
diff options
context:
space:
mode:
Diffstat (limited to 'python/sip/siplib/sip.h')
-rw-r--r--python/sip/siplib/sip.h1302
1 files changed, 0 insertions, 1302 deletions
diff --git a/python/sip/siplib/sip.h b/python/sip/siplib/sip.h
deleted file mode 100644
index 92bcda4e..00000000
--- a/python/sip/siplib/sip.h
+++ /dev/null
@@ -1,1302 +0,0 @@
-/*
- * The SIP module interface.
- *
- * Copyright (c) 2007
- * Riverbank Computing Limited <info@riverbankcomputing.co.uk>
- *
- * This file is part of SIP.
- *
- * This copy of SIP is licensed for use under the terms of the SIP License
- * Agreement. See the file LICENSE for more details.
- *
- * SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-
-#ifndef _SIP_H
-#define _SIP_H
-
-
-/*
- * This gets round a problem with Qt's moc and Python v2.3. Strictly speaking
- * it's a Qt problem but later versions of Python include a fix for it so we
- * might as well too.
- */
-#undef slots
-
-
-#include <Python.h>
-
-/*
- * There is a mis-feature somewhere with the Borland compiler. This works
- * around it.
- */
-#if defined(__BORLANDC__)
-#include <rpc.h>
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Sanity check on the Python version. */
-#if PY_VERSION_HEX < 0x02030000
-#error "This version of SIP requires Python v2.3 or later"
-#endif
-
-
-/*
- * Define the SIP version number.
- */
-#define SIP_VERSION 0x040600
-#define SIP_VERSION_STR "4.6"
-
-
-/*
- * Define the current API version number. SIP must handle modules with the
- * same major number and with the same or earlier minor number. Whenever data
- * structure elements are added they must be appended and the minor number
- * incremented. Whenever data structure elements are removed or the order
- * changed then the major number must be incremented and the minor number set
- * to 0.
- *
- * History:
- *
- * 3.4 Added qt_find_connection() to the Qt support API.
- * Added sip_api_string_as_char(), sip_api_unicode_as_wchar(),
- * sip_api_unicode_as_wstring(), sip_api_find_class(),
- * sip_api_find_named_enum() and sip_api_parse_signature().
- * Added the 'A', 'w' and 'x' format characters to sip_api_parse_args(),
- * sip_api_parse_result(), sip_api_build_result() and
- * sip_api_call_method().
- *
- * 3.3 Added sip_api_register_int_types().
- *
- * 3.2 Added sip_api_export_symbol() and sip_api_import_symbol().
- *
- * 3.1 Added sip_api_add_mapped_type_instance().
- *
- * 3.0 Moved the Qt support out of the sip module and into PyQt. This is
- * such a dramatic change that there is no point in attempting to maintain
- * backwards compatibility.
- *
- * 2.0 Added the td_flags field to the sipTypeDef structure.
- * Added the first_child, sibling_next, sibling_prev and parent fields to
- * the sipWrapper structure.
- * Added the td_traverse and td_clear fields to the sipTypeDef structure.
- * Added the em_api_minor field to the sipExportedModuleDef structure.
- * Added sip_api_bad_operator_arg().
- * Added sip_api_wrapper_check().
- *
- * 1.1 Added support for __pos__ and __abs__.
- *
- * 1.0 Removed all deprecated parts of the API.
- * Removed the td_proxy field from the sipTypeDef structure.
- * Removed the create proxy function from the 'q' and 'y' format
- * characters to sip_api_parse_args().
- * Removed sip_api_emit_to_slot().
- * Reworked the enum related structures.
- *
- * 0.2 Added the 'H' format character to sip_api_parse_args().
- *
- * 0.1 Added sip_api_add_class_instance().
- * Added the 't' format character to sip_api_parse_args().
- * Deprecated the 'J' and 'K' format characters to sip_api_parse_result().
- *
- * 0.0 Original version.
- */
-#define SIP_API_MAJOR_NR 3
-#define SIP_API_MINOR_NR 4
-
-
-/* Some compatibility stuff to help with handwritten code for SIP v3. */
-#if !defined(ANY)
-#define ANY void
-#endif
-
-
-/* Some Python compatibility stuff. */
-#if PY_VERSION_HEX >= 0x02050000
-#define SIP_SSIZE_T Py_ssize_t
-#else
-#define SIP_SSIZE_T int
-#endif
-
-
-/*
- * The mask that can be passed to sipTrace().
- */
-#define SIP_TRACE_CATCHERS 0x0001
-#define SIP_TRACE_CTORS 0x0002
-#define SIP_TRACE_DTORS 0x0004
-#define SIP_TRACE_INITS 0x0008
-#define SIP_TRACE_DEALLOCS 0x0010
-#define SIP_TRACE_METHODS 0x0020
-
-
-/*
- * Hide some thread dependent stuff.
- */
-#ifdef WITH_THREAD
-typedef PyGILState_STATE sip_gilstate_t;
-#define SIP_RELEASE_GIL(gs) PyGILState_Release(gs);
-#define SIP_BLOCK_THREADS {PyGILState_STATE sipGIL = PyGILState_Ensure();
-#define SIP_UNBLOCK_THREADS PyGILState_Release(sipGIL);}
-#else
-typedef int sip_gilstate_t;
-#define SIP_RELEASE_GIL(gs)
-#define SIP_BLOCK_THREADS
-#define SIP_UNBLOCK_THREADS
-#endif
-
-
-/*
- * The metatype of a wrapper type.
- */
-typedef struct _sipWrapperType {
- /*
- * The super-metatype. This must be first in the structure so that it can
- * be cast to a PyTypeObject *.
- */
- PyHeapTypeObject super;
-
- /* The additional type information. */
- struct _sipTypeDef *type;
-
- /* The list of init extenders. */
- struct _sipInitExtenderDef *iextend;
-
- /* The optional PyQt defined Q_OBJECT information. */
- void *qt_qobject;
-} sipWrapperType;
-
-
-/*
- * The type of a C/C++ wrapper object.
- */
-typedef struct _sipWrapper {
- PyObject_HEAD
-
- /* For the user to use. */
- PyObject *user;
-
- union {
- /* C/C++ object pointer. */
- void *cppPtr;
-
- /* Access function. */
- void *(*afPtr)();
- } u;
-
- /* Object flags. */
- int flags;
-
- /* The instance dictionary. */
- PyObject *dict;
-
- /* Python signal list (complex). */
- struct _sipPySig *pySigList;
-
- /* Next object at this address. */
- struct _sipWrapper *next;
-
- /* First child object. */
- struct _sipWrapper *first_child;
-
- /* Next sibling. */
- struct _sipWrapper *sibling_next;
-
- /* Previous sibling. */
- struct _sipWrapper *sibling_prev;
-
- /* Owning object. */
- struct _sipWrapper *parent;
-} sipWrapper;
-
-
-/*
- * Some convenient function pointers.
- */
-typedef void *(*sipInitFunc)(sipWrapper *, PyObject *, sipWrapper **, int *);
-typedef int (*sipTraverseFunc)(void *, visitproc, void *);
-typedef int (*sipClearFunc)(void *);
-typedef SIP_SSIZE_T (*sipBufferFunc)(PyObject *, void *, SIP_SSIZE_T, void **);
-typedef SIP_SSIZE_T (*sipSegCountFunc)(PyObject *, void *, SIP_SSIZE_T *);
-typedef void (*sipDeallocFunc)(sipWrapper *);
-typedef void *(*sipCastFunc)(void *, sipWrapperType *);
-typedef sipWrapperType *(*sipSubClassConvertFunc)(void **);
-typedef void *(*sipForceConvertToFunc)(PyObject *, int *);
-typedef int (*sipConvertToFunc)(PyObject *, void **, int *, PyObject *);
-typedef PyObject *(*sipConvertFromFunc)(void *, PyObject *);
-typedef int (*sipVirtHandlerFunc)(void *, PyObject *, ...);
-typedef int (*sipEmitFunc)(sipWrapper *, PyObject *);
-typedef void (*sipReleaseFunc)(void *, int);
-
-
-/*
- * The information describing an encoded class ID.
- */
-typedef struct _sipEncodedClassDef {
- /* The class number. */
- unsigned sc_class:16;
-
- /* The module number (255 for this one). */
- unsigned sc_module:8;
-
- /* A context specific flag. */
- unsigned sc_flag:1;
-} sipEncodedClassDef;
-
-
-/*
- * The information describing an enum member.
- */
-typedef struct _sipEnumMemberDef {
- /* The member name. */
- const char *em_name;
-
- /* The member value. */
- int em_val;
-
- /* The member enum, -ve if anonymous. */
- int em_enum;
-} sipEnumMemberDef;
-
-
-/*
- * The information describing a named enum.
- */
-typedef struct _sipEnumDef {
- /* The Python name of the enum. */
- const char *e_name;
-
- /* The C/C++ name of the enum, NULL if the same as the Python name. */
- const char *e_cname;
-
- /* The scoping type. */
- int e_scope;
-
- /* The Python slots. */
- struct _sipPySlotDef *e_pyslots;
-} sipEnumDef;
-
-
-/*
- * The information describing static instances.
- */
-typedef struct _sipInstancesDef {
- /* The classes. */
- struct _sipClassInstanceDef *id_class;
-
- /* The void *. */
- struct _sipVoidPtrInstanceDef *id_voidp;
-
- /* The chars. */
- struct _sipCharInstanceDef *id_char;
-
- /* The strings. */
- struct _sipStringInstanceDef *id_string;
-
- /* The ints. */
- struct _sipIntInstanceDef *id_int;
-
- /* The longs. */
- struct _sipLongInstanceDef *id_long;
-
- /* The unsigned longs. */
- struct _sipUnsignedLongInstanceDef *id_ulong;
-
- /* The long longs. */
- struct _sipLongLongInstanceDef *id_llong;
-
- /* The unsigned long longs. */
- struct _sipUnsignedLongLongInstanceDef *id_ullong;
-
- /* The doubles. */
- struct _sipDoubleInstanceDef *id_double;
-
- /* The enums. */
- struct _sipEnumInstanceDef *id_enum;
-} sipInstancesDef;
-
-
-/*
- * The information describing a type initialiser extender.
- */
-typedef struct _sipInitExtenderDef {
- /* The extender function. */
- sipInitFunc ie_extender;
-
- /* The class being extended. */
- sipEncodedClassDef ie_class;
-
- /* The next extender for this class. */
- struct _sipInitExtenderDef *ie_next;
-} sipInitExtenderDef;
-
-
-/*
- * The information describing a sub-class convertor.
- */
-typedef struct _sipSubClassConvertorDef {
- /* The convertor. */
- sipSubClassConvertFunc scc_convertor;
-
- /* The encoded base type. */
- sipEncodedClassDef scc_base;
-
- /* The base type. */
- sipWrapperType *scc_basetype;
-} sipSubClassConvertorDef;
-
-
-/*
- * The different Python slot types.
- */
-typedef enum {
- str_slot, /* __str__ */
- int_slot, /* __int__ */
- long_slot, /* __long__ */
- float_slot, /* __float__ */
- len_slot, /* __len__ */
- contains_slot, /* __contains__ */
- add_slot, /* __add__ for number */
- concat_slot, /* __add__ for sequence types */
- sub_slot, /* __sub__ */
- mul_slot, /* __mul__ for number types */
- repeat_slot, /* __mul__ for sequence types */
- div_slot, /* __div__ */
- mod_slot, /* __mod__ */
- and_slot, /* __and__ */
- or_slot, /* __or__ */
- xor_slot, /* __xor__ */
- lshift_slot, /* __lshift__ */
- rshift_slot, /* __rshift__ */
- iadd_slot, /* __iadd__ for number types */
- iconcat_slot, /* __iadd__ for sequence types */
- isub_slot, /* __isub__ */
- imul_slot, /* __imul__ for number types */
- irepeat_slot, /* __imul__ for sequence types */
- idiv_slot, /* __idiv__ */
- imod_slot, /* __imod__ */
- iand_slot, /* __iand__ */
- ior_slot, /* __ior__ */
- ixor_slot, /* __ixor__ */
- ilshift_slot, /* __ilshift__ */
- irshift_slot, /* __irshift__ */
- invert_slot, /* __invert__ */
- call_slot, /* __call__ */
- getitem_slot, /* __getitem__ */
- setitem_slot, /* __setitem__ */
- delitem_slot, /* __delitem__ */
- lt_slot, /* __lt__ */
- le_slot, /* __le__ */
- eq_slot, /* __eq__ */
- ne_slot, /* __ne__ */
- gt_slot, /* __gt__ */
- ge_slot, /* __ge__ */
- cmp_slot, /* __cmp__ */
- nonzero_slot, /* __nonzero__ */
- neg_slot, /* __neg__ */
- repr_slot, /* __repr__ */
- hash_slot, /* __hash__ */
- pos_slot, /* __pos__ */
- abs_slot /* __abs__ */
-} sipPySlotType;
-
-
-/*
- * The information describing a Python slot function.
- */
-typedef struct _sipPySlotDef {
- /* The function. */
- void *psd_func;
-
- /* The type. */
- sipPySlotType psd_type;
-} sipPySlotDef;
-
-
-/*
- * The information describing a Python slot extender.
- */
-typedef struct _sipPySlotExtenderDef {
- /* The function. */
- void *pse_func;
-
- /* The type. */
- sipPySlotType pse_type;
-
- /* The encoded class. */
- sipEncodedClassDef pse_class;
-} sipPySlotExtenderDef;
-
-
-/*
- * This enumerates the different dynamic signal argument types.
- */
-typedef enum {
- unknown_sat,
- char_sat,
- uchar_sat,
- string_sat,
- ustring_sat,
- short_sat,
- ushort_sat,
- int_sat,
- uint_sat,
- long_sat,
- ulong_sat,
- longlong_sat,
- ulonglong_sat,
- float_sat,
- double_sat,
- enum_sat,
- bool_sat,
- void_sat,
- class_sat,
- classp_sat,
- mtype_sat,
- mtypep_sat,
- qvariant_sat,
- qvariantp_sat,
- pyobject_sat,
- schar_sat,
- sstring_sat,
- wchar_sat,
- wstring_sat
-} sipSigArgType;
-
-
-/*
- * The information describing a typedef.
- */
-typedef struct _sipTypedefDef {
- /* The typedef name. */
- const char *tdd_name;
-
- /* The typedef type. */
- sipSigArgType tdd_type;
-
- /* The type name for enum_sat, class_sat and mtype_sat. */
- const char *tdd_type_name;
-
- /* The defining module, NULL if the current one. */
- const char *tdd_mod_name;
-} sipTypedefDef;
-
-
-/*
- * The information describing a type.
- */
-typedef struct _sipTypeDef {
- /* The module. */
- struct _sipExportedModuleDef *td_module;
-
- /* Type flags, see the sipType*() macros. */
- int td_flags;
-
- /* The Python name of the type. */
- const char *td_name;
-
- /* The C/C++ name of the type, NULL if the same as the Python name. */
- const char *td_cname;
-
- /* The scoping type. */
- sipEncodedClassDef td_scope;
-
- /* The super-types. */
- sipEncodedClassDef *td_supers;
-
- /* The table of Python slots. */
- sipPySlotDef *td_pyslots;
-
- /* The number of lazy methods. */
- int td_nrmethods;
-
- /* The table of lazy methods. */
- PyMethodDef *td_methods;
-
- /* The number of lazy enum members. */
- int td_nrenummembers;
-
- /* The table of lazy enum members. */
- sipEnumMemberDef *td_enummembers;
-
- /* The variable table. */
- PyMethodDef *td_variables;
-
- /* The initialisation function. */
- sipInitFunc td_init;
-
- /* The traverse function. */
- sipTraverseFunc td_traverse;
-
- /* The clear function. */
- sipClearFunc td_clear;
-
- /* The read buffer function. */
- sipBufferFunc td_readbuffer;
-
- /* The write buffer function. */
- sipBufferFunc td_writebuffer;
-
- /* The segment count function. */
- sipSegCountFunc td_segcount;
-
- /* The char buffer function. */
- sipBufferFunc td_charbuffer;
-
- /* The deallocation function. */
- sipDeallocFunc td_dealloc;
-
- /* The cast function, 0 if a C struct. */
- sipCastFunc td_cast;
-
- /* The release function. */
- sipReleaseFunc td_release;
-
- /* The force convert to function, 0 if a C++ namespace. */
- sipForceConvertToFunc td_fcto;
-
- /* The convert to function. */
- sipConvertToFunc td_cto;
-
- /* Emit table for Qt signals. */
- struct _sipQtSignal *td_emit;
-
- /* The static instances. */
- sipInstancesDef td_instances;
-
- /* The next namespace extender. */
- struct _sipTypeDef *td_nsextender;
-} sipTypeDef;
-
-
-/*
- * The information describing an external type.
- */
-typedef struct _sipExternalTypeDef {
- /* The index into the type table. */
- int et_nr;
-
- /* The name of the type. */
- const char *et_name;
-} sipExternalTypeDef;
-
-
-/*
- * The information describing a mapped class.
- */
-typedef struct _sipMappedType {
- /* The corresponding C++ definition. */
- const char *mt_name;
-
- /* The release function. */
- sipReleaseFunc mt_release;
-
- /* The force convert to function. */
- sipForceConvertToFunc mt_fcto;
-
- /* The convert to function. */
- sipConvertToFunc mt_cto;
-
- /* The convert from function. */
- sipConvertFromFunc mt_cfrom;
-} sipMappedType;
-
-
-/*
- * Defines an entry in the module specific list of delayed dtor calls.
- */
-typedef struct _sipDelayedDtor {
- /* The C/C++ instance. */
- void *dd_ptr;
-
- /* The class name. */
- const char *dd_name;
-
- /* Non-zero if dd_ptr is a derived class instance. */
- int dd_isderived;
-
- /* Next in the list. */
- struct _sipDelayedDtor *dd_next;
-} sipDelayedDtor;
-
-
-/*
- * The information describing an imported module.
- */
-typedef struct _sipImportedModuleDef {
- /* The module name. */
- const char *im_name;
-
- /* The required version. */
- int im_version;
-
- /* The imported module. */
- struct _sipExportedModuleDef *im_module;
-} sipImportedModuleDef;
-
-
-/*
- * The main client module structure.
- */
-typedef struct _sipExportedModuleDef {
- /* The next in the list. */
- struct _sipExportedModuleDef *em_next;
-
- /* The SIP API minor version number. */
- unsigned em_api_minor;
-
- /* The module name. */
- const char *em_name;
-
- /* The module name as an object. */
- PyObject *em_nameobj;
-
- /* The module version. */
- int em_version;
-
- /* The imported modules. */
- sipImportedModuleDef *em_imports;
-
- /* The optional Qt support API. */
- struct _sipQtAPI *em_qt_api;
-
- /* The number of types. */
- int em_nrtypes;
-
- /* The table of type types. */
- struct _sipWrapperType **em_types;
-
- /* The table of external types. */
- sipExternalTypeDef *em_external;
-
- /* The table of mapped types. */
- sipMappedType **em_mappedtypes;
-
- /* The number of enums. */
- int em_nrenums;
-
- /* The table of enum types. */
- PyTypeObject **em_enums;
-
- /* The table of enum type data. */
- sipEnumDef *em_enumdefs;
-
- /* The number of members in global enums. */
- int em_nrenummembers;
-
- /* The table of members in global enums. */
- sipEnumMemberDef *em_enummembers;
-
- /* The table of typedefs. */
- sipTypedefDef *em_typedefs;
-
- /* The table of virtual handlers. */
- sipVirtHandlerFunc *em_virthandlers;
-
- /* The sub-class convertors. */
- sipSubClassConvertorDef *em_convertors;
-
- /* The static instances. */
- sipInstancesDef em_instances;
-
- /* The license. */
- struct _sipLicenseDef *em_license;
-
- /* The table of exception types. */
- PyObject **em_exceptions;
-
- /* The table of Python slot extenders. */
- sipPySlotExtenderDef *em_slotextend;
-
- /* The table of initialiser extenders. */
- sipInitExtenderDef *em_initextend;
-
- /* The delayed dtor handler. */
- void (*em_delayeddtors)(const sipDelayedDtor *);
-
- /* The list of delayed dtors. */
- sipDelayedDtor *em_ddlist;
-} sipExportedModuleDef;
-
-
-/*
- * The information describing a license to be added to a dictionary.
- */
-typedef struct _sipLicenseDef {
- /* The type of license. */
- const char *lc_type;
-
- /* The licensee. */
- const char *lc_licensee;
-
- /* The timestamp. */
- const char *lc_timestamp;
-
- /* The signature. */
- const char *lc_signature;
-} sipLicenseDef;
-
-
-/*
- * The information describing a void pointer instance to be added to a
- * dictionary.
- */
-typedef struct _sipVoidPtrInstanceDef {
- /* The void pointer name. */
- const char *vi_name;
-
- /* The void pointer value. */
- void *vi_val;
-} sipVoidPtrInstanceDef;
-
-
-/*
- * The information describing a char instance to be added to a dictionary.
- */
-typedef struct _sipCharInstanceDef {
- /* The char name. */
- const char *ci_name;
-
- /* The char value. */
- char ci_val;
-} sipCharInstanceDef;
-
-
-/*
- * The information describing a string instance to be added to a dictionary.
- */
-typedef struct _sipStringInstanceDef {
- /* The string name. */
- const char *si_name;
-
- /* The string value. */
- const char *si_val;
-} sipStringInstanceDef;
-
-
-/*
- * The information describing an int instance to be added to a dictionary.
- */
-typedef struct _sipIntInstanceDef {
- /* The int name. */
- const char *ii_name;
-
- /* The int value. */
- int ii_val;
-} sipIntInstanceDef;
-
-
-/*
- * The information describing a long instance to be added to a dictionary.
- */
-typedef struct _sipLongInstanceDef {
- /* The long name. */
- const char *li_name;
-
- /* The long value. */
- long li_val;
-} sipLongInstanceDef;
-
-
-/*
- * The information describing an unsigned long instance to be added to a
- * dictionary.
- */
-typedef struct _sipUnsignedLongInstanceDef {
- /* The unsigned long name. */
- const char *uli_name;
-
- /* The unsigned long value. */
- unsigned long uli_val;
-} sipUnsignedLongInstanceDef;
-
-
-/*
- * The information describing a long long instance to be added to a dictionary.
- */
-typedef struct _sipLongLongInstanceDef {
- /* The long long name. */
- const char *lli_name;
-
- /* The long long value. */
-#if defined(HAVE_LONG_LONG)
- PY_LONG_LONG lli_val;
-#else
- long lli_val;
-#endif
-} sipLongLongInstanceDef;
-
-
-/*
- * The information describing an unsigned long long instance to be added to a
- * dictionary.
- */
-typedef struct _sipUnsignedLongLongInstanceDef {
- /* The unsigned long long name. */
- const char *ulli_name;
-
- /* The unsigned long long value. */
-#if defined(HAVE_LONG_LONG)
- unsigned PY_LONG_LONG ulli_val;
-#else
- unsigned long ulli_val;
-#endif
-} sipUnsignedLongLongInstanceDef;
-
-
-/*
- * The information describing a double instance to be added to a dictionary.
- */
-typedef struct _sipDoubleInstanceDef {
- /* The double name. */
- const char *di_name;
-
- /* The double value. */
- double di_val;
-} sipDoubleInstanceDef;
-
-
-/*
- * The information describing a class instance to be added to a dictionary.
- */
-typedef struct _sipClassInstanceDef {
- /* The class instance name. */
- const char *ci_name;
-
- /* The actual instance. */
- void *ci_ptr;
-
- /* A pointer to the Python type. */
- struct _sipWrapperType **ci_type;
-
- /* The wrapping flags. */
- int ci_flags;
-} sipClassInstanceDef;
-
-
-/*
- * The information describing an enum instance to be added to a dictionary.
- */
-typedef struct _sipEnumInstanceDef {
- /* The enum instance name. */
- const char *ei_name;
-
- /* The enum value. */
- int ei_val;
-
- /* A pointer to the Python type. */
- PyTypeObject **ei_type;
-} sipEnumInstanceDef;
-
-
-/*
- * Define a mapping between a wrapped type identified by a string and the
- * corresponding Python type.
- */
-typedef struct _sipStringTypeClassMap {
- /* The type as a string. */
- const char *typeString;
-
- /* A pointer to the Python type. */
- struct _sipWrapperType **pyType;
-} sipStringTypeClassMap;
-
-
-/*
- * Define a mapping between a wrapped type identified by an integer and the
- * corresponding Python type.
- */
-typedef struct _sipIntTypeClassMap {
- /* The type as an integer. */
- int typeInt;
-
- /* A pointer to the Python type. */
- struct _sipWrapperType **pyType;
-} sipIntTypeClassMap;
-
-
-/*
- * A Python method's component parts. This allows us to re-create the method
- * without changing the reference counts of the components.
- */
-typedef struct _sipPyMethod {
- /* The function. */
- PyObject *mfunc;
-
- /* Self if it is a bound method. */
- PyObject *mself;
-
- /* The class. */
- PyObject *mclass;
-} sipPyMethod;
-
-
-/*
- * Cache a reference to a Python member function.
- */
-typedef struct _sipMethodCache {
- /* Method cache flags. */
- int mcflags;
-
- /* The method. */
- sipPyMethod pyMethod;
-} sipMethodCache;
-
-
-/*
- * A slot (in the Qt, rather than Python, sense).
- */
-typedef struct _sipSlot {
- /* Name if a Qt or Python signal. */
- char *name;
-
- /* Signal or Qt slot object. */
- PyObject *pyobj;
-
- /* Python slot method, pyobj is NULL. */
- sipPyMethod meth;
-
- /* A weak reference to the slot. */
- PyObject *weakSlot;
-} sipSlot;
-
-
-/*
- * An entry in a linked list of slots.
- */
-typedef struct _sipSlotList {
- /* The receiver. */
- sipSlot rx;
-
- /* Next in the list. */
- struct _sipSlotList *next;
-} sipSlotList;
-
-
-/*
- * A Python signal.
- */
-typedef struct _sipPySig {
- /* The name of the signal. */
- char *name;
-
- /* The list of receivers. */
- sipSlotList *rxlist;
-
- /* Next in the list. */
- struct _sipPySig *next;
-} sipPySig;
-
-
-/*
- * This defines a single dynamic signal argument type.
- */
-typedef struct _sipSigArg {
- /* The type. */
- sipSigArgType atype;
-
- union {
- /* The Python type for classes. */
- sipWrapperType *wt;
-
- /* The data for mapped types. */
- sipMappedType *mt;
-
- /* The Python type for named enums. */
- PyTypeObject *et;
- } u;
-} sipSigArg;
-
-
-/*
- * A parsed signal signature.
- */
-typedef struct _sipSignature {
- /* The number of arguments. */
- int sg_nrargs;
-
- /* The parsed arguments (heap). */
- sipSigArg *sg_args;
-
- /* The unparsed signature (heap). */
- char *sg_signature;
-
- /* The next in the list. */
- struct _sipSignature *sg_next;
-} sipSignature;
-
-
-/*
- * A connection to a universal slot.
- */
-typedef struct _sipSlotConnection {
- /* The transmitter TQObject. */
- void *sc_transmitter;
-
- /* The parsed signature. */
- const sipSignature *sc_signature;
-
- /* The slot. */
- sipSlot sc_slot;
-} sipSlotConnection;
-
-
-/*
- * Maps the name of a Qt signal to a wrapper function to emit it.
- */
-typedef struct _sipQtSignal {
- /* The signal name. */
- char *st_name;
-
- /* The emitter function. */
- sipEmitFunc st_emitfunc;
-} sipQtSignal;
-
-
-/*
- * The API exported by the SIP module, ie. pointers to all the data and
- * functions that can be used by generated code.
- */
-typedef struct _sipAPIDef {
- /*
- * This must be the first entry and it's signature must not change so that
- * version number mismatches can be detected and reported.
- */
- int (*api_export_module)(sipExportedModuleDef *client, unsigned api_major,
- unsigned api_minor, PyObject *mod_dict);
-
- /*
- * The following are part of the public API.
- */
- void (*api_bad_catcher_result)(PyObject *method);
- void (*api_bad_length_for_slice)(SIP_SSIZE_T seqlen, SIP_SSIZE_T slicelen);
- PyObject *(*api_build_result)(int *isErr, const char *fmt, ...);
- PyObject *(*api_call_method)(int *isErr, PyObject *method, const char *fmt,
- ...);
- PyObject *(*api_class_name)(PyObject *self);
- PyObject *(*api_connect_rx)(PyObject *txObj, const char *sig,
- PyObject *rxObj, const char *slot, int type);
- SIP_SSIZE_T (*api_convert_from_sequence_index)(SIP_SSIZE_T idx,
- SIP_SSIZE_T len);
- int (*api_can_convert_to_instance)(PyObject *pyObj, sipWrapperType *type,
- int flags);
- int (*api_can_convert_to_mapped_type)(PyObject *pyObj,
- const sipMappedType *mt, int flags);
- void *(*api_convert_to_instance)(PyObject *pyObj, sipWrapperType *type,
- PyObject *transferObj, int flags, int *statep, int *iserrp);
- void *(*api_convert_to_mapped_type)(PyObject *pyObj,
- const sipMappedType *mt, PyObject *transferObj, int flags,
- int *statep, int *iserrp);
- void *(*api_force_convert_to_instance)(PyObject *pyObj,
- sipWrapperType *type, PyObject *transferObj, int flags,
- int *statep, int *iserrp);
- void *(*api_force_convert_to_mapped_type)(PyObject *pyObj,
- const sipMappedType *mt, PyObject *transferObj, int flags,
- int *statep, int *iserrp);
- void (*api_release_instance)(void *cpp, sipWrapperType *type, int state);
- void (*api_release_mapped_type)(void *cpp, const sipMappedType *mt,
- int state);
- PyObject *(*api_convert_from_instance)(void *cpp, sipWrapperType *type,
- PyObject *transferObj);
- PyObject *(*api_convert_from_new_instance)(void *cpp, sipWrapperType *type,
- PyObject *transferObj);
- PyObject *(*api_convert_from_mapped_type)(void *cpp,
- const sipMappedType *mt, PyObject *transferObj);
- void *(*api_convert_to_cpp)(PyObject *sipSelf, sipWrapperType *type,
- int *iserrp);
- int (*api_get_state)(PyObject *transferObj);
- const sipMappedType *(*api_find_mapped_type)(const char *type);
- PyObject *(*api_disconnect_rx)(PyObject *txObj, const char *sig,
- PyObject *rxObj, const char *slot);
- int (*api_emit_signal)(PyObject *self, const char *sig, PyObject *sigargs);
- void (*api_free)(void *mem);
- PyObject *(*api_get_sender)();
- PyObject *(*api_get_wrapper)(void *cppPtr, sipWrapperType *type);
- void *(*api_malloc)(size_t nbytes);
- sipWrapperType *(*api_map_int_to_class)(int typeInt,
- const sipIntTypeClassMap *map, int maplen);
- sipWrapperType *(*api_map_string_to_class)(const char *typeString,
- const sipStringTypeClassMap *map, int maplen);
- int (*api_parse_result)(int *isErr, PyObject *method, PyObject *res,
- const char *fmt, ...);
- void (*api_trace)(unsigned mask, const char *fmt, ...);
- void (*api_transfer)(PyObject *self, int toCpp);
- void (*api_transfer_back)(PyObject *self);
- void (*api_transfer_to)(PyObject *self, PyObject *owner);
- int (*api_wrapper_check)(PyObject *o);
- unsigned long (*api_long_as_unsigned_long)(PyObject *o);
- PyObject *(*api_convert_from_named_enum)(int eval, PyTypeObject *et);
-
- /*
- * The following may be used by Qt support code but no other handwritten
- * code.
- */
- PyObject *(*api_convert_from_void_ptr)(void *val);
- void (*api_free_connection)(sipSlotConnection *conn);
- int (*api_emit_to_slot)(sipSlot *slot, PyObject *sigargs);
- int (*api_same_connection)(sipSlotConnection *conn, void *tx,
- const char *sig, PyObject *rxObj, const char *slot);
- void *(*api_convert_rx)(sipWrapper *txSelf, const char *sigargs,
- PyObject *rxObj, const char *slot, const char **memberp);
-
- /*
- * The following are not part of the public API.
- */
- int (*api_parse_args)(int *argsParsedp, PyObject *sipArgs,
- const char *fmt, ...);
- int (*api_parse_pair)(int *argsParsedp, PyObject *arg0, PyObject *arg1,
- const char *fmt, ...);
- void (*api_common_ctor)(sipMethodCache *cache, int nrmeths);
- void (*api_common_dtor)(sipWrapper *sipSelf);
- void *(*api_convert_to_void_ptr)(PyObject *obj);
- void (*api_no_function)(int argsParsed, const char *func);
- void (*api_no_method)(int argsParsed, const char *classname,
- const char *method);
- void (*api_abstract_method)(const char *classname, const char *method);
- void (*api_bad_class)(const char *classname);
- void (*api_bad_set_type)(const char *classname, const char *var);
- void *(*api_get_cpp_ptr)(sipWrapper *w, sipWrapperType *type);
- void *(*api_get_complex_cpp_ptr)(sipWrapper *w);
- PyObject *(*api_is_py_method)(sip_gilstate_t *gil, sipMethodCache *pymc,
- sipWrapper *sipSelf, char *cname, char *mname);
- void (*api_call_hook)(const char *hookname);
- void (*api_start_thread)(void);
- void (*api_end_thread)(void);
- void (*api_raise_unknown_exception)(void);
- void (*api_raise_class_exception)(sipWrapperType *type, void *ptr);
- void (*api_raise_sub_class_exception)(sipWrapperType *type, void *ptr);
- int (*api_add_class_instance)(PyObject *dict, const char *name,
- void *cppPtr, sipWrapperType *wt);
- int (*api_add_enum_instance)(PyObject *dict, const char *name, int value,
- PyTypeObject *type);
- void (*api_bad_operator_arg)(PyObject *self, PyObject *arg,
- sipPySlotType st);
- PyObject *(*api_pyslot_extend)(sipExportedModuleDef *mod, sipPySlotType st,
- sipWrapperType *type, PyObject *arg0, PyObject *arg1);
- void (*api_add_delayed_dtor)(sipWrapper *w);
- int (*api_add_mapped_type_instance)(PyObject *dict, const char *name,
- void *cppPtr, const sipMappedType *mt);
-
- /*
- * The following are part of the public API.
- */
- int (*api_export_symbol)(const char *name, void *sym);
- void *(*api_import_symbol)(const char *name);
-
- /*
- * The following may be used by Qt support code but no other handwritten
- * code.
- */
- int (*api_register_int_types)(PyObject *args);
- sipSignature *(*api_parse_signature)(const char *sig);
-
- /*
- * The following are part of the public API.
- */
- sipWrapperType *(*api_find_class)(const char *type);
- PyTypeObject *(*api_find_named_enum)(const char *type);
-
- /*
- * The following are not part of the public API.
- */
- char (*api_string_as_char)(PyObject *obj);
-#if defined(HAVE_WCHAR_H)
- wchar_t (*api_unicode_as_wchar)(PyObject *obj);
- wchar_t *(*api_unicode_as_wstring)(PyObject *obj);
-#else
- int (*api_unicode_as_wchar)(PyObject *obj);
- int *(*api_unicode_as_wstring)(PyObject *obj);
-#endif
-} sipAPIDef;
-
-
-/*
- * The API implementing the optional Qt support.
- */
-typedef struct _sipQtAPI {
- struct _sipWrapperType **qt_qobject;
- int (*qt_is_qt_signal)(void *, const char *);
- void *(*qt_create_universal_signal_shortcut)(void *, const char *,
- const char **);
- void *(*qt_create_universal_signal)(void *, const struct _sipSignature *);
- void *(*qt_find_universal_signal_shortcut)(void *, const char *,
- const char **);
- void *(*qt_find_universal_signal)(void *, const struct _sipSignature *);
- int (*qt_emit_signal_shortcut)(void *, const char *, PyObject *);
- int (*qt_emit_signal)(void *, const struct _sipSignature *, PyObject *);
- void *(*qt_create_universal_slot)(struct _sipWrapper *,
- struct _sipSlotConnection *, const char **);
- void (*qt_destroy_universal_slot)(void *);
- void *(*qt_find_slot)(void *, const char *, PyObject *, const char *,
- const char **);
- int (*qt_connect)(void *, const char *, void *, const char *, int);
- int (*qt_disconnect)(void *, const char *, void *, const char *);
- int (*qt_signals_blocked)(void *);
- const void *(*qt_get_sender)();
- void (*qt_forget_sender)();
- int (*qt_same_name)(const char *, const char *);
- sipSlotConnection *(*qt_find_connection)(void *, void **);
-} sipQtAPI;
-
-
-/*
- * These are flags that can be passed to sipCanConvertToInstance(),
- * sipConvertToInstance() and sipForceConvertToInstance().
- */
-#define SIP_NOT_NONE 0x01 /* Disallow None. */
-#define SIP_NO_CONVERTORS 0x02 /* Disable any type convertors. */
-
-
-/*
- * These are the state flags returned by %ConvertToTypeCode. Note that these
- * share the same "namespace" as the flags below.
- */
-#define SIP_TEMPORARY 0x0001 /* A temporary instance. */
-#define SIP_DERIVED_CLASS 0x0002 /* The instance is derived. */
-
-
-/*
- * Useful macros, not part of the public API.
- */
-#define SIP_PY_OWNED 0x0004 /* Owned by Python. */
-#define SIP_INDIRECT 0x0008 /* If there is a level of indirection. */
-#define SIP_ACCFUNC 0x0010 /* If there is an access function. */
-#define SIP_NOT_IN_MAP 0x0020 /* If Python object not in the map. */
-#define SIP_SHARE_MAP 0x0040 /* If the map slot might be occupied. */
-#define SIP_CPP_HAS_REF 0x0080 /* If C/C++ has a reference. */
-
-#define sipIsPyOwned(w) ((w)->flags & SIP_PY_OWNED)
-#define sipSetPyOwned(w) ((w)->flags |= SIP_PY_OWNED)
-#define sipResetPyOwned(w) ((w)->flags &= ~SIP_PY_OWNED)
-#define sipIsDerived(w) ((w)->flags & SIP_DERIVED_CLASS)
-#define sipIsIndirect(w) ((w)->flags & SIP_INDIRECT)
-#define sipIsAccessFunc(w) ((w)->flags & SIP_ACCFUNC)
-#define sipNotInMap(w) ((w)->flags & SIP_NOT_IN_MAP)
-#define sipCppHasRef(w) ((w)->flags & SIP_CPP_HAS_REF)
-#define sipSetCppHasRef(w) ((w)->flags |= SIP_CPP_HAS_REF)
-#define sipResetCppHasRef(w) ((w)->flags &= ~SIP_CPP_HAS_REF)
-
-
-#define SIP_TYPE_ABSTRACT 0x0001 /* If the type is abstract. */
-#define SIP_TYPE_SCC 0x0002 /* If the type is subject to sub-class convertors. */
-#define SIP_TYPE_FLAGS_SHIFT 8 /* The user type flags shift. */
-#define SIP_TYPE_FLAGS_MASK 0x0f00 /* The user type flags mask. */
-
-#define sipTypeIsAbstract(wt) ((wt)->type->td_flags & SIP_TYPE_ABSTRACT)
-#define sipTypeHasSCC(wt) ((wt)->type->td_flags & SIP_TYPE_SCC)
-#define sipTypeFlags(wt) (((wt)->type->td_flags & SIP_TYPE_FLAGS_MASK) >> SIP_TYPE_FLAGS_SHIFT)
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif