bpo-35134: Add Include/cpython/longobject.h (GH-29044) · python/cpython@5f09bb0 (original) (raw)

`@@ -26,9 +26,6 @@ PyAPI_FUNC(Py_ssize_t) PyLong_AsSsize_t(PyObject *);

`

26

26

`PyAPI_FUNC(size_t) PyLong_AsSize_t(PyObject *);

`

27

27

`PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLong(PyObject *);

`

28

28

`PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject *);

`

29

``

`-

#ifndef Py_LIMITED_API

`

30

``

`-

PyAPI_FUNC(int) _PyLong_AsInt(PyObject *);

`

31

``

`-

#endif

`

32

29

`PyAPI_FUNC(PyObject *) PyLong_GetInfo(void);

`

33

30

``

34

31

`/* It may be useful in the future. I've added it in the PyInt -> PyLong

`

`@@ -65,30 +62,6 @@ PyAPI_FUNC(PyObject *) PyLong_GetInfo(void);

`

65

62

`# error "void* different in size from int, long and long long"

`

66

63

`#endif /* SIZEOF_VOID_P */

`

67

64

``

68

``

`-

#ifndef Py_LIMITED_API

`

69

``

`-

PyAPI_FUNC(int) _PyLong_UnsignedShort_Converter(PyObject *, void *);

`

70

``

`-

PyAPI_FUNC(int) _PyLong_UnsignedInt_Converter(PyObject *, void *);

`

71

``

`-

PyAPI_FUNC(int) _PyLong_UnsignedLong_Converter(PyObject *, void *);

`

72

``

`-

PyAPI_FUNC(int) _PyLong_UnsignedLongLong_Converter(PyObject *, void *);

`

73

``

`-

PyAPI_FUNC(int) _PyLong_Size_t_Converter(PyObject *, void *);

`

74

``

`-

#endif

`

75

``

-

76

``

`-

/* Used by Python/mystrtoul.c, _PyBytes_FromHex(),

`

77

``

`-

_PyBytes_DecodeEscape(), etc. */

`

78

``

`-

#ifndef Py_LIMITED_API

`

79

``

`-

PyAPI_DATA(unsigned char) _PyLong_DigitValue[256];

`

80

``

`-

#endif

`

81

``

-

82

``

`-

/* _PyLong_Frexp returns a double x and an exponent e such that the

`

83

``

`-

true value is approximately equal to x * 2**e. e is >= 0. x is

`

84

``

`-

0.0 if and only if the input is 0 (in which case, e and x are both

`

85

``

`-

zeroes); otherwise, 0.5 <= abs(x) < 1.0. On overflow, which is

`

86

``

`-

possible if the number of bits doesn't fit into a Py_ssize_t, sets

`

87

``

`-

OverflowError and returns -1.0 for x, 0 for e. */

`

88

``

`-

#ifndef Py_LIMITED_API

`

89

``

`-

PyAPI_FUNC(double) _PyLong_Frexp(PyLongObject *a, Py_ssize_t *e);

`

90

``

`-

#endif

`

91

``

-

92

65

`PyAPI_FUNC(double) PyLong_AsDouble(PyObject *);

`

93

66

`PyAPI_FUNC(PyObject *) PyLong_FromVoidPtr(void *);

`

94

67

`PyAPI_FUNC(void *) PyLong_AsVoidPtr(PyObject *);

`

`@@ -101,102 +74,6 @@ PyAPI_FUNC(unsigned long long) PyLong_AsUnsignedLongLongMask(PyObject *);

`

101

74

`PyAPI_FUNC(long long) PyLong_AsLongLongAndOverflow(PyObject *, int *);

`

102

75

``

103

76

`PyAPI_FUNC(PyObject *) PyLong_FromString(const char *, char **, int);

`

104

``

`-

#ifndef Py_LIMITED_API

`

105

``

`-

PyAPI_FUNC(PyObject *) PyLong_FromUnicodeObject(PyObject *u, int base);

`

106

``

`-

PyAPI_FUNC(PyObject *) _PyLong_FromBytes(const char *, Py_ssize_t, int);

`

107

``

`-

#endif

`

108

``

-

109

``

`-

#ifndef Py_LIMITED_API

`

110

``

`-

/* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0.

`

111

``

`-

v must not be NULL, and must be a normalized long.

`

112

``

`-

There are no error cases.

`

113

``

`-

*/

`

114

``

`-

PyAPI_FUNC(int) _PyLong_Sign(PyObject *v);

`

115

``

-

116

``

-

117

``

`-

/* _PyLong_NumBits. Return the number of bits needed to represent the

`

118

``

`-

absolute value of a long. For example, this returns 1 for 1 and -1, 2

`

119

``

`-

for 2 and -2, and 2 for 3 and -3. It returns 0 for 0.

`

120

``

`-

v must not be NULL, and must be a normalized long.

`

121

``

`-

(size_t)-1 is returned and OverflowError set if the true result doesn't

`

122

``

`-

fit in a size_t.

`

123

``

`-

*/

`

124

``

`-

PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v);

`

125

``

-

126

``

`-

/* _PyLong_DivmodNear. Given integers a and b, compute the nearest

`

127

``

`-

integer q to the exact quotient a / b, rounding to the nearest even integer

`

128

``

