1 #ifndef Py_LIMITED_API
2 #ifndef Py_INTERNAL_ACCU_H
3 #define Py_INTERNAL_ACCU_H
4 #ifdef __cplusplus
5 extern "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 
24 typedef struct {
25     PyObject *large;  /* A list of previously accumulated large strings */
26     PyObject *small;  /* Pending small strings */
27 } _PyAccu;
28 
29 PyAPI_FUNC(int) _PyAccu_Init(_PyAccu *acc);
30 PyAPI_FUNC(int) _PyAccu_Accumulate(_PyAccu *acc, PyObject *unicode);
31 PyAPI_FUNC(PyObject *) _PyAccu_FinishAsList(_PyAccu *acc);
32 PyAPI_FUNC(PyObject *) _PyAccu_Finish(_PyAccu *acc);
33 PyAPI_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