[2] | 1 | #ifndef Py_LONGOBJECT_H
|
---|
| 2 | #define Py_LONGOBJECT_H
|
---|
| 3 | #ifdef __cplusplus
|
---|
| 4 | extern "C" {
|
---|
| 5 | #endif
|
---|
| 6 |
|
---|
| 7 |
|
---|
| 8 | /* Long (arbitrary precision) integer object interface */
|
---|
| 9 |
|
---|
| 10 | typedef struct _longobject PyLongObject; /* Revealed in longintrepr.h */
|
---|
| 11 |
|
---|
| 12 | PyAPI_DATA(PyTypeObject) PyLong_Type;
|
---|
| 13 |
|
---|
| 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)
|
---|
| 17 |
|
---|
| 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 *);
|
---|
[391] | 24 | PyAPI_FUNC(long) PyLong_AsLongAndOverflow(PyObject *, int *);
|
---|
[2] | 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 *);
|
---|
[391] | 28 | PyAPI_FUNC(int) _PyLong_AsInt(PyObject *);
|
---|
| 29 | PyAPI_FUNC(PyObject *) PyLong_GetInfo(void);
|
---|
[2] | 30 |
|
---|
| 31 | /* For use by intobject.c only */
|
---|
| 32 | #define _PyLong_AsSsize_t PyLong_AsSsize_t
|
---|
| 33 | #define _PyLong_FromSize_t PyLong_FromSize_t
|
---|
| 34 | #define _PyLong_FromSsize_t PyLong_FromSsize_t
|
---|
| 35 | PyAPI_DATA(int) _PyLong_DigitValue[256];
|
---|
| 36 |
|
---|
[391] | 37 | /* _PyLong_Frexp returns a double x and an exponent e such that the
|
---|
| 38 | true value is approximately equal to x * 2**e. e is >= 0. x is
|
---|
| 39 | 0.0 if and only if the input is 0 (in which case, e and x are both
|
---|
| 40 | zeroes); otherwise, 0.5 <= abs(x) < 1.0. On overflow, which is
|
---|
| 41 | possible if the number of bits doesn't fit into a Py_ssize_t, sets
|
---|
| 42 | OverflowError and returns -1.0 for x, 0 for e. */
|
---|
| 43 | PyAPI_FUNC(double) _PyLong_Frexp(PyLongObject *a, Py_ssize_t *e);
|
---|
[2] | 44 |
|
---|
| 45 | PyAPI_FUNC(double) PyLong_AsDouble(PyObject *);
|
---|
| 46 | PyAPI_FUNC(PyObject *) PyLong_FromVoidPtr(void *);
|
---|
| 47 | PyAPI_FUNC(void *) PyLong_AsVoidPtr(PyObject *);
|
---|
| 48 |
|
---|
| 49 | #ifdef HAVE_LONG_LONG
|
---|
| 50 | PyAPI_FUNC(PyObject *) PyLong_FromLongLong(PY_LONG_LONG);
|
---|
| 51 | PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG);
|
---|
| 52 | PyAPI_FUNC(PY_LONG_LONG) PyLong_AsLongLong(PyObject *);
|
---|
| 53 | PyAPI_FUNC(unsigned PY_LONG_LONG) PyLong_AsUnsignedLongLong(PyObject *);
|
---|
| 54 | PyAPI_FUNC(unsigned PY_LONG_LONG) PyLong_AsUnsignedLongLongMask(PyObject *);
|
---|
[391] | 55 | PyAPI_FUNC(PY_LONG_LONG) PyLong_AsLongLongAndOverflow(PyObject *, int *);
|
---|
[2] | 56 | #endif /* HAVE_LONG_LONG */
|
---|
| 57 |
|
---|
| 58 | PyAPI_FUNC(PyObject *) PyLong_FromString(char *, char **, int);
|
---|
| 59 | #ifdef Py_USING_UNICODE
|
---|
| 60 | PyAPI_FUNC(PyObject *) PyLong_FromUnicode(Py_UNICODE*, Py_ssize_t, int);
|
---|
| 61 | #endif
|
---|
| 62 |
|
---|
| 63 | /* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0.
|
---|
| 64 | v must not be NULL, and must be a normalized long.
|
---|
| 65 | There are no error cases.
|
---|
| 66 | */
|
---|
| 67 | PyAPI_FUNC(int) _PyLong_Sign(PyObject *v);
|
---|
| 68 |
|
---|
| 69 |
|
---|
| 70 | /* _PyLong_NumBits. Return the number of bits needed to represent the
|
---|
| 71 | absolute value of a long. For example, this returns 1 for 1 and -1, 2
|
---|
| 72 | for 2 and -2, and 2 for 3 and -3. It returns 0 for 0.
|
---|
| 73 | v must not be NULL, and must be a normalized long.
|
---|
| 74 | (size_t)-1 is returned and OverflowError set if the true result doesn't
|
---|
| 75 | fit in a size_t.
|
---|
| 76 | */
|
---|
| 77 | PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v);
|
---|
| 78 |
|
---|
| 79 | /* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in
|
---|
| 80 | base 256, and return a Python long with the same numeric value.
|
---|
| 81 | If n is 0, the integer is 0. Else:
|
---|
| 82 | If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB;
|
---|
| 83 | else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the
|
---|
| 84 | LSB.
|
---|
| 85 | If is_signed is 0/false, view the bytes as a non-negative integer.
|
---|
| 86 | If is_signed is 1/true, view the bytes as a 2's-complement integer,
|
---|
| 87 | non-negative if bit 0x80 of the MSB is clear, negative if set.
|
---|
| 88 | Error returns:
|
---|
| 89 | + Return NULL with the appropriate exception set if there's not
|
---|
| 90 | enough memory to create the Python long.
|
---|
| 91 | */
|
---|
| 92 | PyAPI_FUNC(PyObject *) _PyLong_FromByteArray(
|
---|
| 93 | const unsigned char* bytes, size_t n,
|
---|
| 94 | int little_endian, int is_signed);
|
---|
| 95 |
|
---|
| 96 | /* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long
|
---|
| 97 | v to a base-256 integer, stored in array bytes. Normally return 0,
|
---|
| 98 | return -1 on error.
|
---|
| 99 | If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at
|
---|
| 100 | bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and
|
---|
| 101 | the LSB at bytes[n-1].
|
---|
| 102 | If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes
|
---|
| 103 | are filled and there's nothing special about bit 0x80 of the MSB.
|
---|
| 104 | If is_signed is 1/true, bytes is filled with the 2's-complement
|
---|
| 105 | representation of v's value. Bit 0x80 of the MSB is the sign bit.
|
---|
| 106 | Error returns (-1):
|
---|
| 107 | + is_signed is 0 and v < 0. TypeError is set in this case, and bytes
|
---|
| 108 | isn't altered.
|
---|
| 109 | + n isn't big enough to hold the full mathematical value of v. For
|
---|
| 110 | example, if is_signed is 0 and there are more digits in the v than
|
---|
| 111 | fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of
|
---|
| 112 | being large enough to hold a sign bit. OverflowError is set in this
|
---|
| 113 | case, but bytes holds the least-signficant n bytes of the true value.
|
---|
| 114 | */
|
---|
| 115 | PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,
|
---|
| 116 | unsigned char* bytes, size_t n,
|
---|
| 117 | int little_endian, int is_signed);
|
---|
| 118 |
|
---|
| 119 | /* _PyLong_Format: Convert the long to a string object with given base,
|
---|
| 120 | appending a base prefix of 0[box] if base is 2, 8 or 16.
|
---|
| 121 | Add a trailing "L" if addL is non-zero.
|
---|
| 122 | If newstyle is zero, then use the pre-2.6 behavior of octal having
|
---|
| 123 | a leading "0", instead of the prefix "0o" */
|
---|
| 124 | PyAPI_FUNC(PyObject *) _PyLong_Format(PyObject *aa, int base, int addL, int newstyle);
|
---|
| 125 |
|
---|
| 126 | /* Format the object based on the format_spec, as defined in PEP 3101
|
---|
| 127 | (Advanced String Formatting). */
|
---|
| 128 | PyAPI_FUNC(PyObject *) _PyLong_FormatAdvanced(PyObject *obj,
|
---|
| 129 | char *format_spec,
|
---|
| 130 | Py_ssize_t format_spec_len);
|
---|
| 131 |
|
---|
| 132 | #ifdef __cplusplus
|
---|
| 133 | }
|
---|
| 134 | #endif
|
---|
| 135 | #endif /* !Py_LONGOBJECT_H */
|
---|