????JFIF??x?x????'
Server IP : 79.136.114.73 / Your IP : 3.148.243.252 Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64 User : www-data ( 33) PHP Version : 5.5.9-1ubuntu4.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /proc/self/root/home/b8009/Python-3.6.3/Objects/ |
Upload File : |
/* Accumulator struct implementation */ #include "Python.h" #include "accu.h" static PyObject * join_list_unicode(PyObject *lst) { /* return ''.join(lst) */ PyObject *sep, *ret; sep = PyUnicode_FromStringAndSize("", 0); ret = PyUnicode_Join(sep, lst); Py_DECREF(sep); return ret; } int _PyAccu_Init(_PyAccu *acc) { /* Lazily allocated */ acc->large = NULL; acc->small = PyList_New(0); if (acc->small == NULL) return -1; return 0; } static int flush_accumulator(_PyAccu *acc) { Py_ssize_t nsmall = PyList_GET_SIZE(acc->small); if (nsmall) { int ret; PyObject *joined; if (acc->large == NULL) { acc->large = PyList_New(0); if (acc->large == NULL) return -1; } joined = join_list_unicode(acc->small); if (joined == NULL) return -1; if (PyList_SetSlice(acc->small, 0, nsmall, NULL)) { Py_DECREF(joined); return -1; } ret = PyList_Append(acc->large, joined); Py_DECREF(joined); return ret; } return 0; } int _PyAccu_Accumulate(_PyAccu *acc, PyObject *unicode) { Py_ssize_t nsmall; assert(PyUnicode_Check(unicode)); if (PyList_Append(acc->small, unicode)) return -1; nsmall = PyList_GET_SIZE(acc->small); /* Each item in a list of unicode objects has an overhead (in 64-bit * builds) of: * - 8 bytes for the list slot * - 56 bytes for the header of the unicode object * that is, 64 bytes. 100000 such objects waste more than 6MB * compared to a single concatenated string. */ if (nsmall < 100000) return 0; return flush_accumulator(acc); } PyObject * _PyAccu_FinishAsList(_PyAccu *acc) { int ret; PyObject *res; ret = flush_accumulator(acc); Py_CLEAR(acc->small); if (ret) { Py_CLEAR(acc->large); return NULL; } res = acc->large; acc->large = NULL; return res; } PyObject * _PyAccu_Finish(_PyAccu *acc) { PyObject *list, *res; if (acc->large == NULL) { list = acc->small; acc->small = NULL; } else { list = _PyAccu_FinishAsList(acc); if (!list) return NULL; } res = join_list_unicode(list); Py_DECREF(list); return res; } void _PyAccu_Destroy(_PyAccu *acc) { Py_CLEAR(acc->small); Py_CLEAR(acc->large); }