longobject.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. #ifndef Py_LONGOBJECT_H
  2. #define Py_LONGOBJECT_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. /* Long (arbitrary precision) integer object interface */
  7. typedef struct _longobject PyLongObject; /* Revealed in longintrepr.h */
  8. PyAPI_DATA(PyTypeObject) PyLong_Type;
  9. #define PyLong_Check(op) \
  10. PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  11. #define PyLong_CheckExact(op) Py_IS_TYPE(op, &PyLong_Type)
  12. PyAPI_FUNC(PyObject *) PyLong_FromLong(long);
  13. PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long);
  14. PyAPI_FUNC(PyObject *) PyLong_FromSize_t(size_t);
  15. PyAPI_FUNC(PyObject *) PyLong_FromSsize_t(Py_ssize_t);
  16. PyAPI_FUNC(PyObject *) PyLong_FromDouble(double);
  17. PyAPI_FUNC(long) PyLong_AsLong(PyObject *);
  18. PyAPI_FUNC(long) PyLong_AsLongAndOverflow(PyObject *, int *);
  19. PyAPI_FUNC(Py_ssize_t) PyLong_AsSsize_t(PyObject *);
  20. PyAPI_FUNC(size_t) PyLong_AsSize_t(PyObject *);
  21. PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLong(PyObject *);
  22. PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject *);
  23. #ifndef Py_LIMITED_API
  24. PyAPI_FUNC(int) _PyLong_AsInt(PyObject *);
  25. #endif
  26. PyAPI_FUNC(PyObject *) PyLong_GetInfo(void);
  27. /* It may be useful in the future. I've added it in the PyInt -> PyLong
  28. cleanup to keep the extra information. [CH] */
  29. #define PyLong_AS_LONG(op) PyLong_AsLong(op)
  30. /* Issue #1983: pid_t can be longer than a C long on some systems */
  31. #if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT
  32. #define _Py_PARSE_PID "i"
  33. #define PyLong_FromPid PyLong_FromLong
  34. #define PyLong_AsPid PyLong_AsLong
  35. #elif SIZEOF_PID_T == SIZEOF_LONG
  36. #define _Py_PARSE_PID "l"
  37. #define PyLong_FromPid PyLong_FromLong
  38. #define PyLong_AsPid PyLong_AsLong
  39. #elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG
  40. #define _Py_PARSE_PID "L"
  41. #define PyLong_FromPid PyLong_FromLongLong
  42. #define PyLong_AsPid PyLong_AsLongLong
  43. #else
  44. #error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)"
  45. #endif /* SIZEOF_PID_T */
  46. #if SIZEOF_VOID_P == SIZEOF_INT
  47. # define _Py_PARSE_INTPTR "i"
  48. # define _Py_PARSE_UINTPTR "I"
  49. #elif SIZEOF_VOID_P == SIZEOF_LONG
  50. # define _Py_PARSE_INTPTR "l"
  51. # define _Py_PARSE_UINTPTR "k"
  52. #elif defined(SIZEOF_LONG_LONG) && SIZEOF_VOID_P == SIZEOF_LONG_LONG
  53. # define _Py_PARSE_INTPTR "L"
  54. # define _Py_PARSE_UINTPTR "K"
  55. #else
  56. # error "void* different in size from int, long and long long"
  57. #endif /* SIZEOF_VOID_P */
  58. #ifndef Py_LIMITED_API
  59. PyAPI_FUNC(int) _PyLong_UnsignedShort_Converter(PyObject *, void *);
  60. PyAPI_FUNC(int) _PyLong_UnsignedInt_Converter(PyObject *, void *);
  61. PyAPI_FUNC(int) _PyLong_UnsignedLong_Converter(PyObject *, void *);
  62. PyAPI_FUNC(int) _PyLong_UnsignedLongLong_Converter(PyObject *, void *);
  63. PyAPI_FUNC(int) _PyLong_Size_t_Converter(PyObject *, void *);
  64. #endif
  65. /* Used by Python/mystrtoul.c, _PyBytes_FromHex(),
  66. _PyBytes_DecodeEscape(), etc. */
  67. #ifndef Py_LIMITED_API
  68. PyAPI_DATA(unsigned char) _PyLong_DigitValue[256];
  69. #endif
  70. /* _PyLong_Frexp returns a double x and an exponent e such that the
  71. true value is approximately equal to x * 2**e. e is >= 0. x is
  72. 0.0 if and only if the input is 0 (in which case, e and x are both
  73. zeroes); otherwise, 0.5 <= abs(x) < 1.0. On overflow, which is
  74. possible if the number of bits doesn't fit into a Py_ssize_t, sets
  75. OverflowError and returns -1.0 for x, 0 for e. */
  76. #ifndef Py_LIMITED_API
  77. PyAPI_FUNC(double) _PyLong_Frexp(PyLongObject *a, Py_ssize_t *e);
  78. #endif
  79. PyAPI_FUNC(double) PyLong_AsDouble(PyObject *);
  80. PyAPI_FUNC(PyObject *) PyLong_FromVoidPtr(void *);
  81. PyAPI_FUNC(void *) PyLong_AsVoidPtr(PyObject *);
  82. PyAPI_FUNC(PyObject *) PyLong_FromLongLong(long long);
  83. PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLongLong(unsigned long long);
  84. PyAPI_FUNC(long long) PyLong_AsLongLong(PyObject *);
  85. PyAPI_FUNC(unsigned long long) PyLong_AsUnsignedLongLong(PyObject *);
  86. PyAPI_FUNC(unsigned long long) PyLong_AsUnsignedLongLongMask(PyObject *);
  87. PyAPI_FUNC(long long) PyLong_AsLongLongAndOverflow(PyObject *, int *);
  88. PyAPI_FUNC(PyObject *) PyLong_FromString(const char *, char **, int);
  89. #ifndef Py_LIMITED_API
  90. Py_DEPRECATED(3.3)
  91. PyAPI_FUNC(PyObject *) PyLong_FromUnicode(Py_UNICODE*, Py_ssize_t, int);
  92. PyAPI_FUNC(PyObject *) PyLong_FromUnicodeObject(PyObject *u, int base);
  93. PyAPI_FUNC(PyObject *) _PyLong_FromBytes(const char *, Py_ssize_t, int);
  94. #endif
  95. #ifndef Py_LIMITED_API
  96. /* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0.
  97. v must not be NULL, and must be a normalized long.
  98. There are no error cases.
  99. */
  100. PyAPI_FUNC(int) _PyLong_Sign(PyObject *v);
  101. /* _PyLong_NumBits. Return the number of bits needed to represent the
  102. absolute value of a long. For example, this returns 1 for 1 and -1, 2
  103. for 2 and -2, and 2 for 3 and -3. It returns 0 for 0.
  104. v must not be NULL, and must be a normalized long.
  105. (size_t)-1 is returned and OverflowError set if the true result doesn't
  106. fit in a size_t.
  107. */
  108. PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v);
  109. /* _PyLong_DivmodNear. Given integers a and b, compute the nearest
  110. integer q to the exact quotient a / b, rounding to the nearest even integer
  111. in the case of a tie. Return (q, r), where r = a - q*b. The remainder r
  112. will satisfy abs(r) <= abs(b)/2, with equality possible only if q is
  113. even.
  114. */
  115. PyAPI_FUNC(PyObject *) _PyLong_DivmodNear(PyObject *, PyObject *);
  116. /* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in
  117. base 256, and return a Python int with the same numeric value.
  118. If n is 0, the integer is 0. Else:
  119. If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB;
  120. else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the
  121. LSB.
  122. If is_signed is 0/false, view the bytes as a non-negative integer.
  123. If is_signed is 1/true, view the bytes as a 2's-complement integer,
  124. non-negative if bit 0x80 of the MSB is clear, negative if set.
  125. Error returns:
  126. + Return NULL with the appropriate exception set if there's not
  127. enough memory to create the Python int.
  128. */
  129. PyAPI_FUNC(PyObject *) _PyLong_FromByteArray(
  130. const unsigned char* bytes, size_t n,
  131. int little_endian, int is_signed);
  132. /* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long
  133. v to a base-256 integer, stored in array bytes. Normally return 0,
  134. return -1 on error.
  135. If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at
  136. bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and
  137. the LSB at bytes[n-1].
  138. If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes
  139. are filled and there's nothing special about bit 0x80 of the MSB.
  140. If is_signed is 1/true, bytes is filled with the 2's-complement
  141. representation of v's value. Bit 0x80 of the MSB is the sign bit.
  142. Error returns (-1):
  143. + is_signed is 0 and v < 0. TypeError is set in this case, and bytes
  144. isn't altered.
  145. + n isn't big enough to hold the full mathematical value of v. For
  146. example, if is_signed is 0 and there are more digits in the v than
  147. fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of
  148. being large enough to hold a sign bit. OverflowError is set in this
  149. case, but bytes holds the least-significant n bytes of the true value.
  150. */
  151. PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,
  152. unsigned char* bytes, size_t n,
  153. int little_endian, int is_signed);
  154. /* _PyLong_FromNbInt: Convert the given object to a PyLongObject
  155. using the nb_int slot, if available. Raise TypeError if either the
  156. nb_int slot is not available or the result of the call to nb_int
  157. returns something not of type int.
  158. */
  159. PyAPI_FUNC(PyObject *) _PyLong_FromNbInt(PyObject *);
  160. /* Convert the given object to a PyLongObject using the nb_index or
  161. nb_int slots, if available (the latter is deprecated).
  162. Raise TypeError if either nb_index and nb_int slots are not
  163. available or the result of the call to nb_index or nb_int
  164. returns something not of type int.
  165. Should be replaced with PyNumber_Index after the end of the
  166. deprecation period.
  167. */
  168. PyAPI_FUNC(PyObject *) _PyLong_FromNbIndexOrNbInt(PyObject *);
  169. /* _PyLong_Format: Convert the long to a string object with given base,
  170. appending a base prefix of 0[box] if base is 2, 8 or 16. */
  171. PyAPI_FUNC(PyObject *) _PyLong_Format(PyObject *obj, int base);
  172. PyAPI_FUNC(int) _PyLong_FormatWriter(
  173. _PyUnicodeWriter *writer,
  174. PyObject *obj,
  175. int base,
  176. int alternate);
  177. PyAPI_FUNC(char*) _PyLong_FormatBytesWriter(
  178. _PyBytesWriter *writer,
  179. char *str,
  180. PyObject *obj,
  181. int base,
  182. int alternate);
  183. /* Format the object based on the format_spec, as defined in PEP 3101
  184. (Advanced String Formatting). */
  185. PyAPI_FUNC(int) _PyLong_FormatAdvancedWriter(
  186. _PyUnicodeWriter *writer,
  187. PyObject *obj,
  188. PyObject *format_spec,
  189. Py_ssize_t start,
  190. Py_ssize_t end);
  191. #endif /* Py_LIMITED_API */
  192. /* These aren't really part of the int object, but they're handy. The
  193. functions are in Python/mystrtoul.c.
  194. */
  195. PyAPI_FUNC(unsigned long) PyOS_strtoul(const char *, char **, int);
  196. PyAPI_FUNC(long) PyOS_strtol(const char *, char **, int);
  197. #ifndef Py_LIMITED_API
  198. /* For use by the gcd function in mathmodule.c */
  199. PyAPI_FUNC(PyObject *) _PyLong_GCD(PyObject *, PyObject *);
  200. #endif /* !Py_LIMITED_API */
  201. #ifndef Py_LIMITED_API
  202. PyAPI_DATA(PyObject *) _PyLong_Zero;
  203. PyAPI_DATA(PyObject *) _PyLong_One;
  204. PyAPI_FUNC(PyObject *) _PyLong_Rshift(PyObject *, size_t);
  205. PyAPI_FUNC(PyObject *) _PyLong_Lshift(PyObject *, size_t);
  206. #endif
  207. #ifdef __cplusplus
  208. }
  209. #endif
  210. #endif /* !Py_LONGOBJECT_H */