17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(Struct___init____doc__,
67db96d56Sopenharmony_ci"Struct(format)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n"
97db96d56Sopenharmony_ci"Create a compiled struct object.\n"
107db96d56Sopenharmony_ci"\n"
117db96d56Sopenharmony_ci"Return a new Struct object which writes and reads binary data according to\n"
127db96d56Sopenharmony_ci"the format string.\n"
137db96d56Sopenharmony_ci"\n"
147db96d56Sopenharmony_ci"See help(struct) for more on format strings.");
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_cistatic int
177db96d56Sopenharmony_ciStruct___init___impl(PyStructObject *self, PyObject *format);
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_cistatic int
207db96d56Sopenharmony_ciStruct___init__(PyObject *self, PyObject *args, PyObject *kwargs)
217db96d56Sopenharmony_ci{
227db96d56Sopenharmony_ci    int return_value = -1;
237db96d56Sopenharmony_ci    static const char * const _keywords[] = {"format", NULL};
247db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "Struct", 0};
257db96d56Sopenharmony_ci    PyObject *argsbuf[1];
267db96d56Sopenharmony_ci    PyObject * const *fastargs;
277db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
287db96d56Sopenharmony_ci    PyObject *format;
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 1, 1, 0, argsbuf);
317db96d56Sopenharmony_ci    if (!fastargs) {
327db96d56Sopenharmony_ci        goto exit;
337db96d56Sopenharmony_ci    }
347db96d56Sopenharmony_ci    format = fastargs[0];
357db96d56Sopenharmony_ci    return_value = Struct___init___impl((PyStructObject *)self, format);
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ciexit:
387db96d56Sopenharmony_ci    return return_value;
397db96d56Sopenharmony_ci}
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ciPyDoc_STRVAR(Struct_unpack__doc__,
427db96d56Sopenharmony_ci"unpack($self, buffer, /)\n"
437db96d56Sopenharmony_ci"--\n"
447db96d56Sopenharmony_ci"\n"
457db96d56Sopenharmony_ci"Return a tuple containing unpacked values.\n"
467db96d56Sopenharmony_ci"\n"
477db96d56Sopenharmony_ci"Unpack according to the format string Struct.format. The buffer\'s size\n"
487db96d56Sopenharmony_ci"in bytes must be Struct.size.\n"
497db96d56Sopenharmony_ci"\n"
507db96d56Sopenharmony_ci"See help(struct) for more on format strings.");
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci#define STRUCT_UNPACK_METHODDEF    \
537db96d56Sopenharmony_ci    {"unpack", (PyCFunction)Struct_unpack, METH_O, Struct_unpack__doc__},
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_cistatic PyObject *
567db96d56Sopenharmony_ciStruct_unpack_impl(PyStructObject *self, Py_buffer *buffer);
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_cistatic PyObject *
597db96d56Sopenharmony_ciStruct_unpack(PyStructObject *self, PyObject *arg)
607db96d56Sopenharmony_ci{
617db96d56Sopenharmony_ci    PyObject *return_value = NULL;
627db96d56Sopenharmony_ci    Py_buffer buffer = {NULL, NULL};
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci    if (PyObject_GetBuffer(arg, &buffer, PyBUF_SIMPLE) != 0) {
657db96d56Sopenharmony_ci        goto exit;
667db96d56Sopenharmony_ci    }
677db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&buffer, 'C')) {
687db96d56Sopenharmony_ci        _PyArg_BadArgument("unpack", "argument", "contiguous buffer", arg);
697db96d56Sopenharmony_ci        goto exit;
707db96d56Sopenharmony_ci    }
717db96d56Sopenharmony_ci    return_value = Struct_unpack_impl(self, &buffer);
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ciexit:
747db96d56Sopenharmony_ci    /* Cleanup for buffer */
757db96d56Sopenharmony_ci    if (buffer.obj) {
767db96d56Sopenharmony_ci       PyBuffer_Release(&buffer);
777db96d56Sopenharmony_ci    }
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci    return return_value;
807db96d56Sopenharmony_ci}
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ciPyDoc_STRVAR(Struct_unpack_from__doc__,
837db96d56Sopenharmony_ci"unpack_from($self, /, buffer, offset=0)\n"
847db96d56Sopenharmony_ci"--\n"
857db96d56Sopenharmony_ci"\n"
867db96d56Sopenharmony_ci"Return a tuple containing unpacked values.\n"
877db96d56Sopenharmony_ci"\n"
887db96d56Sopenharmony_ci"Values are unpacked according to the format string Struct.format.\n"
897db96d56Sopenharmony_ci"\n"
907db96d56Sopenharmony_ci"The buffer\'s size in bytes, starting at position offset, must be\n"
917db96d56Sopenharmony_ci"at least Struct.size.\n"
927db96d56Sopenharmony_ci"\n"
937db96d56Sopenharmony_ci"See help(struct) for more on format strings.");
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci#define STRUCT_UNPACK_FROM_METHODDEF    \
967db96d56Sopenharmony_ci    {"unpack_from", _PyCFunction_CAST(Struct_unpack_from), METH_FASTCALL|METH_KEYWORDS, Struct_unpack_from__doc__},
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_cistatic PyObject *
997db96d56Sopenharmony_ciStruct_unpack_from_impl(PyStructObject *self, Py_buffer *buffer,
1007db96d56Sopenharmony_ci                        Py_ssize_t offset);
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_cistatic PyObject *
1037db96d56Sopenharmony_ciStruct_unpack_from(PyStructObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1047db96d56Sopenharmony_ci{
1057db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1067db96d56Sopenharmony_ci    static const char * const _keywords[] = {"buffer", "offset", NULL};
1077db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "unpack_from", 0};
1087db96d56Sopenharmony_ci    PyObject *argsbuf[2];
1097db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
1107db96d56Sopenharmony_ci    Py_buffer buffer = {NULL, NULL};
1117db96d56Sopenharmony_ci    Py_ssize_t offset = 0;
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
1147db96d56Sopenharmony_ci    if (!args) {
1157db96d56Sopenharmony_ci        goto exit;
1167db96d56Sopenharmony_ci    }
1177db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[0], &buffer, PyBUF_SIMPLE) != 0) {
1187db96d56Sopenharmony_ci        goto exit;
1197db96d56Sopenharmony_ci    }
1207db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&buffer, 'C')) {
1217db96d56Sopenharmony_ci        _PyArg_BadArgument("unpack_from", "argument 'buffer'", "contiguous buffer", args[0]);
1227db96d56Sopenharmony_ci        goto exit;
1237db96d56Sopenharmony_ci    }
1247db96d56Sopenharmony_ci    if (!noptargs) {
1257db96d56Sopenharmony_ci        goto skip_optional_pos;
1267db96d56Sopenharmony_ci    }
1277db96d56Sopenharmony_ci    {
1287db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
1297db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[1]);
1307db96d56Sopenharmony_ci        if (iobj != NULL) {
1317db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
1327db96d56Sopenharmony_ci            Py_DECREF(iobj);
1337db96d56Sopenharmony_ci        }
1347db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
1357db96d56Sopenharmony_ci            goto exit;
1367db96d56Sopenharmony_ci        }
1377db96d56Sopenharmony_ci        offset = ival;
1387db96d56Sopenharmony_ci    }
1397db96d56Sopenharmony_ciskip_optional_pos:
1407db96d56Sopenharmony_ci    return_value = Struct_unpack_from_impl(self, &buffer, offset);
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ciexit:
1437db96d56Sopenharmony_ci    /* Cleanup for buffer */
1447db96d56Sopenharmony_ci    if (buffer.obj) {
1457db96d56Sopenharmony_ci       PyBuffer_Release(&buffer);
1467db96d56Sopenharmony_ci    }
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci    return return_value;
1497db96d56Sopenharmony_ci}
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ciPyDoc_STRVAR(Struct_iter_unpack__doc__,
1527db96d56Sopenharmony_ci"iter_unpack($self, buffer, /)\n"
1537db96d56Sopenharmony_ci"--\n"
1547db96d56Sopenharmony_ci"\n"
1557db96d56Sopenharmony_ci"Return an iterator yielding tuples.\n"
1567db96d56Sopenharmony_ci"\n"
1577db96d56Sopenharmony_ci"Tuples are unpacked from the given bytes source, like a repeated\n"
1587db96d56Sopenharmony_ci"invocation of unpack_from().\n"
1597db96d56Sopenharmony_ci"\n"
1607db96d56Sopenharmony_ci"Requires that the bytes length be a multiple of the struct size.");
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ci#define STRUCT_ITER_UNPACK_METHODDEF    \
1637db96d56Sopenharmony_ci    {"iter_unpack", (PyCFunction)Struct_iter_unpack, METH_O, Struct_iter_unpack__doc__},
1647db96d56Sopenharmony_ci
1657db96d56Sopenharmony_ciPyDoc_STRVAR(_clearcache__doc__,
1667db96d56Sopenharmony_ci"_clearcache($module, /)\n"
1677db96d56Sopenharmony_ci"--\n"
1687db96d56Sopenharmony_ci"\n"
1697db96d56Sopenharmony_ci"Clear the internal cache.");
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci#define _CLEARCACHE_METHODDEF    \
1727db96d56Sopenharmony_ci    {"_clearcache", (PyCFunction)_clearcache, METH_NOARGS, _clearcache__doc__},
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_cistatic PyObject *
1757db96d56Sopenharmony_ci_clearcache_impl(PyObject *module);
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_cistatic PyObject *
1787db96d56Sopenharmony_ci_clearcache(PyObject *module, PyObject *Py_UNUSED(ignored))
1797db96d56Sopenharmony_ci{
1807db96d56Sopenharmony_ci    return _clearcache_impl(module);
1817db96d56Sopenharmony_ci}
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ciPyDoc_STRVAR(calcsize__doc__,
1847db96d56Sopenharmony_ci"calcsize($module, format, /)\n"
1857db96d56Sopenharmony_ci"--\n"
1867db96d56Sopenharmony_ci"\n"
1877db96d56Sopenharmony_ci"Return size in bytes of the struct described by the format string.");
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci#define CALCSIZE_METHODDEF    \
1907db96d56Sopenharmony_ci    {"calcsize", (PyCFunction)calcsize, METH_O, calcsize__doc__},
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_cistatic Py_ssize_t
1937db96d56Sopenharmony_cicalcsize_impl(PyObject *module, PyStructObject *s_object);
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_cistatic PyObject *
1967db96d56Sopenharmony_cicalcsize(PyObject *module, PyObject *arg)
1977db96d56Sopenharmony_ci{
1987db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1997db96d56Sopenharmony_ci    PyStructObject *s_object = NULL;
2007db96d56Sopenharmony_ci    Py_ssize_t _return_value;
2017db96d56Sopenharmony_ci
2027db96d56Sopenharmony_ci    if (!cache_struct_converter(module, arg, &s_object)) {
2037db96d56Sopenharmony_ci        goto exit;
2047db96d56Sopenharmony_ci    }
2057db96d56Sopenharmony_ci    _return_value = calcsize_impl(module, s_object);
2067db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
2077db96d56Sopenharmony_ci        goto exit;
2087db96d56Sopenharmony_ci    }
2097db96d56Sopenharmony_ci    return_value = PyLong_FromSsize_t(_return_value);
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ciexit:
2127db96d56Sopenharmony_ci    /* Cleanup for s_object */
2137db96d56Sopenharmony_ci    Py_XDECREF(s_object);
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci    return return_value;
2167db96d56Sopenharmony_ci}
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ciPyDoc_STRVAR(unpack__doc__,
2197db96d56Sopenharmony_ci"unpack($module, format, buffer, /)\n"
2207db96d56Sopenharmony_ci"--\n"
2217db96d56Sopenharmony_ci"\n"
2227db96d56Sopenharmony_ci"Return a tuple containing values unpacked according to the format string.\n"
2237db96d56Sopenharmony_ci"\n"
2247db96d56Sopenharmony_ci"The buffer\'s size in bytes must be calcsize(format).\n"
2257db96d56Sopenharmony_ci"\n"
2267db96d56Sopenharmony_ci"See help(struct) for more on format strings.");
2277db96d56Sopenharmony_ci
2287db96d56Sopenharmony_ci#define UNPACK_METHODDEF    \
2297db96d56Sopenharmony_ci    {"unpack", _PyCFunction_CAST(unpack), METH_FASTCALL, unpack__doc__},
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_cistatic PyObject *
2327db96d56Sopenharmony_ciunpack_impl(PyObject *module, PyStructObject *s_object, Py_buffer *buffer);
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_cistatic PyObject *
2357db96d56Sopenharmony_ciunpack(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
2367db96d56Sopenharmony_ci{
2377db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2387db96d56Sopenharmony_ci    PyStructObject *s_object = NULL;
2397db96d56Sopenharmony_ci    Py_buffer buffer = {NULL, NULL};
2407db96d56Sopenharmony_ci
2417db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("unpack", nargs, 2, 2)) {
2427db96d56Sopenharmony_ci        goto exit;
2437db96d56Sopenharmony_ci    }
2447db96d56Sopenharmony_ci    if (!cache_struct_converter(module, args[0], &s_object)) {
2457db96d56Sopenharmony_ci        goto exit;
2467db96d56Sopenharmony_ci    }
2477db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[1], &buffer, PyBUF_SIMPLE) != 0) {
2487db96d56Sopenharmony_ci        goto exit;
2497db96d56Sopenharmony_ci    }
2507db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&buffer, 'C')) {
2517db96d56Sopenharmony_ci        _PyArg_BadArgument("unpack", "argument 2", "contiguous buffer", args[1]);
2527db96d56Sopenharmony_ci        goto exit;
2537db96d56Sopenharmony_ci    }
2547db96d56Sopenharmony_ci    return_value = unpack_impl(module, s_object, &buffer);
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ciexit:
2577db96d56Sopenharmony_ci    /* Cleanup for s_object */
2587db96d56Sopenharmony_ci    Py_XDECREF(s_object);
2597db96d56Sopenharmony_ci    /* Cleanup for buffer */
2607db96d56Sopenharmony_ci    if (buffer.obj) {
2617db96d56Sopenharmony_ci       PyBuffer_Release(&buffer);
2627db96d56Sopenharmony_ci    }
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ci    return return_value;
2657db96d56Sopenharmony_ci}
2667db96d56Sopenharmony_ci
2677db96d56Sopenharmony_ciPyDoc_STRVAR(unpack_from__doc__,
2687db96d56Sopenharmony_ci"unpack_from($module, format, /, buffer, offset=0)\n"
2697db96d56Sopenharmony_ci"--\n"
2707db96d56Sopenharmony_ci"\n"
2717db96d56Sopenharmony_ci"Return a tuple containing values unpacked according to the format string.\n"
2727db96d56Sopenharmony_ci"\n"
2737db96d56Sopenharmony_ci"The buffer\'s size, minus offset, must be at least calcsize(format).\n"
2747db96d56Sopenharmony_ci"\n"
2757db96d56Sopenharmony_ci"See help(struct) for more on format strings.");
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ci#define UNPACK_FROM_METHODDEF    \
2787db96d56Sopenharmony_ci    {"unpack_from", _PyCFunction_CAST(unpack_from), METH_FASTCALL|METH_KEYWORDS, unpack_from__doc__},
2797db96d56Sopenharmony_ci
2807db96d56Sopenharmony_cistatic PyObject *
2817db96d56Sopenharmony_ciunpack_from_impl(PyObject *module, PyStructObject *s_object,
2827db96d56Sopenharmony_ci                 Py_buffer *buffer, Py_ssize_t offset);
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_cistatic PyObject *
2857db96d56Sopenharmony_ciunpack_from(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
2867db96d56Sopenharmony_ci{
2877db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2887db96d56Sopenharmony_ci    static const char * const _keywords[] = {"", "buffer", "offset", NULL};
2897db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "unpack_from", 0};
2907db96d56Sopenharmony_ci    PyObject *argsbuf[3];
2917db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
2927db96d56Sopenharmony_ci    PyStructObject *s_object = NULL;
2937db96d56Sopenharmony_ci    Py_buffer buffer = {NULL, NULL};
2947db96d56Sopenharmony_ci    Py_ssize_t offset = 0;
2957db96d56Sopenharmony_ci
2967db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 3, 0, argsbuf);
2977db96d56Sopenharmony_ci    if (!args) {
2987db96d56Sopenharmony_ci        goto exit;
2997db96d56Sopenharmony_ci    }
3007db96d56Sopenharmony_ci    if (!cache_struct_converter(module, args[0], &s_object)) {
3017db96d56Sopenharmony_ci        goto exit;
3027db96d56Sopenharmony_ci    }
3037db96d56Sopenharmony_ci    if (PyObject_GetBuffer(args[1], &buffer, PyBUF_SIMPLE) != 0) {
3047db96d56Sopenharmony_ci        goto exit;
3057db96d56Sopenharmony_ci    }
3067db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&buffer, 'C')) {
3077db96d56Sopenharmony_ci        _PyArg_BadArgument("unpack_from", "argument 'buffer'", "contiguous buffer", args[1]);
3087db96d56Sopenharmony_ci        goto exit;
3097db96d56Sopenharmony_ci    }
3107db96d56Sopenharmony_ci    if (!noptargs) {
3117db96d56Sopenharmony_ci        goto skip_optional_pos;
3127db96d56Sopenharmony_ci    }
3137db96d56Sopenharmony_ci    {
3147db96d56Sopenharmony_ci        Py_ssize_t ival = -1;
3157db96d56Sopenharmony_ci        PyObject *iobj = _PyNumber_Index(args[2]);
3167db96d56Sopenharmony_ci        if (iobj != NULL) {
3177db96d56Sopenharmony_ci            ival = PyLong_AsSsize_t(iobj);
3187db96d56Sopenharmony_ci            Py_DECREF(iobj);
3197db96d56Sopenharmony_ci        }
3207db96d56Sopenharmony_ci        if (ival == -1 && PyErr_Occurred()) {
3217db96d56Sopenharmony_ci            goto exit;
3227db96d56Sopenharmony_ci        }
3237db96d56Sopenharmony_ci        offset = ival;
3247db96d56Sopenharmony_ci    }
3257db96d56Sopenharmony_ciskip_optional_pos:
3267db96d56Sopenharmony_ci    return_value = unpack_from_impl(module, s_object, &buffer, offset);
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ciexit:
3297db96d56Sopenharmony_ci    /* Cleanup for s_object */
3307db96d56Sopenharmony_ci    Py_XDECREF(s_object);
3317db96d56Sopenharmony_ci    /* Cleanup for buffer */
3327db96d56Sopenharmony_ci    if (buffer.obj) {
3337db96d56Sopenharmony_ci       PyBuffer_Release(&buffer);
3347db96d56Sopenharmony_ci    }
3357db96d56Sopenharmony_ci
3367db96d56Sopenharmony_ci    return return_value;
3377db96d56Sopenharmony_ci}
3387db96d56Sopenharmony_ci
3397db96d56Sopenharmony_ciPyDoc_STRVAR(iter_unpack__doc__,
3407db96d56Sopenharmony_ci"iter_unpack($module, format, buffer, /)\n"
3417db96d56Sopenharmony_ci"--\n"
3427db96d56Sopenharmony_ci"\n"
3437db96d56Sopenharmony_ci"Return an iterator yielding tuples unpacked from the given bytes.\n"
3447db96d56Sopenharmony_ci"\n"
3457db96d56Sopenharmony_ci"The bytes are unpacked according to the format string, like\n"
3467db96d56Sopenharmony_ci"a repeated invocation of unpack_from().\n"
3477db96d56Sopenharmony_ci"\n"
3487db96d56Sopenharmony_ci"Requires that the bytes length be a multiple of the format struct size.");
3497db96d56Sopenharmony_ci
3507db96d56Sopenharmony_ci#define ITER_UNPACK_METHODDEF    \
3517db96d56Sopenharmony_ci    {"iter_unpack", _PyCFunction_CAST(iter_unpack), METH_FASTCALL, iter_unpack__doc__},
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_cistatic PyObject *
3547db96d56Sopenharmony_ciiter_unpack_impl(PyObject *module, PyStructObject *s_object,
3557db96d56Sopenharmony_ci                 PyObject *buffer);
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_cistatic PyObject *
3587db96d56Sopenharmony_ciiter_unpack(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
3597db96d56Sopenharmony_ci{
3607db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3617db96d56Sopenharmony_ci    PyStructObject *s_object = NULL;
3627db96d56Sopenharmony_ci    PyObject *buffer;
3637db96d56Sopenharmony_ci
3647db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("iter_unpack", nargs, 2, 2)) {
3657db96d56Sopenharmony_ci        goto exit;
3667db96d56Sopenharmony_ci    }
3677db96d56Sopenharmony_ci    if (!cache_struct_converter(module, args[0], &s_object)) {
3687db96d56Sopenharmony_ci        goto exit;
3697db96d56Sopenharmony_ci    }
3707db96d56Sopenharmony_ci    buffer = args[1];
3717db96d56Sopenharmony_ci    return_value = iter_unpack_impl(module, s_object, buffer);
3727db96d56Sopenharmony_ci
3737db96d56Sopenharmony_ciexit:
3747db96d56Sopenharmony_ci    /* Cleanup for s_object */
3757db96d56Sopenharmony_ci    Py_XDECREF(s_object);
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci    return return_value;
3787db96d56Sopenharmony_ci}
3797db96d56Sopenharmony_ci/*[clinic end generated code: output=2065c9b007be631c input=a9049054013a1b77]*/
380