/* * This file defines the SIP library internal interfaces. * * Copyright (c) 2007 * Riverbank Computing Limited * * 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 _SIPINT_H #define _SIPINT_H #ifdef __cplusplus extern "C" { #endif #undef TRUE #define TRUE 1 #undef FALSE #define FALSE 0 /* * This defines a single entry in an object map's hash table. */ typedef struct { void *key; /* The C/C++ address. */ sipWrapper *first; /* The first object at this address. */ } sipHashEntry; /* * This defines the interface to a hash table class for mapping C/C++ addresses * to the corresponding wrapped Python object. */ typedef struct { int primeIdx; /* Index into table sizes. */ unsigned long size; /* Size of hash table. */ unsigned long unused; /* Nr. unused in hash table. */ unsigned long stale; /* Nr. stale in hash table. */ sipHashEntry *hash_array; /* Current hash table. */ } sipObjectMap; extern PyInterpreterState *sipInterpreter; /* The interpreter. */ extern sipQtAPI *sipQtSupport; /* The Qt support API. */ extern sipWrapperType *sipQObjectClass; /* The Python QObject class. */ void *sip_api_convert_rx(sipWrapper *txSelf, const char *sigargs, PyObject *rxObj, const char *slot, const char **memberp); void *sipGetRx(sipWrapper *txSelf,const char *sigargs,PyObject *rxObj, const char *slot,const char **memberp); int sip_api_emit_signal(PyObject *self,const char *sig,PyObject *sigargs); PyObject *sip_api_get_sender(); PyObject *sip_api_connect_rx(PyObject *txObj,const char *sig, PyObject *rxObj,const char *slot, int type); PyObject *sip_api_disconnect_rx(PyObject *txObj,const char *sig, PyObject *rxObj,const char *slot); sipSignature *sip_api_parse_signature(const char *sig); /* * These are part of the SIP API but are also used within the SIP module. */ void *sip_api_malloc(size_t nbytes); void sip_api_free(void *mem); void *sip_api_get_cpp_ptr(sipWrapper *w,sipWrapperType *type); PyObject *sip_api_convert_from_instance(void *cppPtr, sipWrapperType *type, PyObject *transferObj); void sip_api_start_thread(void); void sip_api_end_thread(void); PyObject *sip_api_convert_from_void_ptr(void *val); PyObject *sip_api_convert_from_named_enum(int eval, PyTypeObject *et); int sip_api_wrapper_check(PyObject *o); void sip_api_free_connection(sipSlotConnection *conn); int sip_api_emit_to_slot(sipSlot *slot, PyObject *sigargs); int sip_api_same_connection(sipSlotConnection *conn, void *tx, const char *sig, PyObject *rxObj, const char *slot); /* * These are not part of the SIP API but are used within the SIP module. */ void sipFreeSlotList(sipSlotList *rx); void sipSaveMethod(sipPyMethod *pm,PyObject *meth); void *sipGetPending(sipWrapper **op, int *fp); PyObject *sipWrapSimpleInstance(void *cppPtr, sipWrapperType *type, sipWrapper *owner, int initflags); int sipLambdaSlot(PyObject *slotObj); void sipOMInit(sipObjectMap *om); void sipOMFinalise(sipObjectMap *om); sipWrapper *sipOMFindObject(sipObjectMap *om,void *key,sipWrapperType *type); void sipOMAddObject(sipObjectMap *om,sipWrapper *val); int sipOMRemoveObject(sipObjectMap *om,sipWrapper *val); void sipSetBool(void *ptr,int val); void *sipGetAddress(sipWrapper *w); void sipFindSigArgType(const char *name, size_t len, sipSigArg *at, int indir); #ifdef __cplusplus } #endif #endif