blob: 50a74746b20144c82de104845ccb5adf0b41acc2 [file] [log] [blame]
Guido van Rossuma3309961993-07-28 09:05:47 +00001#ifndef Py_INTOBJECT_H
2#define Py_INTOBJECT_H
3#ifdef __cplusplus
4extern "C" {
5#endif
6
Guido van Rossumf70e43a1991-02-19 12:39:46 +00007/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00008Copyright (c) 2000, BeOpen.com.
9Copyright (c) 1995-2000, Corporation for National Research Initiatives.
10Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
11All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000012
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000013See the file "Misc/COPYRIGHT" for information on usage and
14redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000015******************************************************************/
16
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000017/* Integer object interface */
18
19/*
Guido van Rossumcaa63801995-01-12 11:45:45 +000020PyIntObject represents a (long) integer. This is an immutable object;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000021an integer cannot change its value after creation.
22
23There are functions to create new integer objects, to test an object
24for integer-ness, and to get the integer value. The latter functions
Guido van Rossumcaa63801995-01-12 11:45:45 +000025returns -1 and sets errno to EBADF if the object is not an PyIntObject.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000026None of the functions should be applied to nil objects.
27
Guido van Rossumcaa63801995-01-12 11:45:45 +000028The type PyIntObject is (unfortunately) exposed here so we can declare
29_Py_TrueStruct and _Py_ZeroStruct below; don't use this.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000030*/
31
32typedef struct {
Guido van Rossumcaa63801995-01-12 11:45:45 +000033 PyObject_HEAD
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000034 long ob_ival;
Guido van Rossumcaa63801995-01-12 11:45:45 +000035} PyIntObject;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000036
Guido van Rossum051ab121995-02-27 10:17:52 +000037extern DL_IMPORT(PyTypeObject) PyInt_Type;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000038
Guido van Rossumcaa63801995-01-12 11:45:45 +000039#define PyInt_Check(op) ((op)->ob_type == &PyInt_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000040
Barry Warsaw226ae6c1999-10-12 19:54:53 +000041extern DL_IMPORT(PyObject *) PyInt_FromString Py_PROTO((char*, char**, int));
Guido van Rossum9e896b32000-04-05 20:11:21 +000042extern DL_IMPORT(PyObject *) PyInt_FromUnicode Py_PROTO((Py_UNICODE*, int, int));
Guido van Rossum43466ec1998-12-04 18:48:25 +000043extern DL_IMPORT(PyObject *) PyInt_FromLong Py_PROTO((long));
44extern DL_IMPORT(long) PyInt_AsLong Py_PROTO((PyObject *));
45extern DL_IMPORT(long) PyInt_GetMax Py_PROTO((void));
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000046
47
48/*
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000049False and True are special intobjects used by Boolean expressions.
50All values of type Boolean must point to either of these; but in
51contexts where integers are required they are integers (valued 0 and 1).
52Hope these macros don't conflict with other people's.
53
Guido van Rossumcaa63801995-01-12 11:45:45 +000054Don't forget to apply Py_INCREF() when returning True or False!!!
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000055*/
56
Guido van Rossum051ab121995-02-27 10:17:52 +000057extern DL_IMPORT(PyIntObject) _Py_ZeroStruct, _Py_TrueStruct; /* Don't use these directly */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000058
Guido van Rossumcaa63801995-01-12 11:45:45 +000059#define Py_False ((PyObject *) &_Py_ZeroStruct)
60#define Py_True ((PyObject *) &_Py_TrueStruct)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000061
62/* Macro, trading safety for speed */
Guido van Rossum7a2d6111997-08-02 02:41:13 +000063#define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival)
Guido van Rossuma3309961993-07-28 09:05:47 +000064
Guido van Rossumcc34faa1998-12-10 16:54:17 +000065/* These aren't really part of the Int object, but they're handy; the protos
66 * are necessary for systems that need the magic of DL_IMPORT and that want
67 * to have stropmodule as a dynamically loaded module instead of building it
68 * into the main Python shared library/DLL. Guido thinks I'm weird for
69 * building it this way. :-) [cjh]
70 */
71extern DL_IMPORT(unsigned long) PyOS_strtoul Py_PROTO((char *, char **, int));
72extern DL_IMPORT(long) PyOS_strtol Py_PROTO((char *, char **, int));
73
Guido van Rossuma3309961993-07-28 09:05:47 +000074#ifdef __cplusplus
75}
76#endif
77#endif /* !Py_INTOBJECT_H */