17db96d56Sopenharmony_ci#ifndef Py_LIMITED_API
27db96d56Sopenharmony_ci#ifndef Py_INTERNAL_ACCU_H
37db96d56Sopenharmony_ci#define Py_INTERNAL_ACCU_H
47db96d56Sopenharmony_ci#ifdef __cplusplus
57db96d56Sopenharmony_ciextern "C" {
67db96d56Sopenharmony_ci#endif
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ci/*** This is a private API for use by the interpreter and the stdlib.
97db96d56Sopenharmony_ci *** Its definition may be changed or removed at any moment.
107db96d56Sopenharmony_ci ***/
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci#ifndef Py_BUILD_CORE
137db96d56Sopenharmony_ci#  error "this header requires Py_BUILD_CORE define"
147db96d56Sopenharmony_ci#endif
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci/*
177db96d56Sopenharmony_ci * A two-level accumulator of unicode objects that avoids both the overhead
187db96d56Sopenharmony_ci * of keeping a huge number of small separate objects, and the quadratic
197db96d56Sopenharmony_ci * behaviour of using a naive repeated concatenation scheme.
207db96d56Sopenharmony_ci */
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci#undef small /* defined by some Windows headers */
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_citypedef struct {
257db96d56Sopenharmony_ci    PyObject *large;  /* A list of previously accumulated large strings */
267db96d56Sopenharmony_ci    PyObject *small;  /* Pending small strings */
277db96d56Sopenharmony_ci} _PyAccu;
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyAccu_Init(_PyAccu *acc);
307db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyAccu_Accumulate(_PyAccu *acc, PyObject *unicode);
317db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) _PyAccu_FinishAsList(_PyAccu *acc);
327db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) _PyAccu_Finish(_PyAccu *acc);
337db96d56Sopenharmony_ciPyAPI_FUNC(void) _PyAccu_Destroy(_PyAccu *acc);
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci#ifdef __cplusplus
367db96d56Sopenharmony_ci}
377db96d56Sopenharmony_ci#endif
387db96d56Sopenharmony_ci#endif /* !Py_INTERNAL_ACCU_H */
397db96d56Sopenharmony_ci#endif /* !Py_LIMITED_API */
40