📄 sip.h
字号:
/* * The main header file for SIP. * * Copyright (c) 2006 * 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#include <stdio.h>#include <sys/types.h>#ifdef TRUE#undef TRUE#endif#ifdef FALSE#undef FALSE#endif#define TRUE 1#define FALSE 0#define DEFAULT_OFILE_EXT ".o" /* Default object file extension. */#define MAX_NR_ARGS 20 /* Max. nr. args. to a function or template. *//* For convenience. */#define classBaseName(cd) ((cd) -> iff -> name -> text)#define classFQCName(cd) ((cd) -> iff -> fqcname)/* Handle module flags. */#define MOD_HAS_DELAYED_DTORS 0x0001 /* It has a class with a delayed dtor. */#define MOD_IS_ORDERED 0x0002 /* Set if the module has been ordered. */#define hasDelayedDtors(m) ((m) -> modflags & MOD_HAS_DELAYED_DTORS)#define setHasDelayedDtors(m) ((m) -> modflags |= MOD_HAS_DELAYED_DTORS)#define isOrdered(m) ((m) -> modflags & MOD_IS_ORDERED)#define setIsOrdered(m) ((m) -> modflags |= MOD_IS_ORDERED)/* Handle section flags. */#define SECT_IS_PUBLIC 0x0001 /* It is public. */#define SECT_IS_PROT 0x0002 /* It is protected. */#define SECT_IS_PRIVATE 0x0004 /* It is private. */#define SECT_IS_SLOT 0x0008 /* It is a slot. */#define SECT_IS_SIGNAL 0x0010 /* It is a signal. */#define SECT_MASK 0x001f /* The mask of all flags. *//* Handle class flags. */#define CLASS_HAS_ENUMS 0x00010000 /* It has enums. */#define CLASS_HAS_SIGSLOTS 0x00020000 /* It has signals or slots. */#define CLASS_IS_ABSTRACT 0x00040000 /* It is an abstract class. */#define CLASS_HAS_SHADOW 0x00080000 /* It is has a shadow class. */#define CLASS_IS_OPAQUE 0x00100000 /* It is opaque. */#define CLASS_HAS_VAR_HANDLERS 0x00200000 /* It has variable handlers. */#define CLASS_DTOR_RELEASE_GIL 0x00400000 /* The dtor releases the GIL. */#define CLASS_IS_PROTECTED 0x00800000 /* It is protected. */#define CLASS_IS_PROTECTED_SAV 0x01000000 /* It is protected (saved). */#define CLASS_IS_RENAMED 0x02000000 /* It has a different Python name. */#define CLASS_IS_INCOMPLETE 0x04000000 /* The specification is incomplete. */#define CLASS_CAN_CREATE 0x08000000 /* It has usable ctors. */#define CLASS_IS_EXTERNAL 0x10000000 /* It is external. */#define CLASS_IS_DELAYED_DTOR 0x20000000 /* The dtor is delayed. */#define hasEnums(cd) ((cd) -> classflags & CLASS_HAS_ENUMS)#define setHasEnums(cd) ((cd) -> classflags |= CLASS_HAS_ENUMS)#define hasSigSlots(cd) ((cd) -> classflags & CLASS_HAS_SIGSLOTS)#define setHasSigSlots(cd) ((cd) -> classflags |= CLASS_HAS_SIGSLOTS)#define isAbstractClass(cd) ((cd) -> classflags & CLASS_IS_ABSTRACT)#define setIsAbstractClass(cd) ((cd) -> classflags |= CLASS_IS_ABSTRACT)#define hasShadow(cd) ((cd) -> classflags & CLASS_HAS_SHADOW)#define setHasShadow(cd) ((cd) -> classflags |= CLASS_HAS_SHADOW)#define resetHasShadow(cd) ((cd) -> classflags &= ~CLASS_HAS_SHADOW)#define isOpaque(cd) ((cd) -> classflags & CLASS_IS_OPAQUE)#define setIsOpaque(cd) ((cd) -> classflags |= CLASS_IS_OPAQUE)#define hasVarHandlers(cd) ((cd) -> classflags & CLASS_HAS_VAR_HANDLERS)#define setHasVarHandlers(cd) ((cd) -> classflags |= CLASS_HAS_VAR_HANDLERS)#define isProtectedClass(cd) ((cd) -> classflags & CLASS_IS_PROTECTED)#define setIsProtectedClass(cd) ((cd) -> classflags |= CLASS_IS_PROTECTED)#define resetIsProtectedClass(cd) ((cd) -> classflags &= ~CLASS_IS_PROTECTED)#define wasProtectedClass(cd) ((cd) -> classflags & CLASS_IS_PROTECTED_SAV)#define setWasProtectedClass(cd) ((cd) -> classflags |= CLASS_IS_PROTECTED_SAV)#define resetWasProtectedClass(cd) ((cd) -> classflags &= ~CLASS_IS_PROTECTED_SAV)#define isReleaseGILDtor(c) ((cd) -> classflags & CLASS_DTOR_RELEASE_GIL)#define setIsReleaseGILDtor(c) ((cd) -> classflags |= CLASS_DTOR_RELEASE_GIL)#define isRenamedClass(cd) ((cd) -> classflags & CLASS_IS_RENAMED)#define setIsRenamedClass(cd) ((cd) -> classflags |= CLASS_IS_RENAMED)#define isIncomplete(cd) ((cd) -> classflags & CLASS_IS_INCOMPLETE)#define setIsIncomplete(cd) ((cd) -> classflags |= CLASS_IS_INCOMPLETE)#define canCreate(cd) ((cd) -> classflags & CLASS_CAN_CREATE)#define setCanCreate(cd) ((cd) -> classflags |= CLASS_CAN_CREATE)#define resetCanCreate(cd) ((cd) -> classflags &= ~CLASS_CAN_CREATE)#define isExternal(cd) ((cd) -> classflags & CLASS_IS_EXTERNAL)#define setIsExternal(cd) ((cd) -> classflags |= CLASS_IS_EXTERNAL)#define isDelayedDtor(cd) ((cd) -> classflags & CLASS_IS_DELAYED_DTOR)#define setIsDelayedDtor(cd) ((cd) -> classflags |= CLASS_IS_DELAYED_DTOR)#define isPublicDtor(cd) ((cd) -> classflags & SECT_IS_PUBLIC)#define setIsPublicDtor(cd) ((cd) -> classflags |= SECT_IS_PUBLIC)#define isProtectedDtor(cd) ((cd) -> classflags & SECT_IS_PROT)#define isPrivateDtor(cd) ((cd) -> classflags & SECT_IS_PRIVATE)#define isDtor(cd) ((cd) -> classflags & (SECT_IS_PUBLIC | SECT_IS_PROT | SECT_IS_PRIVATE))/* Handle ctor flags. */#define CTOR_RELEASE_GIL 0x00010000 /* The ctor releases the GIL. */#define CTOR_EXPLICIT 0x00020000 /* The ctor is explicit. */#define CTOR_CAST 0x00040000 /* The ctor is a cast. */#define isPublicCtor(c) ((c) -> ctorflags & SECT_IS_PUBLIC)#define setIsPublicCtor(c) ((c) -> ctorflags |= SECT_IS_PUBLIC)#define isProtectedCtor(c) ((c) -> ctorflags & SECT_IS_PROT)#define setIsProtectedCtor(c) ((c) -> ctorflags |= SECT_IS_PROT)#define isPrivateCtor(c) ((c) -> ctorflags & SECT_IS_PRIVATE)#define setIsPrivateCtor(c) ((c) -> ctorflags |= SECT_IS_PRIVATE)#define isReleaseGILCtor(c) ((c) -> ctorflags & CTOR_RELEASE_GIL)#define setIsReleaseGILCtor(c) ((c) -> ctorflags |= CTOR_RELEASE_GIL)#define isExplicitCtor(c) ((c) -> ctorflags & CTOR_EXPLICIT)#define setIsExplicitCtor(c) ((c) -> ctorflags |= CTOR_EXPLICIT)#define isCastCtor(c) ((c) -> ctorflags & CTOR_CAST)/* Handle member flags. */#define MEMBR_NUMERIC 0x0001 /* It is a numeric slot. */#define isNumeric(m) ((m) -> memberflags & MEMBR_NUMERIC)#define setIsNumeric(m) ((m) -> memberflags |= MEMBR_NUMERIC)/* Handle enum flags. */#define ENUM_WAS_PROT 0x00010000 /* It was defined as protected. */#define ENUM_IS_RENAMED 0x00020000 /* It has been renamed. */#define isProtectedEnum(e) ((e) -> enumflags & SECT_IS_PROT)#define setIsProtectedEnum(e) ((e) -> enumflags |= SECT_IS_PROT)#define resetIsProtectedEnum(e) ((e) -> enumflags &= ~SECT_IS_PROT)#define wasProtectedEnum(e) ((e) -> enumflags & ENUM_WAS_PROT)#define setWasProtectedEnum(e) ((e) -> enumflags |= ENUM_WAS_PROT)#define resetWasProtectedEnum(e) ((e) -> enumflags &= ~ENUM_WAS_PROT)#define isRenamedEnum(e) ((e) -> enumflags & ENUM_IS_RENAMED)#define setIsRenamedEnum(e) ((e) -> enumflags |= ENUM_IS_RENAMED)/* Handle hierarchy flags. */#define HIER_IS_DUPLICATE 0x0001 /* It is a super class duplicate. */#define HIER_HAS_DUPLICATE 0x0002 /* It has a super class duplicate. */#define isDuplicateSuper(m) ((m) -> mroflags & HIER_IS_DUPLICATE)#define setIsDuplicateSuper(m) ((m) -> mroflags |= HIER_IS_DUPLICATE)#define hasDuplicateSuper(m) ((m) -> mroflags & HIER_HAS_DUPLICATE)#define setHasDuplicateSuper(m) ((m) -> mroflags |= HIER_HAS_DUPLICATE)/* Handle overload flags. */#define OVER_IS_VIRTUAL 0x00010000 /* It is virtual. */#define OVER_IS_ABSTRACT 0x00020000 /* It is abstract. */#define OVER_IS_CONST 0x00040000 /* It is a const function. */#define OVER_IS_STATIC 0x00080000 /* It is a static function. */#define OVER_IS_AUTOGEN 0x00100000 /* It is auto-generated. */#define OVER_IS_NEW_THREAD 0x00200000 /* It is in a new thread. */#define OVER_IS_FACTORY 0x00400000 /* It is a factory method. */#define OVER_IS_FACTORY 0x00400000 /* It is a factory method. */#define OVER_XFERRED_BACK 0x00800000 /* Ownership is transferred back. */#define OVER_RELEASE_GIL 0x01000000 /* The function releases the GIL. */#define OVER_IS_VIRTUAL_REIMP 0x02000000 /* It is a re-implementation of a virtual. */#define isPublic(o) ((o) -> overflags & SECT_IS_PUBLIC)#define setIsPublic(o) ((o) -> overflags |= SECT_IS_PUBLIC)#define isProtected(o) ((o) -> overflags & SECT_IS_PROT)#define setIsProtected(o) ((o) -> overflags |= SECT_IS_PROT)#define isPrivate(o) ((o) -> overflags & SECT_IS_PRIVATE)#define setIsPrivate(o) ((o) -> overflags |= SECT_IS_PRIVATE)#define isSlot(o) ((o) -> overflags & SECT_IS_SLOT)#define setIsSlot(o) ((o) -> overflags |= SECT_IS_SLOT)#define isSignal(o) ((o) -> overflags & SECT_IS_SIGNAL)#define setIsSignal(o) ((o) -> overflags |= SECT_IS_SIGNAL)#define isVirtual(o) ((o) -> overflags & OVER_IS_VIRTUAL)#define setIsVirtual(o) ((o) -> overflags |= OVER_IS_VIRTUAL)#define isAbstract(o) ((o) -> overflags & OVER_IS_ABSTRACT)#define setIsAbstract(o) ((o) -> overflags |= OVER_IS_ABSTRACT)#define isConst(o) ((o) -> overflags & OVER_IS_CONST)#define setIsConst(o) ((o) -> overflags |= OVER_IS_CONST)#define isStatic(o) ((o) -> overflags & OVER_IS_STATIC)#define setIsStatic(o) ((o) -> overflags |= OVER_IS_STATIC)#define isAutoGen(o) ((o) -> overflags & OVER_IS_AUTOGEN)#define setIsAutoGen(o) ((o) -> overflags |= OVER_IS_AUTOGEN)#define resetIsAutoGen(o) ((o) -> overflags &= ~OVER_IS_AUTOGEN)#define isNewThread(o) ((o) -> overflags & OVER_IS_NEW_THREAD)#define setIsNewThread(o) ((o) -> overflags |= OVER_IS_NEW_THREAD)#define isFactory(o) ((o) -> overflags & OVER_IS_FACTORY)#define setIsFactory(o) ((o) -> overflags |= OVER_IS_FACTORY)#define isResultTransferredBack(o) ((o) -> overflags & OVER_XFERRED_BACK)#define setIsResultTransferredBack(o) ((o) -> overflags |= OVER_XFERRED_BACK)#define isReleaseGIL(o) ((o) -> overflags & OVER_RELEASE_GIL)#define setIsReleaseGIL(o) ((o) -> overflags |= OVER_RELEASE_GIL)#define isVirtualReimp(o) ((o) -> overflags & OVER_IS_VIRTUAL_REIMP)#define setIsVirtualReimp(o) ((o) -> overflags |= OVER_IS_VIRTUAL_REIMP)/* Handle variable flags. */#define VAR_IS_STATIC 0x01 /* It is a static variable. */#define VAR_NEEDS_HANDLER 0x02 /* It the variable needs a handler. */#define isStaticVar(v) ((v) -> varflags & VAR_IS_STATIC)#define setIsStaticVar(v) ((v) -> varflags |= VAR_IS_STATIC)#define needsHandler(v) ((v) -> varflags & VAR_NEEDS_HANDLER)#define setNeedsHandler(v) ((v) -> varflags |= VAR_NEEDS_HANDLER)/* Handle argument flags. */#define ARG_IS_REF 0x0001 /* It is a reference. */#define ARG_IS_CONST 0x0002 /* It is a const. */#define ARG_XFERRED 0x0004 /* Ownership is transferred. */#define ARG_THIS_XFERRED 0x0008 /* Ownership of this is transferred. */#define ARG_XFERRED_BACK 0x0010 /* Ownership is transferred back. */#define ARG_ARRAY 0x0020 /* Used as an array. */#define ARG_ARRAY_SIZE 0x0040 /* Used as an array size. */#define ARG_ALLOW_NONE 0x0080 /* Allow None as a value. */#define ARG_GET_WRAPPER 0x0100 /* Get the wrapper object. */#define ARG_IN 0x0200 /* It passes an argument. */#define ARG_OUT 0x0400 /* It returns a result. */#define ARG_CONSTRAINED 0x0800 /* Suppress type conversion. */#define isReference(a) ((a) -> argflags & ARG_IS_REF)#define setIsReference(a) ((a) -> argflags |= ARG_IS_REF)#define resetIsReference(a) ((a) -> argflags &= ~ARG_IS_REF)#define isConstArg(a) ((a) -> argflags & ARG_IS_CONST)#define setIsConstArg(a) ((a) -> argflags |= ARG_IS_CONST)#define resetIsConstArg(a) ((a) -> argflags &= ~ARG_IS_CONST)#define isTransferred(a) ((a) -> argflags & ARG_XFERRED)#define setIsTransferred(a) ((a) -> argflags |= ARG_XFERRED)#define isThisTransferred(a) ((a) -> argflags & ARG_THIS_XFERRED)#define setIsThisTransferred(a) ((a) -> argflags |= ARG_THIS_XFERRED)#define isTransferredBack(a) ((a) -> argflags & ARG_XFERRED_BACK)#define setIsTransferredBack(a) ((a) -> argflags |= ARG_XFERRED_BACK)#define isArray(a) ((a) -> argflags & ARG_ARRAY)#define setArray(a) ((a) -> argflags |= ARG_ARRAY)#define isArraySize(a) ((a) -> argflags & ARG_ARRAY_SIZE)#define setArraySize(a) ((a) -> argflags |= ARG_ARRAY_SIZE)#define isAllowNone(a) ((a) -> argflags & ARG_ALLOW_NONE)#define setAllowNone(a) ((a) -> argflags |= ARG_ALLOW_NONE)#define isGetWrapper(a) ((a) -> argflags & ARG_GET_WRAPPER)#define setGetWrapper(a) ((a) -> argflags |= ARG_GET_WRAPPER)#define isInArg(a) ((a) -> argflags & ARG_IN)#define setIsInArg(a) ((a) -> argflags |= ARG_IN)#define isOutArg(a) ((a) -> argflags & ARG_OUT)#define setIsOutArg(a) ((a) -> argflags |= ARG_OUT)#define isConstrained(a) ((a) -> argflags & ARG_CONSTRAINED)#define setIsConstrained(a) ((a) -> argflags |= ARG_CONSTRAINED)#define resetIsConstrained(a) ((a) -> argflags &= ~ARG_CONSTRAINED)/* Handle name flags. */#define NAME_IS_USED 0x01 /* It is used in the main module. */#define NAME_IS_CLASS 0x02 /* It is the name of a class. */#define isUsedName(n) ((n) -> nameflags & NAME_IS_USED)#define setIsUsedName(n) ((n) -> nameflags |= NAME_IS_USED)#define resetIsUsedName(n) ((n) -> nameflags &= ~NAME_IS_USED)#define isClassName(n) ((n) -> nameflags & NAME_IS_CLASS)#define setIsClassName(n) ((n) -> nameflags |= NAME_IS_CLASS)#define resetIsClassName(n) ((n) -> nameflags &= ~NAME_IS_CLASS)/* Handle virtual handler flags. */#define VH_IS_DUPLICATE 0x01 /* It is a duplicate. */#define VH_TRANSFERS 0x02 /* It transfers ownership of the result. */#define isDuplicateVH(vh) ((vh) -> vhflags & VH_IS_DUPLICATE)#define setIsDuplicateVH(vh) ((vh) -> vhflags |= VH_IS_DUPLICATE)#define resetIsDuplicateVH(vh) ((vh) -> vhflags &= ~VH_IS_DUPLICATE)#define isTransferVH(vh) ((vh) -> vhflags & VH_TRANSFERS)#define setIsTransferVH(vh) ((vh) -> vhflags |= VH_TRANSFERS)/* Slot types. */typedef enum { str_slot, unicode_slot, int_slot, long_slot, float_slot, len_slot, contains_slot, add_slot, concat_slot, sub_slot, mul_slot, repeat_slot, div_slot, mod_slot, and_slot, or_slot, xor_slot, lshift_slot, rshift_slot, iadd_slot, iconcat_slot, isub_slot,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -