| Guido van Rossum | f70e43a | 1991-02-19 12:39:46 +0000 | [diff] [blame] | 1 |  | 
| Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 2 | /* Integer object interface */ | 
 | 3 |  | 
 | 4 | /* | 
| Guido van Rossum | caa6380 | 1995-01-12 11:45:45 +0000 | [diff] [blame] | 5 | PyIntObject represents a (long) integer.  This is an immutable object; | 
| Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 6 | an integer cannot change its value after creation. | 
 | 7 |  | 
 | 8 | There are functions to create new integer objects, to test an object | 
 | 9 | for integer-ness, and to get the integer value.  The latter functions | 
| Guido van Rossum | caa6380 | 1995-01-12 11:45:45 +0000 | [diff] [blame] | 10 | returns -1 and sets errno to EBADF if the object is not an PyIntObject. | 
| Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 11 | None of the functions should be applied to nil objects. | 
 | 12 |  | 
| Guido van Rossum | caa6380 | 1995-01-12 11:45:45 +0000 | [diff] [blame] | 13 | The type PyIntObject is (unfortunately) exposed here so we can declare | 
| Armin Rigo | 89a3946 | 2004-10-28 16:32:00 +0000 | [diff] [blame] | 14 | _Py_TrueStruct and _Py_ZeroStruct in boolobject.h; don't use this. | 
| Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 15 | */ | 
 | 16 |  | 
