blob: 925e19a35fb3eac5868c6ca4e6859376d28a73d5 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00002Copyright (c) 2000, BeOpen.com.
3Copyright (c) 1995-2000, Corporation for National Research Initiatives.
4Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
5All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00006
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007See the file "Misc/COPYRIGHT" for information on usage and
8redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009******************************************************************/
10
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000011/* Integer object interface */
12
13/*
Guido van Rossumcaa63801995-01-12 11:45:45 +000014PyIntObject represents a (long) integer. This is an immutable object;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000015an integer cannot change its value after creation.
16
17There are functions to create new integer objects, to test an object
18for integer-ness, and to get the integer value. The latter functions
Guido van Rossumcaa63801995-01-12 11:45:45 +000019returns -1 and sets errno to EBADF if the object is not an PyIntObject.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000020None of the functions should be applied to nil objects.
21
Guido van Rossumcaa63801995-01-12 11:45:45 +000022The type PyIntObject is (unfortunately) exposed here so we can declare
23_Py_TrueStruct and _Py_ZeroStruct below; don't use this.
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000024*/
25
Fred Drakeea9cb5a2000-07-09 00:20:36 +000026#ifndef Py_INTOBJECT_H
27#define Py_INTOBJECT_H
28#ifdef __cplusplus
29extern "C" {
30#endif
31
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000032typedef struct {
Fred Drakeea9cb5a2000-07-09 00:20:36 +000033 PyObject_HEAD
34 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
Fred Drakeea9cb5a2000-07-09 00:20:36 +000041extern DL_IMPORT(PyObject *) PyInt_FromString(char*, char**, int);
42extern DL_IMPORT(PyObject *) PyInt_FromUnicode(Py_UNICODE*, int, int);
43extern DL_IMPORT(PyObject *) PyInt_FromLong(long);
44extern DL_IMPORT(long) PyInt_AsLong(PyObject *);
45extern DL_IMPORT(long) PyInt_GetMax(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 */
Fred Drakeea9cb5a2000-07-09 00:20:36 +000071extern DL_IMPORT(unsigned long) PyOS_strtoul(char *, char **, int);
72extern DL_IMPORT(long) PyOS_strtol(char *, char **, int);
Guido van Rossumcc34faa1998-12-10 16:54:17 +000073
Guido van Rossuma3309961993-07-28 09:05:47 +000074#ifdef __cplusplus
75}
76#endif
77#endif /* !Py_INTOBJECT_H */