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 PyAPI_DATA(PyTypeObject
) PyLong_Type
;
14 #define PyLong_Check(op) \
15 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
16 #define PyLong_CheckExact(op) (Py_TYPE(op) == &PyLong_Type)
18 PyAPI_FUNC(PyObject
*) PyLong_FromLong(long);
19 PyAPI_FUNC(PyObject
*) PyLong_FromUnsignedLong(unsigned long);
20 PyAPI_FUNC(PyObject
*) PyLong_FromDouble(double);
21 PyAPI_FUNC(PyObject
*) PyLong_FromSize_t(size_t);
22 PyAPI_FUNC(PyObject
*) PyLong_FromSsize_t(Py_ssize_t
);
23 PyAPI_FUNC(long) PyLong_AsLong(PyObject
*);
24 PyAPI_FUNC(long) PyLong_AsLongAndOverflow(PyObject
*, int *);
25 PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLong(PyObject
*);
26 PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject
*);
27 PyAPI_FUNC(Py_ssize_t
) PyLong_AsSsize_t(PyObject
*);
28 PyAPI_FUNC(PyObject
*) PyLong_GetInfo(void);
30 /* For use by intobject.c only */
31 #define _PyLong_AsSsize_t PyLong_AsSsize_t
32 #define _PyLong_FromSize_t PyLong_FromSize_t
33 #define _PyLong_FromSsize_t PyLong_FromSsize_t
34 PyAPI_DATA(int) _PyLong_DigitValue
[256];
36 /* _PyLong_AsScaledDouble returns a double x and an exponent e such that
37 the true value is approximately equal to x * 2**(SHIFT*e). e is >= 0.
38 x is 0.0 if and only if the input is 0 (in which case, e and x are both
39 zeroes). Overflow is impossible. Note that the exponent returned must
40 be multiplied by SHIFT! There may not be enough room in an int to store
42 PyAPI_FUNC(double) _PyLong_AsScaledDouble(PyObject
*vv
, int *e
);
44 PyAPI_FUNC(double) PyLong_AsDouble(PyObject
*);
45 PyAPI_FUNC(PyObject
*) PyLong_FromVoidPtr(void *);
46 PyAPI_FUNC(void *) PyLong_AsVoidPtr(PyObject
*);
49 PyAPI_FUNC(PyObject
*) PyLong_FromLongLong(PY_LONG_LONG
);
50 PyAPI_FUNC(PyObject
*) PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG
);
51 PyAPI_FUNC(PY_LONG_LONG
) PyLong_AsLongLong(PyObject
*);
52 PyAPI_FUNC(unsigned PY_LONG_LONG
) PyLong_AsUnsignedLongLong(PyObject
*);
53 PyAPI_FUNC(unsigned PY_LONG_LONG
) PyLong_AsUnsignedLongLongMask(PyObject
*);
54 #endif /* HAVE_LONG_LONG */
56 PyAPI_FUNC(PyObject
*) PyLong_FromString(char *, char **, int);
57 #ifdef Py_USING_UNICODE
58 PyAPI_FUNC(PyObject
*) PyLong_FromUnicode(Py_UNICODE
*, Py_ssize_t
, int);
61 /* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0.
62 v must not be NULL, and must be a normalized long.
63 There are no error cases.
65 PyAPI_FUNC(int) _PyLong_Sign(PyObject
*v
);
68 /* _PyLong_NumBits. Return the number of bits needed to represent the
69 absolute value of a long. For example, this returns 1 for 1 and -1, 2
70 for 2 and -2, and 2 for 3 and -3. It returns 0 for 0.
71 v must not be NULL, and must be a normalized long.
72 (size_t)-1 is returned and OverflowError set if the true result doesn't
75 PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject
*v
);
77 /* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in
78 base 256, and return a Python long with the same numeric value.
79 If n is 0, the integer is 0. Else:
80 If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB;
81 else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the
83 If is_signed is 0/false, view the bytes as a non-negative integer.
84 If is_signed is 1/true, view the bytes as a 2's-complement integer,
85 non-negative if bit 0x80 of the MSB is clear, negative if set.
87 + Return NULL with the appropriate exception set if there's not
88 enough memory to create the Python long.
90 PyAPI_FUNC(PyObject
*) _PyLong_FromByteArray(
91 const unsigned char* bytes
, size_t n
,
92 int little_endian
, int is_signed
);
94 /* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long
95 v to a base-256 integer, stored in array bytes. Normally return 0,
97 If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at
98 bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and
99 the LSB at bytes[n-1].
100 If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes
101 are filled and there's nothing special about bit 0x80 of the MSB.
102 If is_signed is 1/true, bytes is filled with the 2's-complement
103 representation of v's value. Bit 0x80 of the MSB is the sign bit.
105 + is_signed is 0 and v < 0. TypeError is set in this case, and bytes
107 + n isn't big enough to hold the full mathematical value of v. For
108 example, if is_signed is 0 and there are more digits in the v than
109 fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of
110 being large enough to hold a sign bit. OverflowError is set in this
111 case, but bytes holds the least-signficant n bytes of the true value.
113 PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject
* v
,
114 unsigned char* bytes
, size_t n
,
115 int little_endian
, int is_signed
);
117 /* _PyLong_Format: Convert the long to a string object with given base,
118 appending a base prefix of 0[box] if base is 2, 8 or 16.
119 Add a trailing "L" if addL is non-zero.
120 If newstyle is zero, then use the pre-2.6 behavior of octal having
121 a leading "0", instead of the prefix "0o" */
122 PyAPI_FUNC(PyObject
*) _PyLong_Format(PyObject
*aa
, int base
, int addL
, int newstyle
);
124 /* Format the object based on the format_spec, as defined in PEP 3101
125 (Advanced String Formatting). */
126 PyAPI_FUNC(PyObject
*) _PyLong_FormatAdvanced(PyObject
*obj
,
128 Py_ssize_t format_spec_len
);
133 #endif /* !Py_LONGOBJECT_H */