| Fred Drake | ea9cb5a | 2000-07-09 00:20:36 +0000 | [diff] [blame] | 17 | #ifndef Py_INTOBJECT_H | 
 | 18 | #define Py_INTOBJECT_H | 
 | 19 | #ifdef __cplusplus | 
 | 20 | extern "C" { | 
 | 21 | #endif | 
 | 22 |  | 
| Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 23 | typedef struct { | 
| Fred Drake | ea9cb5a | 2000-07-09 00:20:36 +0000 | [diff] [blame] | 24 |     PyObject_HEAD | 
 | 25 |     long ob_ival; | 
| Guido van Rossum | caa6380 | 1995-01-12 11:45:45 +0000 | [diff] [blame] | 26 | } PyIntObject; | 
| Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 27 |  | 
| Mark Hammond | 91a681d | 2002-08-12 07:21:58 +0000 | [diff] [blame] | 28 | PyAPI_DATA(PyTypeObject) PyInt_Type; | 
| Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 29 |  | 
| Neal Norwitz | ee3a1b5 | 2007-02-25 19:44:48 +0000 | [diff] [blame] | 30 | #define PyInt_Check(op) \ | 
 | 31 | 		 PyType_FastSubclass((op)->ob_type, Py_TPFLAGS_INT_SUBCLASS) | 
| Tim Peters | 64b5ce3 | 2001-09-10 20:52:51 +0000 | [diff] [blame] | 32 | #define PyInt_CheckExact(op) ((op)->ob_type == &PyInt_Type) | 
| Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 33 |  | 
| Mark Hammond | 91a681d | 2002-08-12 07:21:58 +0000 | [diff] [blame] | 34 | PyAPI_FUNC(PyObject *) PyInt_FromString(char*, char**, int); | 
| Martin v. Löwis | 339d0f7 | 2001-08-17 18:39:25 +0000 | [diff] [blame] | 35 | #ifdef Py_USING_UNICODE | 
| Martin v. Löwis | 18e1655 | 2006-02-15 17:27:45 +0000 | [diff] [blame] | 36 | PyAPI_FUNC(PyObject *) PyInt_FromUnicode(Py_UNICODE*, Py_ssize_t, int); | 
| Martin v. Löwis | 339d0f7 | 2001-08-17 18:39:25 +0000 | [diff] [blame] | 37 | #endif | 
| Mark Hammond | 91a681d | 2002-08-12 07:21:58 +0000 | [diff] [blame] | 38 | PyAPI_FUNC(PyObject *) PyInt_FromLong(long); | 
| Martin v. Löwis | 18e1655 | 2006-02-15 17:27:45 +0000 | [diff] [blame] | 39 | PyAPI_FUNC(PyObject *) PyInt_FromSize_t(size_t); | 
 | 40 | PyAPI_FUNC(PyObject *) PyInt_FromSsize_t(Py_ssize_t); | 
| Mark Hammond | 91a681d | 2002-08-12 07:21:58 +0000 | [diff] [blame] | 41 | PyAPI_FUNC(long) PyInt_AsLong(PyObject *); | 
| Martin v. Löwis | 18e1655 | 2006-02-15 17:27:45 +0000 | [diff] [blame] | 42 | PyAPI_FUNC(Py_ssize_t) PyInt_AsSsize_t(PyObject *); | 
| Thomas Heller | a4ea603 | 2003-04-17 18:55:45 +0000 | [diff] [blame] | 43 | PyAPI_FUNC(unsigned long) PyInt_AsUnsignedLongMask(PyObject *); | 
 | 44 | #ifdef HAVE_LONG_LONG | 
 | 45 | PyAPI_FUNC(unsigned PY_LONG_LONG) PyInt_AsUnsignedLongLongMask(PyObject *); | 
 | 46 | #endif | 
 | 47 |  | 
| Mark Hammond | 91a681d | 2002-08-12 07:21:58 +0000 | [diff] [blame] | 48 | PyAPI_FUNC(long) PyInt_GetMax(void); | 
| Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 49 |  | 
| Guido van Rossum | 85a5fbb | 1990-10-14 12:07:46 +0000 | [diff] [blame] | 50 | /* Macro, trading safety for speed */ | 
| Guido van Rossum | 7a2d611 | 1997-08-02 02:41:13 +0000 | [diff] [blame] | 51 | #define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival) | 
| Guido van Rossum | a330996 | 1993-07-28 09:05:47 +0000 | [diff] [blame] | 52 |  | 
| Guido van Rossum | cc34faa | 1998-12-10 16:54:17 +0000 | [diff] [blame] | 53 | /* These aren't really part of the Int object, but they're handy; the protos | 
| Mark Hammond | 91a681d | 2002-08-12 07:21:58 +0000 | [diff] [blame] | 54 |  * are necessary for systems that need the magic of PyAPI_FUNC and that want | 
| Guido van Rossum | cc34faa | 1998-12-10 16:54:17 +0000 | [diff] [blame] | 55 |  * to have stropmodule as a dynamically loaded module instead of building it | 
 | 56 |  * into the main Python shared library/DLL.  Guido thinks I'm weird for | 
 | 57 |  * building it this way.  :-)  [cjh] | 
 | 58 |  */ | 
| Mark Hammond | 91a681d | 2002-08-12 07:21:58 +0000 | [diff] [blame] | 59 | PyAPI_FUNC(unsigned long) PyOS_strtoul(char *, char **, int); | 
 | 60 | PyAPI_FUNC(long) PyOS_strtol(char *, char **, int); | 
| Guido van Rossum | cc34faa | 1998-12-10 16:54:17 +0000 | [diff] [blame] | 61 |  | 
| Christian Heimes | 422051a | 2008-02-04 18:00:12 +0000 | [diff] [blame] | 62 | /* free list api */ | 
| Gregory P. Smith | 2fe7706 | 2008-07-06 03:35:58 +0000 | [diff] [blame] | 63 | PyAPI_FUNC(int) PyInt_ClearFreeList(void); | 
| Christian Heimes | 422051a | 2008-02-04 18:00:12 +0000 | [diff] [blame] | 64 |  | 
| Eric Smith | 5e527eb | 2008-02-10 01:36:53 +0000 | [diff] [blame] | 65 | /* Convert an integer to the given base.  Returns a string. | 
 | 66 |    If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'. | 
 | 67 |    If newstyle is zero, then use the pre-2.6 behavior of octal having | 
 | 68 |    a leading "0" */ | 
 | 69 | PyAPI_FUNC(PyObject*) _PyInt_Format(PyIntObject* v, int base, int newstyle); | 
 | 70 |  | 
| Eric Smith | dc13b79 | 2008-05-30 18:10:04 +0000 | [diff] [blame] | 71 | /* Format the object based on the format_spec, as defined in PEP 3101 | 
 | 72 |    (Advanced String Formatting). */ | 
 | 73 | PyAPI_FUNC(PyObject *) _PyInt_FormatAdvanced(PyObject *obj, | 
 | 74 | 					     char *format_spec, | 
 | 75 | 					     Py_ssize_t format_spec_len); | 
 | 76 |  | 
| Guido van Rossum | a330996 | 1993-07-28 09:05:47 +0000 | [diff] [blame] | 77 | #ifdef __cplusplus | 
 | 78 | } | 
 | 79 | #endif | 
 | 80 | #endif /* !Py_INTOBJECT_H */ |