1 #ifndef Py_CPYTHON_LONGOBJECT_H 2 # error "this header file must not be included directly" 3 #endif 4 5 PyAPI_FUNC(PyObject*) PyLong_FromUnicodeObject(PyObject *u, int base); 6 7 #define Py_ASNATIVEBYTES_DEFAULTS -1 8 #define Py_ASNATIVEBYTES_BIG_ENDIAN 0 9 #define Py_ASNATIVEBYTES_LITTLE_ENDIAN 1 10 #define Py_ASNATIVEBYTES_NATIVE_ENDIAN 3 11 #define Py_ASNATIVEBYTES_UNSIGNED_BUFFER 4 12 #define Py_ASNATIVEBYTES_REJECT_NEGATIVE 8 13 #define Py_ASNATIVEBYTES_ALLOW_INDEX 16 14 15 /* PyLong_AsNativeBytes: Copy the integer value to a native variable. 16 buffer points to the first byte of the variable. 17 n_bytes is the number of bytes available in the buffer. Pass 0 to request 18 the required size for the value. 19 flags is a bitfield of the following flags: 20 * 1 - little endian 21 * 2 - native endian 22 * 4 - unsigned destination (e.g. don't reject copying 255 into one byte) 23 * 8 - raise an exception for negative inputs 24 * 16 - call __index__ on non-int types 25 If flags is -1 (all bits set), native endian is used, value truncation 26 behaves most like C (allows negative inputs and allow MSB set), and non-int 27 objects will raise a TypeError. 28 Big endian mode will write the most significant byte into the address 29 directly referenced by buffer; little endian will write the least significant 30 byte into that address. 31 32 If an exception is raised, returns a negative value. 33 Otherwise, returns the number of bytes that are required to store the value. 34 To check that the full value is represented, ensure that the return value is 35 equal or less than n_bytes. 36 All n_bytes are guaranteed to be written (unless an exception occurs), and 37 so ignoring a positive return value is the equivalent of a downcast in C. 38 In cases where the full value could not be represented, the returned value 39 may be larger than necessary - this function is not an accurate way to 40 calculate the bit length of an integer object. 41 */ 42 PyAPI_FUNC(Py_ssize_t) PyLong_AsNativeBytes(PyObject* v, void* buffer, 43 Py_ssize_t n_bytes, int flags); 44 45 /* PyLong_FromNativeBytes: Create an int value from a native integer 46 n_bytes is the number of bytes to read from the buffer. Passing 0 will 47 always produce the zero int. 48 PyLong_FromUnsignedNativeBytes always produces a non-negative int. 49 flags is the same as for PyLong_AsNativeBytes, but only supports selecting 50 the endianness or forcing an unsigned buffer. 51 52 Returns the int object, or NULL with an exception set. */ 53 PyAPI_FUNC(PyObject*) PyLong_FromNativeBytes(const void* buffer, size_t n_bytes, 54 int flags); 55 PyAPI_FUNC(PyObject*) PyLong_FromUnsignedNativeBytes(const void* buffer, 56 size_t n_bytes, int flags); 57 58 PyAPI_FUNC(int) PyUnstable_Long_IsCompact(const PyLongObject* op); 59 PyAPI_FUNC(Py_ssize_t) PyUnstable_Long_CompactValue(const PyLongObject* op); 60 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. 64 PyAPI_FUNC(int) _PyLong_Sign(PyObject *v); 65 66 /* _PyLong_NumBits. Return the number of bits needed to represent the 67 absolute value of a long. For example, this returns 1 for 1 and -1, 2 68 for 2 and -2, and 2 for 3 and -3. It returns 0 for 0. 69 v must not be NULL, and must be a normalized long. 70 (size_t)-1 is returned and OverflowError set if the true result doesn't 71 fit in a size_t. 72 */ 73 PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v); 74 75 /* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in 76 base 256, and return a Python int with the same numeric value. 77 If n is 0, the integer is 0. Else: 78 If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB; 79 else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the 80 LSB. 81 If is_signed is 0/false, view the bytes as a non-negative integer. 82 If is_signed is 1/true, view the bytes as a 2's-complement integer, 83 non-negative if bit 0x80 of the MSB is clear, negative if set. 84 Error returns: 85 + Return NULL with the appropriate exception set if there's not 86 enough memory to create the Python int. 87 */ 88 PyAPI_FUNC(PyObject *) _PyLong_FromByteArray( 89 const unsigned char* bytes, size_t n, 90 int little_endian, int is_signed); 91 92 /* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long 93 v to a base-256 integer, stored in array bytes. Normally return 0, 94 return -1 on error. 95 If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at 96 bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and 97 the LSB at bytes[n-1]. 98 If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes 99 are filled and there's nothing special about bit 0x80 of the MSB. 100 If is_signed is 1/true, bytes is filled with the 2's-complement 101 representation of v's value. Bit 0x80 of the MSB is the sign bit. 102 Error returns (-1): 103 + is_signed is 0 and v < 0. TypeError is set in this case, and bytes 104 isn't altered. 105 + n isn't big enough to hold the full mathematical value of v. For 106 example, if is_signed is 0 and there are more digits in the v than 107 fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of 108 being large enough to hold a sign bit. OverflowError is set in this 109 case, but bytes holds the least-significant n bytes of the true value. 110 */ 111 PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v, 112 unsigned char* bytes, size_t n, 113 int little_endian, int is_signed, int with_exceptions); 114 115 /* For use by the gcd function in mathmodule.c */ 116 PyAPI_FUNC(PyObject *) _PyLong_GCD(PyObject *, PyObject *); 117