1#ifndef Py_LIMITED_API
2#ifndef Py_INTERNAL_ACCU_H
3#define Py_INTERNAL_ACCU_H
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8/*** This is a private API for use by the interpreter and the stdlib.
9 *** Its definition may be changed or removed at any moment.
10 ***/
11
12#ifndef Py_BUILD_CORE
13# error "this header requires Py_BUILD_CORE define"
14#endif
15
16/*
17 * A two-level accumulator of unicode objects that avoids both the overhead
18 * of keeping a huge number of small separate objects, and the quadratic
19 * behaviour of using a naive repeated concatenation scheme.
20 */
21
22#undef small /* defined by some Windows headers */
23
24typedef struct {
25 PyObject *large; /* A list of previously accumulated large strings */
26 PyObject *small; /* Pending small strings */
27} _PyAccu;
28
29PyAPI_FUNC(int) _PyAccu_Init(_PyAccu *acc);
30PyAPI_FUNC(int) _PyAccu_Accumulate(_PyAccu *acc, PyObject *unicode);
31PyAPI_FUNC(PyObject *) _PyAccu_FinishAsList(_PyAccu *acc);
32PyAPI_FUNC(PyObject *) _PyAccu_Finish(_PyAccu *acc);
33PyAPI_FUNC(void) _PyAccu_Destroy(_PyAccu *acc);
34
35#ifdef __cplusplus
36}
37#endif
38#endif /* !Py_INTERNAL_ACCU_H */
39#endif /* !Py_LIMITED_API */
40