blob: 24bcbf063d43657a2fd6b0ebc358f39947393ee4 [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
13Permission to use, copy, modify, and distribute this software and its
14documentation for any purpose and without fee is hereby granted,
15provided that the above copyright notice appear in all copies and that
16both that copyright notice and this permission notice appear in
17supporting documentation, and that the names of Stichting Mathematisch
18Centrum or CWI not be used in advertising or publicity pertaining to
19distribution of the software without specific, written prior permission.
20
21STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
22THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
23FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
24FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
25WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
26ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
27OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
28
29******************************************************************/
30
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000031/* Integer object interface */
32
33/*
34123456789-123456789-123456789-123456789-123456789-123456789-123456789-12
35
Guido van Rossumcaa63801995-01-12 11:45:45 +000036PyIntObject represents a (long) integer. This is an immutable object;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000037an integer cannot change its value after creation.
38
39There are functions to create new integer objects, to test an object
40for integer-ness, and to get the integer value. The latter functions
Guido van Rossumcaa63801995-01-12 11:45:45 +000041returns -1 and sets errno to EBADF if the object is not an PyIntObject.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000042None of the functions should be applied to nil objects.
43
Guido van Rossumcaa63801995-01-12 11:45:45 +000044The type PyIntObject is (unfortunately) exposed here so we can declare
45_Py_TrueStruct and _Py_ZeroStruct below; don't use this.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000046*/
47
48typedef struct {
Guido van Rossumcaa63801995-01-12 11:45:45 +000049 PyObject_HEAD
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000050 long ob_ival;
Guido van Rossumcaa63801995-01-12 11:45:45 +000051} PyIntObject;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000052
Guido van Rossum051ab121995-02-27 10:17:52 +000053extern DL_IMPORT(PyTypeObject) PyInt_Type;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000054
Guido van Rossumcaa63801995-01-12 11:45:45 +000055#define PyInt_Check(op) ((op)->ob_type == &PyInt_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000056
Guido van Rossumcaa63801995-01-12 11:45:45 +000057extern PyObject *PyInt_FromLong Py_PROTO((long));
58extern long PyInt_AsLong Py_PROTO((PyObject *));
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000059
60
61/*
62123456789-123456789-123456789-123456789-123456789-123456789-123456789-12
63
64False and True are special intobjects used by Boolean expressions.
65All values of type Boolean must point to either of these; but in
66contexts where integers are required they are integers (valued 0 and 1).
67Hope these macros don't conflict with other people's.
68
Guido van Rossumcaa63801995-01-12 11:45:45 +000069Don't forget to apply Py_INCREF() when returning True or False!!!
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000070*/
71
Guido van Rossum051ab121995-02-27 10:17:52 +000072extern DL_IMPORT(PyIntObject) _Py_ZeroStruct, _Py_TrueStruct; /* Don't use these directly */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000073
Guido van Rossumcaa63801995-01-12 11:45:45 +000074#define Py_False ((PyObject *) &_Py_ZeroStruct)
75#define Py_True ((PyObject *) &_Py_TrueStruct)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000076
77/* Macro, trading safety for speed */
Guido van Rossumcaa63801995-01-12 11:45:45 +000078#define PyInt_AS_LONG(op) ((op)->ob_ival)
Guido van Rossuma3309961993-07-28 09:05:47 +000079
80#ifdef __cplusplus
81}
82#endif
83#endif /* !Py_INTOBJECT_H */