File: /Users/paulross/dev/Python-3.6.2/Include/longobject.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       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_FromSize_t(size_t);
      21: PyAPI_FUNC(PyObject *) PyLong_FromSsize_t(Py_ssize_t);
      22: PyAPI_FUNC(PyObject *) PyLong_FromDouble(double);
      23: PyAPI_FUNC(long) PyLong_AsLong(PyObject *);
      24: PyAPI_FUNC(long) PyLong_AsLongAndOverflow(PyObject *, int *);
      25: PyAPI_FUNC(Py_ssize_t) PyLong_AsSsize_t(PyObject *);
      26: PyAPI_FUNC(size_t) PyLong_AsSize_t(PyObject *);
      27: PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLong(PyObject *);
      28: PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject *);
      29: #ifndef Py_LIMITED_API
      30: PyAPI_FUNC(int) _PyLong_AsInt(PyObject *);
      31: #endif
      32: PyAPI_FUNC(PyObject *) PyLong_GetInfo(void);
      33: 
      34: /* It may be useful in the future. I've added it in the PyInt -> PyLong
      35:    cleanup to keep the extra information. [CH] */
      36: #define PyLong_AS_LONG(op) PyLong_AsLong(op)
      37: 
      38: /* Issue #1983: pid_t can be longer than a C long on some systems */
      39: #if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT
      40: #define _Py_PARSE_PID "i"
      41: #define PyLong_FromPid PyLong_FromLong
      42: #define PyLong_AsPid PyLong_AsLong
      43: #elif SIZEOF_PID_T == SIZEOF_LONG
      44: #define _Py_PARSE_PID "l"
      45: #define PyLong_FromPid PyLong_FromLong
      46: #define PyLong_AsPid PyLong_AsLong
      47: #elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG
      48: #define _Py_PARSE_PID "L"
      49: #define PyLong_FromPid PyLong_FromLongLong
      50: #define PyLong_AsPid PyLong_AsLongLong
      51: #else
      52: #error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)"
      53: #endif /* SIZEOF_PID_T */
      54: 
      55: #if SIZEOF_VOID_P == SIZEOF_INT
      56: #  define _Py_PARSE_INTPTR "i"
      57: #  define _Py_PARSE_UINTPTR "I"
      58: #elif SIZEOF_VOID_P == SIZEOF_LONG
      59: #  define _Py_PARSE_INTPTR "l"
      60: #  define _Py_PARSE_UINTPTR "k"
      61: #elif defined(SIZEOF_LONG_LONG) && SIZEOF_VOID_P == SIZEOF_LONG_LONG
      62: #  define _Py_PARSE_INTPTR "L"
      63: #  define _Py_PARSE_UINTPTR "K"
      64: #else
      65: #  error "void* different in size from int, long and long long"
      66: #endif /* SIZEOF_VOID_P */
      67: 
      68: /* Used by Python/mystrtoul.c, _PyBytes_FromHex(),
      69:    _PyBytes_DecodeEscapeRecode(), etc. */
      70: #ifndef Py_LIMITED_API
      71: PyAPI_DATA(unsigned char) _PyLong_DigitValue[256];
      72: #endif
      73: 
      74: /* _PyLong_Frexp returns a double x and an exponent e such that the
      75:    true value is approximately equal to x * 2**e.  e is >= 0.  x is
      76:    0.0 if and only if the input is 0 (in which case, e and x are both
      77:    zeroes); otherwise, 0.5 <= abs(x) < 1.0.  On overflow, which is
      78:    possible if the number of bits doesn't fit into a Py_ssize_t, sets
      79:    OverflowError and returns -1.0 for x, 0 for e. */
      80: #ifndef Py_LIMITED_API
      81: PyAPI_FUNC(double) _PyLong_Frexp(PyLongObject *a, Py_ssize_t *e);
      82: #endif
      83: 
      84: PyAPI_FUNC(double) PyLong_AsDouble(PyObject *);
      85: PyAPI_FUNC(PyObject *) PyLong_FromVoidPtr(void *);
      86: PyAPI_FUNC(void *) PyLong_AsVoidPtr(PyObject *);
      87: 
      88: PyAPI_FUNC(PyObject *) PyLong_FromLongLong(long long);
      89: PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLongLong(unsigned long long);
      90: PyAPI_FUNC(long long) PyLong_AsLongLong(PyObject *);
      91: PyAPI_FUNC(unsigned long long) PyLong_AsUnsignedLongLong(PyObject *);
      92: PyAPI_FUNC(unsigned long long) PyLong_AsUnsignedLongLongMask(PyObject *);
      93: PyAPI_FUNC(long long) PyLong_AsLongLongAndOverflow(PyObject *, int *);
      94: 
      95: PyAPI_FUNC(PyObject *) PyLong_FromString(const char *, char **, int);
      96: #ifndef Py_LIMITED_API
      97: PyAPI_FUNC(PyObject *) PyLong_FromUnicode(Py_UNICODE*, Py_ssize_t, int);
      98: PyAPI_FUNC(PyObject *) PyLong_FromUnicodeObject(PyObject *u, int base);
      99: PyAPI_FUNC(PyObject *) _PyLong_FromBytes(const char *, Py_ssize_t, int);
     100: #endif
     101: 
     102: #ifndef Py_LIMITED_API
     103: /* _PyLong_Sign.  Return 0 if v is 0, -1 if v < 0, +1 if v > 0.
     104:    v must not be NULL, and must be a normalized long.
     105:    There are no error cases.
     106: */
     107: PyAPI_FUNC(int) _PyLong_Sign(PyObject *v);
     108: 
     109: 
     110: /* _PyLong_NumBits.  Return the number of bits needed to represent the
     111:    absolute value of a long.  For example, this returns 1 for 1 and -1, 2
     112:    for 2 and -2, and 2 for 3 and -3.  It returns 0 for 0.
     113:    v must not be NULL, and must be a normalized long.
     114:    (size_t)-1 is returned and OverflowError set if the true result doesn't
     115:    fit in a size_t.
     116: */
     117: PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v);
     118: 
     119: /* _PyLong_DivmodNear.  Given integers a and b, compute the nearest
     120:    integer q to the exact quotient a / b, rounding to the nearest even integer
     121:    in the case of a tie.  Return (q, r), where r = a - q*b.  The remainder r
     122:    will satisfy abs(r) <= abs(b)/2, with equality possible only if q is
     123:    even.
     124: */
     125: PyAPI_FUNC(PyObject *) _PyLong_DivmodNear(PyObject *, PyObject *);
     126: 
     127: /* _PyLong_FromByteArray:  View the n unsigned bytes as a binary integer in
     128:    base 256, and return a Python int with the same numeric value.
     129:    If n is 0, the integer is 0.  Else:
     130:    If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB;
     131:    else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the
     132:    LSB.
     133:    If is_signed is 0/false, view the bytes as a non-negative integer.
     134:    If is_signed is 1/true, view the bytes as a 2's-complement integer,
     135:    non-negative if bit 0x80 of the MSB is clear, negative if set.
     136:    Error returns:
     137:    + Return NULL with the appropriate exception set if there's not
     138:      enough memory to create the Python int.
     139: */
     140: PyAPI_FUNC(PyObject *) _PyLong_FromByteArray(
     141:     const unsigned char* bytes, size_t n,
     142:     int little_endian, int is_signed);
     143: 
     144: /* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long
     145:    v to a base-256 integer, stored in array bytes.  Normally return 0,
     146:    return -1 on error.
     147:    If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at
     148:    bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and
     149:    the LSB at bytes[n-1].
     150:    If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes
     151:    are filled and there's nothing special about bit 0x80 of the MSB.
     152:    If is_signed is 1/true, bytes is filled with the 2's-complement
     153:    representation of v's value.  Bit 0x80 of the MSB is the sign bit.
     154:    Error returns (-1):
     155:    + is_signed is 0 and v < 0.  TypeError is set in this case, and bytes
     156:      isn't altered.
     157:    + n isn't big enough to hold the full mathematical value of v.  For
     158:      example, if is_signed is 0 and there are more digits in the v than
     159:      fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of
     160:      being large enough to hold a sign bit.  OverflowError is set in this
     161:      case, but bytes holds the least-significant n bytes of the true value.
     162: */
     163: PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,
     164:     unsigned char* bytes, size_t n,
     165:     int little_endian, int is_signed);
     166: 
     167: /* _PyLong_FromNbInt: Convert the given object to a PyLongObject
     168:    using the nb_int slot, if available.  Raise TypeError if either the
     169:    nb_int slot is not available or the result of the call to nb_int
     170:    returns something not of type int.
     171: */
     172: PyAPI_FUNC(PyLongObject *)_PyLong_FromNbInt(PyObject *);
     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: 
     201: /* These aren't really part of the int object, but they're handy. The
     202:    functions are in Python/mystrtoul.c.
     203:  */
     204: PyAPI_FUNC(unsigned long) PyOS_strtoul(const char *, char **, int);
     205: PyAPI_FUNC(long) PyOS_strtol(const char *, char **, int);
     206: 
     207: #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: #ifdef __cplusplus
     213: }
     214: #endif
     215: #endif /* !Py_LONGOBJECT_H */
     216: