blob: b61326739b7ce63c1dac72a88c2df6ce574eb219 [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 Rossum5799b521995-01-04 19:06:22 +00008Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
9The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000010
11 All Rights Reserved
12
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000013Copyright (c) 2000, BeOpen.com.
14Copyright (c) 1995-2000, Corporation for National Research Initiatives.
15Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
16All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000017
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000018See the file "Misc/COPYRIGHT" for information on usage and
19redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000020
21******************************************************************/
22
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000023/* Integer object interface */
24
25/*
Guido van Rossumcaa63801995-01-12 11:45:45 +000026PyIntObject represents a (long) integer. This is an immutable object;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000027an integer cannot change its value after creation.
28
29There are functions to create new integer objects, to test an object
30for integer-ness, and to get the integer value. The latter functions
Guido van Rossumcaa63801995-01-12 11:45:45 +000031returns -1 and sets errno to EBADF if the object is not an PyIntObject.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000032None of the functions should be applied to nil objects.
33
Guido van Rossumcaa63801995-01-12 11:45:45 +000034The type PyIntObject is (unfortunately) exposed here so we can declare
35_Py_TrueStruct and _Py_ZeroStruct below; don't use this.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000036*/
37
38typedef struct {
Guido van Rossumcaa63801995-01-12 11:45:45 +000039 PyObject_HEAD
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000040 long ob_ival;
Guido van Rossumcaa63801995-01-12 11:45:45 +000041} PyIntObject;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000042
Guido van Rossum051ab121995-02-27 10:17:52 +000043extern DL_IMPORT(PyTypeObject) PyInt_Type;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000044
Guido van Rossumcaa63801995-01-12 11:45:45 +000045#define PyInt_Check(op) ((op)->ob_type == &PyInt_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000046
Barry Warsaw226ae6c1999-10-12 19:54:53 +000047extern DL_IMPORT(PyObject *) PyInt_FromString Py_PROTO((char*, char**, int));
Guido van Rossum9e896b32000-04-05 20:11:21 +000048extern DL_IMPORT(PyObject *) PyInt_FromUnicode Py_PROTO((Py_UNICODE*, int, int));
Guido van Rossum43466ec1998-12-04 18:48:25 +000049extern DL_IMPORT(PyObject *) PyInt_FromLong Py_PROTO((long));
50extern DL_IMPORT(long) PyInt_AsLong Py_PROTO((PyObject *));
51extern DL_IMPORT(long) PyInt_GetMax Py_PROTO((void));
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000052
53
54/*
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000055False and True are special intobjects used by Boolean expressions.
56All values of type Boolean must point to either of these; but in
57contexts where integers are required they are integers (valued 0 and 1).
58Hope these macros don't conflict with other people's.
59
Guido van Rossumcaa63801995-01-12 11:45:45 +000060Don't forget to apply Py_INCREF() when returning True or False!!!
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000061*/
62
Guido van Rossum051ab121995-02-27 10:17:52 +000063extern DL_IMPORT(PyIntObject) _Py_ZeroStruct, _Py_TrueStruct; /* Don't use these directly */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000064
Guido van Rossumcaa63801995-01-12 11:45:45 +000065#define Py_False ((PyObject *) &_Py_ZeroStruct)
66#define Py_True ((PyObject *) &_Py_TrueStruct)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000067
68/* Macro, trading safety for speed */
Guido van Rossum7a2d6111997-08-02 02:41:13 +000069#define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival)
Guido van Rossuma3309961993-07-28 09:05:47 +000070
Guido van Rossumcc34faa1998-12-10 16:54:17 +000071/* These aren't really part of the Int object, but they're handy; the protos
72 * are necessary for systems that need the magic of DL_IMPORT and that want
73 * to have stropmodule as a dynamically loaded module instead of building it
74 * into the main Python shared library/DLL. Guido thinks I'm weird for
75 * building it this way. :-) [cjh]
76 */
77extern DL_IMPORT(unsigned long) PyOS_strtoul Py_PROTO((char *, char **, int));
78extern DL_IMPORT(long) PyOS_strtol Py_PROTO((char *, char **, int));
79
Guido van Rossuma3309961993-07-28 09:05:47 +000080#ifdef __cplusplus
81}
82#endif
83#endif /* !Py_INTOBJECT_H */