Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | |
2 | /* Integer object interface */ | |
3 | ||
4 | /* | |
5 | PyIntObject represents a (long) integer. This is an immutable object; | |
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 | |
10 | returns -1 and sets errno to EBADF if the object is not an PyIntObject. | |
11 | None of the functions should be applied to nil objects. | |
12 | ||
13 | The type PyIntObject is (unfortunately) exposed here so we can declare | |
14 | _Py_TrueStruct and _Py_ZeroStruct in boolobject.h; don't use this. | |
15 | */ | |
16 | ||
17 | #ifndef Py_INTOBJECT_H | |
18 | #define Py_INTOBJECT_H | |
19 | #ifdef __cplusplus | |
20 | extern "C" { | |
21 | #endif | |
22 | ||
23 | typedef struct { | |
24 | PyObject_HEAD | |
25 | long ob_ival; | |
26 | } PyIntObject; | |
27 | ||
28 | PyAPI_DATA(PyTypeObject) PyInt_Type; | |
29 | ||
30 | #define PyInt_Check(op) PyObject_TypeCheck(op, &PyInt_Type) | |
31 | #define PyInt_CheckExact(op) ((op)->ob_type == &PyInt_Type) | |
32 | ||
33 | PyAPI_FUNC(PyObject *) PyInt_FromString(char*, char**, int); | |
34 | #ifdef Py_USING_UNICODE | |
35 | PyAPI_FUNC(PyObject *) PyInt_FromUnicode(Py_UNICODE*, int, int); | |
36 | #endif | |
37 | PyAPI_FUNC(PyObject *) PyInt_FromLong(long); | |
38 | PyAPI_FUNC(long) PyInt_AsLong(PyObject *); | |
39 | PyAPI_FUNC(unsigned long) PyInt_AsUnsignedLongMask(PyObject *); | |
40 | #ifdef HAVE_LONG_LONG | |
41 | PyAPI_FUNC(unsigned PY_LONG_LONG) PyInt_AsUnsignedLongLongMask(PyObject *); | |
42 | #endif | |
43 | ||
44 | PyAPI_FUNC(long) PyInt_GetMax(void); | |
45 | ||
46 | /* Macro, trading safety for speed */ | |
47 | #define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival) | |
48 | ||
49 | /* These aren't really part of the Int object, but they're handy; the protos | |
50 | * are necessary for systems that need the magic of PyAPI_FUNC and that want | |
51 | * to have stropmodule as a dynamically loaded module instead of building it | |
52 | * into the main Python shared library/DLL. Guido thinks I'm weird for | |
53 | * building it this way. :-) [cjh] | |
54 | */ | |
55 | PyAPI_FUNC(unsigned long) PyOS_strtoul(char *, char **, int); | |
56 | PyAPI_FUNC(long) PyOS_strtol(char *, char **, int); | |
57 | ||
58 | #ifdef __cplusplus | |
59 | } | |
60 | #endif | |
61 | #endif /* !Py_INTOBJECT_H */ |