1 #ifndef Py_LONGOBJECT_H
2 #define Py_LONGOBJECT_H
8 /* Long (arbitrary precision) integer object interface */
10 typedef struct _longobject PyLongObject
; /* Revealed in longintrepr.h */
12 extern DL_IMPORT(PyTypeObject
) PyLong_Type
;
14 #define PyLong_Check(op) PyObject_TypeCheck(op, &PyLong_Type)
15 #define PyLong_CheckExact(op) ((op)->ob_type == &PyLong_Type)
17 extern DL_IMPORT(PyObject
*) PyLong_FromLong(long);
18 extern DL_IMPORT(PyObject
*) PyLong_FromUnsignedLong(unsigned long);
19 extern DL_IMPORT(PyObject
*) PyLong_FromDouble(double);
20 extern DL_IMPORT(long) PyLong_AsLong(PyObject
*);
21 extern DL_IMPORT(unsigned long) PyLong_AsUnsignedLong(PyObject
*);
23 /* _PyLong_AsScaledDouble returns a double x and an exponent e such that
24 the true value is approximately equal to x * 2**(SHIFT*e). e is >= 0.
25 x is 0.0 if and only if the input is 0 (in which case, e and x are both
26 zeroes). Overflow is impossible. Note that the exponent returned must
27 be multiplied by SHIFT! There may not be enough room in an int to store
29 extern DL_IMPORT(double) _PyLong_AsScaledDouble(PyObject
*vv
, int *e
);
31 extern DL_IMPORT(double) PyLong_AsDouble(PyObject
*);
32 extern DL_IMPORT(PyObject
*) PyLong_FromVoidPtr(void *);
33 extern DL_IMPORT(void *) PyLong_AsVoidPtr(PyObject
*);
37 /* Hopefully this is portable... */
39 #define ULONG_MAX 4294967295U
42 #define LONGLONG_MAX 9223372036854775807LL
45 #define ULONGLONG_MAX 0xffffffffffffffffULL
48 extern DL_IMPORT(PyObject
*) PyLong_FromLongLong(LONG_LONG
);
49 extern DL_IMPORT(PyObject
*) PyLong_FromUnsignedLongLong(unsigned LONG_LONG
);
50 extern DL_IMPORT(LONG_LONG
) PyLong_AsLongLong(PyObject
*);
51 extern DL_IMPORT(unsigned LONG_LONG
) PyLong_AsUnsignedLongLong(PyObject
*);
52 #endif /* HAVE_LONG_LONG */
54 DL_IMPORT(PyObject
*) PyLong_FromString(char *, char **, int);
55 #ifdef Py_USING_UNICODE
56 DL_IMPORT(PyObject
*) PyLong_FromUnicode(Py_UNICODE
*, int, int);
59 /* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in
60 base 256, and return a Python long with the same numeric value.
61 If n is 0, the integer is 0. Else:
62 If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB;
63 else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the
65 If is_signed is 0/false, view the bytes as a non-negative integer.
66 If is_signed is 1/true, view the bytes as a 2's-complement integer,
67 non-negative if bit 0x80 of the MSB is clear, negative if set.
69 + Return NULL with the appropriate exception set if there's not
70 enough memory to create the Python long.
72 extern DL_IMPORT(PyObject
*) _PyLong_FromByteArray(
73 const unsigned char* bytes
, size_t n
,
74 int little_endian
, int is_signed
);
76 /* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long
77 v to a base-256 integer, stored in array bytes. Normally return 0,
79 If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at
80 bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and
81 the LSB at bytes[n-1].
82 If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes
83 are filled and there's nothing special about bit 0x80 of the MSB.
84 If is_signed is 1/true, bytes is filled with the 2's-complement
85 representation of v's value. Bit 0x80 of the MSB is the sign bit.
87 + is_signed is 0 and v < 0. TypeError is set in this case, and bytes
89 + n isn't big enough to hold the full mathematical value of v. For
90 example, if is_signed is 0 and there are more digits in the v than
91 fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of
92 being large enough to hold a sign bit. OverflowError is set in this
93 case, but bytes holds the least-signficant n bytes of the true value.
95 extern DL_IMPORT(int) _PyLong_AsByteArray(PyLongObject
* v
,
96 unsigned char* bytes
, size_t n
,
97 int little_endian
, int is_signed
);
102 #endif /* !Py_LONGOBJECT_H */