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