diff options
Diffstat (limited to 'Include/pyport.h')
-rw-r--r-- | Include/pyport.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/Include/pyport.h b/Include/pyport.h new file mode 100644 index 0000000..558b17d --- /dev/null +++ b/Include/pyport.h @@ -0,0 +1,57 @@ +/*********************************************************** +Copyright (c) 2000, BeOpen.com. +All rights reserved. + +See the file "Misc/COPYRIGHT" for information on usage and +redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. +******************************************************************/ + +#ifndef Py_PYPORT_H +#define Py_PYPORT_H 1 + +/************************************************************************** +Symbols and macros to supply platform-independent interfaces to basic +C-language operations whose spellings vary across platforms. + +Please try to make documentation here as clear as possible: by definition, +the stuff here is trying to illuminate C's darkest corners. + +Config #defines referenced here: + +SIGNED_RIGHT_SHIFT_ZERO_FILLS +Meaning: To be defined iff i>>j does not extend the sign bit when i is a + signed integral type and i < 0. +Used in: Py_ARITHMETIC_RIGHT_SHIFT +**************************************************************************/ + + +#ifdef __cplusplus +extern "C" { +#endif + +/* Py_ARITHMETIC_RIGHT_SHIFT + * C doesn't define whether a right-shift of a signed integer sign-extends + * or zero-fills. Here a macro to force sign extension: + * Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) + * Return I >> J, forcing sign extension. + * Requirements: + * I is of basic signed type TYPE (char, short, int, long, or long long). + * TYPE is one of char, short, int, long, or long long, although long long + * must not be used except on platforms that support it. + * J is an integer >= 0 and strictly less than the number of bits in TYPE + * (because C doesn't define what happens for J outside that range either). + * Caution: + * I may be evaluated more than once. + */ +#ifdef SIGNED_RIGHT_SHIFT_ZERO_FILLS +#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) \ + ((I) < 0 ? ~((~(unsigned TYPE)(I)) >> (J)) : (I) >> (J)) +#else +#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) ((I) >> (J)) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* Py_PYPORT_H */ |