`-

in the case of a tie. Return (q, r), where r = a - q*b. The remainder r

`

129

``

`-

will satisfy abs(r) <= abs(b)/2, with equality possible only if q is

`

130

``

`-

even.

`

131

``

`-

*/

`

132

``

`-

PyAPI_FUNC(PyObject *) _PyLong_DivmodNear(PyObject *, PyObject *);

`

133

``

-

134

``

`-

/* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in

`

135

``

`-

base 256, and return a Python int with the same numeric value.

`

136

``

`-

If n is 0, the integer is 0. Else:

`

137

``

`-

If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB;

`

138

``

`-

else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the

`

139

``

`-

LSB.

`

140

``

`-

If is_signed is 0/false, view the bytes as a non-negative integer.

`

141

``

`-

If is_signed is 1/true, view the bytes as a 2's-complement integer,

`

142

``

`-

non-negative if bit 0x80 of the MSB is clear, negative if set.

`

143

``

`-

Error returns:

`

144

``

`-

`

145

``

`-

enough memory to create the Python int.

`

146

``

`-

*/

`

147

``

`-

PyAPI_FUNC(PyObject *) _PyLong_FromByteArray(

`

148

``

`-

const unsigned char* bytes, size_t n,

`

149

``

`-

int little_endian, int is_signed);

`

150

``

-

151

``

`-

/* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long

`

152

``

`-

v to a base-256 integer, stored in array bytes. Normally return 0,

`

153

``

`-

return -1 on error.

`

154

``

`-

If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at

`

155

``

`-

bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and

`

156

``

`-

the LSB at bytes[n-1].

`

157

``

`-

If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes

`

158

``

`-

are filled and there's nothing special about bit 0x80 of the MSB.

`

159

``

`-

If is_signed is 1/true, bytes is filled with the 2's-complement

`

160

``

`-

representation of v's value. Bit 0x80 of the MSB is the sign bit.

`

161

``

`-

Error returns (-1):

`

162

``

`-

`

163

``

`-

isn't altered.

`

164

``

`-

`

165

``

`-

example, if is_signed is 0 and there are more digits in the v than

`

166

``

`-

fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of

`

167

``

`-

being large enough to hold a sign bit. OverflowError is set in this

`

168

``

`-

case, but bytes holds the least-significant n bytes of the true value.

`

169

``

`-

*/

`

170

``

`-

PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,

`

171

``

`-

unsigned char* bytes, size_t n,

`

172

``

`-

int little_endian, int is_signed);

`

173

``

-

174

``

`-

/* _PyLong_Format: Convert the long to a string object with given base,

`

175

``

`-

appending a base prefix of 0[box] if base is 2, 8 or 16. */

`

176

``

`-

PyAPI_FUNC(PyObject *) _PyLong_Format(PyObject *obj, int base);

`

177

``

-

178

``

`-

PyAPI_FUNC(int) _PyLong_FormatWriter(

`

179

``

`-

_PyUnicodeWriter *writer,

`

180

``

`-

PyObject *obj,

`

181

``

`-

int base,

`

182

``

`-

int alternate);

`

183

``

-

184

``

`-

PyAPI_FUNC(char*) _PyLong_FormatBytesWriter(

`

185

``

`-

_PyBytesWriter *writer,

`

186

``

`-

char *str,

`

187

``

`-

PyObject *obj,

`

188

``

`-

int base,

`

189

``

`-

int alternate);

`

190

``

-

191

``

`-

/* Format the object based on the format_spec, as defined in PEP 3101

`

192

``

`-

(Advanced String Formatting). */

`

193

``

`-

PyAPI_FUNC(int) _PyLong_FormatAdvancedWriter(

`

194

``

`-

_PyUnicodeWriter *writer,

`

195

``

`-

PyObject *obj,

`

196

``

`-

PyObject *format_spec,

`

197

``

`-

Py_ssize_t start,

`

198

``

`-

Py_ssize_t end);

`

199

``

`-

#endif /* Py_LIMITED_API */

`

200

77

``

201

78

`/* These aren't really part of the int object, but they're handy. The

`

202

79

` functions are in Python/mystrtoul.c.

`

`@@ -205,13 +82,9 @@ PyAPI_FUNC(unsigned long) PyOS_strtoul(const char *, char **, int);

`

205

82

`PyAPI_FUNC(long) PyOS_strtol(const char *, char **, int);

`

206

83

``

207

84

`#ifndef Py_LIMITED_API

`

208

``

`-

/* For use by the gcd function in mathmodule.c */

`

209

``

`-

PyAPI_FUNC(PyObject *) _PyLong_GCD(PyObject *, PyObject *);

`

210

``

`-

#endif /* !Py_LIMITED_API */

`

211

``

-

212

``

`-

#ifndef Py_LIMITED_API

`

213

``

`-

PyAPI_FUNC(PyObject *) _PyLong_Rshift(PyObject *, size_t);

`

214

``

`-

PyAPI_FUNC(PyObject *) _PyLong_Lshift(PyObject *, size_t);

`

``

85

`+

define Py_CPYTHON_LONGOBJECT_H

`

``

86

`+

include "cpython/longobject.h"

`

``

87

`+

undef Py_CPYTHON_LONGOBJECT_H

`

215

88

`#endif

`

216

89

``

217

90

`#ifdef __cplusplus

`