• Home
  • Raw
  • Download

Lines Matching +full:fast +full:- +full:deep +full:- +full:equal

23  * Making the block length a power of two speeds-up the modulo
28 #define CENTER ((BLOCKLEN - 1) / 2)
31 /* Data for deque objects is stored in a doubly-linked list of fixed
38 * Textbook implementations of doubly-linked lists store one datum
41 * element. By using fixed-length blocks, the link to data ratio is
47 * are never equal to NULL. The list is not circular.
60 * (d.leftindex + d.len - 1) % BLOCKLEN == d.rightindex
63 * d.leftindex + d.len - 1 == d.rightindex
91 Py_ssize_t maxlen; /* maxlen is -1 for unbounded deques */
128 if (deque->numfreeblocks) { in newblock()
129 deque->numfreeblocks--; in newblock()
130 return deque->freeblocks[deque->numfreeblocks]; in newblock()
143 if (deque->numfreeblocks < MAXFREEBLOCKS) { in freeblock()
144 deque->freeblocks[deque->numfreeblocks] = b; in freeblock()
145 deque->numfreeblocks++; in freeblock()
158 deque = (dequeobject *)type->tp_alloc(type, 0); in deque_new()
167 MARK_END(b->leftlink); in deque_new()
168 MARK_END(b->rightlink); in deque_new()
172 deque->leftblock = b; in deque_new()
173 deque->rightblock = b; in deque_new()
174 deque->leftindex = CENTER + 1; in deque_new()
175 deque->rightindex = CENTER; in deque_new()
176 deque->state = 0; in deque_new()
177 deque->maxlen = -1; in deque_new()
178 deque->numfreeblocks = 0; in deque_new()
179 deque->weakreflist = NULL; in deque_new()
194 item = deque->rightblock->data[deque->rightindex]; in deque_pop()
195 deque->rightindex--; in deque_pop()
196 Py_SET_SIZE(deque, Py_SIZE(deque) - 1); in deque_pop()
197 deque->state++; in deque_pop()
199 if (deque->rightindex < 0) { in deque_pop()
201 prevblock = deque->rightblock->leftlink; in deque_pop()
202 assert(deque->leftblock != deque->rightblock); in deque_pop()
203 freeblock(deque, deque->rightblock); in deque_pop()
205 MARK_END(prevblock->rightlink); in deque_pop()
206 deque->rightblock = prevblock; in deque_pop()
207 deque->rightindex = BLOCKLEN - 1; in deque_pop()
209 assert(deque->leftblock == deque->rightblock); in deque_pop()
210 assert(deque->leftindex == deque->rightindex+1); in deque_pop()
211 /* re-center instead of freeing a block */ in deque_pop()
212 deque->leftindex = CENTER + 1; in deque_pop()
213 deque->rightindex = CENTER; in deque_pop()
231 assert(deque->leftblock != NULL); in deque_popleft()
232 item = deque->leftblock->data[deque->leftindex]; in deque_popleft()
233 deque->leftindex++; in deque_popleft()
234 Py_SET_SIZE(deque, Py_SIZE(deque) - 1); in deque_popleft()
235 deque->state++; in deque_popleft()
237 if (deque->leftindex == BLOCKLEN) { in deque_popleft()
239 assert(deque->leftblock != deque->rightblock); in deque_popleft()
240 prevblock = deque->leftblock->rightlink; in deque_popleft()
241 freeblock(deque, deque->leftblock); in deque_popleft()
243 MARK_END(prevblock->leftlink); in deque_popleft()
244 deque->leftblock = prevblock; in deque_popleft()
245 deque->leftindex = 0; in deque_popleft()
247 assert(deque->leftblock == deque->rightblock); in deque_popleft()
248 assert(deque->leftindex == deque->rightindex+1); in deque_popleft()
249 /* re-center instead of freeing a block */ in deque_popleft()
250 deque->leftindex = CENTER + 1; in deque_popleft()
251 deque->rightindex = CENTER; in deque_popleft()
260 * If there is no limit, then d.maxlen == -1.
276 if (deque->rightindex == BLOCKLEN - 1) { in deque_append_internal()
279 return -1; in deque_append_internal()
280 b->leftlink = deque->rightblock; in deque_append_internal()
281 CHECK_END(deque->rightblock->rightlink); in deque_append_internal()
282 deque->rightblock->rightlink = b; in deque_append_internal()
283 deque->rightblock = b; in deque_append_internal()
284 MARK_END(b->rightlink); in deque_append_internal()
285 deque->rightindex = -1; in deque_append_internal()
288 deque->rightindex++; in deque_append_internal()
289 deque->rightblock->data[deque->rightindex] = item; in deque_append_internal()
294 deque->state++; in deque_append_internal()
303 if (deque_append_internal(deque, item, deque->maxlen) < 0) in deque_append()
313 if (deque->leftindex == 0) { in deque_appendleft_internal()
316 return -1; in deque_appendleft_internal()
317 b->rightlink = deque->leftblock; in deque_appendleft_internal()
318 CHECK_END(deque->leftblock->leftlink); in deque_appendleft_internal()
319 deque->leftblock->leftlink = b; in deque_appendleft_internal()
320 deque->leftblock = b; in deque_appendleft_internal()
321 MARK_END(b->leftlink); in deque_appendleft_internal()
322 deque->leftindex = BLOCKLEN; in deque_appendleft_internal()
325 deque->leftindex--; in deque_appendleft_internal()
326 deque->leftblock->data[deque->leftindex] = item; in deque_appendleft_internal()
327 if (NEEDS_TRIM(deque, deque->maxlen)) { in deque_appendleft_internal()
331 deque->state++; in deque_appendleft_internal()
340 if (deque_appendleft_internal(deque, item, deque->maxlen) < 0) in deque_appendleft()
370 iternext = *Py_TYPE(it)->tp_iternext; in consume_iterator()
382 Py_ssize_t maxlen = deque->maxlen; in deque_extend()
404 assert(deque->leftblock == deque->rightblock); in deque_extend()
405 assert(deque->leftindex == deque->rightindex+1); in deque_extend()
406 deque->leftindex = 1; in deque_extend()
407 deque->rightindex = 0; in deque_extend()
410 iternext = *Py_TYPE(it)->tp_iternext; in deque_extend()
412 if (deque_append_internal(deque, item, maxlen) == -1) { in deque_extend()
429 Py_ssize_t maxlen = deque->maxlen; in deque_extendleft()
451 assert(deque->leftblock == deque->rightblock); in deque_extendleft()
452 assert(deque->leftindex == deque->rightindex+1); in deque_extendleft()
453 deque->leftindex = BLOCKLEN - 1; in deque_extendleft()
454 deque->rightindex = BLOCKLEN - 2; in deque_extendleft()
457 iternext = *Py_TYPE(it)->tp_iternext; in deque_extendleft()
459 if (deque_appendleft_internal(deque, item, maxlen) == -1) { in deque_extendleft()
496 new_deque->maxlen = old_deque->maxlen; in deque_copy()
497 /* Fast path for the deque_repeat() common case where len(deque) == 1 */ in deque_copy()
499 PyObject *item = old_deque->leftblock->data[old_deque->leftindex]; in deque_copy()
511 if (old_deque->maxlen < 0) in deque_copy()
515 deque, old_deque->maxlen, NULL); in deque_copy()
519 Py_TYPE(deque)->tp_name, Py_TYPE(result)->tp_name); in deque_copy()
539 Py_TYPE(other)->tp_name); in deque_concat()
573 anything via deque->ref while clearing. (This is the same in deque_clear()
579 pops in a while-loop is slower, possibly re-entrant (and a clever in deque_clear()
591 leftblock = deque->leftblock; in deque_clear()
592 leftindex = deque->leftindex; in deque_clear()
595 MARK_END(b->leftlink); in deque_clear()
596 MARK_END(b->rightlink); in deque_clear()
598 deque->leftblock = b; in deque_clear()
599 deque->rightblock = b; in deque_clear()
600 deque->leftindex = CENTER + 1; in deque_clear()
601 deque->rightindex = CENTER; in deque_clear()
602 deque->state++; in deque_clear()
607 m = (BLOCKLEN - leftindex > n) ? n : BLOCKLEN - leftindex; in deque_clear()
608 itemptr = &leftblock->data[leftindex]; in deque_clear()
610 n -= m; in deque_clear()
615 CHECK_NOT_END(leftblock->rightlink); in deque_clear()
617 leftblock = leftblock->rightlink; in deque_clear()
619 itemptr = leftblock->data; in deque_clear()
621 n -= m; in deque_clear()
627 CHECK_END(leftblock->rightlink); in deque_clear()
670 PyObject *item = deque->leftblock->data[deque->leftindex]; in deque_inplace_repeat()
672 if (deque->maxlen >= 0 && n > deque->maxlen) in deque_inplace_repeat()
673 n = deque->maxlen; in deque_inplace_repeat()
675 deque->state++; in deque_inplace_repeat()
676 for (i = 0 ; i < n-1 ; ) { in deque_inplace_repeat()
677 if (deque->rightindex == BLOCKLEN - 1) { in deque_inplace_repeat()
683 b->leftlink = deque->rightblock; in deque_inplace_repeat()
684 CHECK_END(deque->rightblock->rightlink); in deque_inplace_repeat()
685 deque->rightblock->rightlink = b; in deque_inplace_repeat()
686 deque->rightblock = b; in deque_inplace_repeat()
687 MARK_END(b->rightlink); in deque_inplace_repeat()
688 deque->rightindex = -1; in deque_inplace_repeat()
690 m = n - 1 - i; in deque_inplace_repeat()
691 if (m > BLOCKLEN - 1 - deque->rightindex) in deque_inplace_repeat()
692 m = BLOCKLEN - 1 - deque->rightindex; in deque_inplace_repeat()
694 while (m--) { in deque_inplace_repeat()
695 deque->rightindex++; in deque_inplace_repeat()
697 deque->rightblock->data[deque->rightindex] = item; in deque_inplace_repeat()
714 if (deque->maxlen >= 0 && n * size > deque->maxlen) in deque_inplace_repeat()
715 n = (deque->maxlen + size - 1) / size; in deque_inplace_repeat()
717 for (i = 0 ; i < n-1 ; i++) { in deque_inplace_repeat()
747 Rotation by 1 or -1 is a common case, so any optimizations for high
760 non-overlapping, that moving just one pointer is a common case, that we
766 destination block. If a block is left-over at the end, it is freed.
773 block *leftblock = deque->leftblock; in _deque_rotate()
774 block *rightblock = deque->rightblock; in _deque_rotate()
775 Py_ssize_t leftindex = deque->leftindex; in _deque_rotate()
776 Py_ssize_t rightindex = deque->rightindex; in _deque_rotate()
778 int rv = -1; in _deque_rotate()
782 if (n > halflen || n < -halflen) { in _deque_rotate()
785 n -= len; in _deque_rotate()
786 else if (n < -halflen) in _deque_rotate()
790 assert(-halflen <= n && n <= halflen); in _deque_rotate()
792 deque->state++; in _deque_rotate()
800 b->rightlink = leftblock; in _deque_rotate()
801 CHECK_END(leftblock->leftlink); in _deque_rotate()
802 leftblock->leftlink = b; in _deque_rotate()
804 MARK_END(b->leftlink); in _deque_rotate()
818 rightindex -= m; in _deque_rotate()
819 leftindex -= m; in _deque_rotate()
820 src = &rightblock->data[rightindex + 1]; in _deque_rotate()
821 dest = &leftblock->data[leftindex]; in _deque_rotate()
822 n -= m; in _deque_rotate()
825 } while (--m); in _deque_rotate()
831 CHECK_NOT_END(rightblock->leftlink); in _deque_rotate()
832 rightblock = rightblock->leftlink; in _deque_rotate()
833 MARK_END(rightblock->rightlink); in _deque_rotate()
834 rightindex = BLOCKLEN - 1; in _deque_rotate()
838 if (rightindex == BLOCKLEN - 1) { in _deque_rotate()
844 b->leftlink = rightblock; in _deque_rotate()
845 CHECK_END(rightblock->rightlink); in _deque_rotate()
846 rightblock->rightlink = b; in _deque_rotate()
848 MARK_END(b->rightlink); in _deque_rotate()
849 rightindex = -1; in _deque_rotate()
852 assert (rightindex < BLOCKLEN - 1); in _deque_rotate()
855 Py_ssize_t m = -n; in _deque_rotate()
857 if (m > BLOCKLEN - leftindex) in _deque_rotate()
858 m = BLOCKLEN - leftindex; in _deque_rotate()
859 if (m > BLOCKLEN - 1 - rightindex) in _deque_rotate()
860 m = BLOCKLEN - 1 - rightindex; in _deque_rotate()
862 src = &leftblock->data[leftindex]; in _deque_rotate()
863 dest = &rightblock->data[rightindex + 1]; in _deque_rotate()
869 } while (--m); in _deque_rotate()
875 CHECK_NOT_END(leftblock->rightlink); in _deque_rotate()
876 leftblock = leftblock->rightlink; in _deque_rotate()
877 MARK_END(leftblock->leftlink); in _deque_rotate()
885 deque->leftblock = leftblock; in _deque_rotate()
886 deque->rightblock = rightblock; in _deque_rotate()
887 deque->leftindex = leftindex; in _deque_rotate()
888 deque->rightindex = rightindex; in _deque_rotate()
908 if (n == -1 && PyErr_Occurred()) { in deque_rotate()
924 block *leftblock = deque->leftblock; in deque_reverse()
925 block *rightblock = deque->rightblock; in deque_reverse()
926 Py_ssize_t leftindex = deque->leftindex; in deque_reverse()
927 Py_ssize_t rightindex = deque->rightindex; in deque_reverse()
931 while (--n >= 0) { in deque_reverse()
938 tmp = leftblock->data[leftindex]; in deque_reverse()
939 leftblock->data[leftindex] = rightblock->data[rightindex]; in deque_reverse()
940 rightblock->data[rightindex] = tmp; in deque_reverse()
945 leftblock = leftblock->rightlink; in deque_reverse()
950 rightindex--; in deque_reverse()
952 rightblock = rightblock->leftlink; in deque_reverse()
953 rightindex = BLOCKLEN - 1; in deque_reverse()
960 "D.reverse() -- reverse *IN PLACE*");
965 block *b = deque->leftblock; in deque_count()
966 Py_ssize_t index = deque->leftindex; in deque_count()
969 size_t start_state = deque->state; in deque_count()
973 while (--n >= 0) { in deque_count()
975 item = b->data[index]; in deque_count()
983 if (start_state != deque->state) { in deque_count()
992 b = b->rightlink; in deque_count()
1000 "D.count(value) -- return number of occurrences of value");
1005 block *b = deque->leftblock; in deque_contains()
1006 Py_ssize_t index = deque->leftindex; in deque_contains()
1008 size_t start_state = deque->state; in deque_contains()
1012 while (--n >= 0) { in deque_contains()
1014 item = b->data[index]; in deque_contains()
1021 if (start_state != deque->state) { in deque_contains()
1024 return -1; in deque_contains()
1028 b = b->rightlink; in deque_contains()
1046 block *b = deque->leftblock; in deque_index()
1047 Py_ssize_t index = deque->leftindex; in deque_index()
1048 size_t start_state = deque->state; in deque_index()
1073 for (i=0 ; i < start - BLOCKLEN ; i += BLOCKLEN) { in deque_index()
1074 b = b->rightlink; in deque_index()
1079 b = b->rightlink; in deque_index()
1084 n = stop - i; in deque_index()
1085 while (--n >= 0) { in deque_index()
1087 item = b->data[index]; in deque_index()
1090 return PyLong_FromSsize_t(stop - n - 1); in deque_index()
1093 if (start_state != deque->state) { in deque_index()
1100 b = b->rightlink; in deque_index()
1109 "D.index(value, [start, [stop]]) -- return first index of value.\n"
1115 hard to re-implement this using direct data movement (similar to
1132 if (deque->maxlen == Py_SIZE(deque)) { in deque_insert()
1138 if (index <= -n || index == 0) in deque_insert()
1140 if (_deque_rotate(deque, -index)) in deque_insert()
1155 "D.insert(index, object) -- insert object before index");
1158 "D.remove(value) -- remove first occurrence of value.");
1181 i = deque->leftindex; in deque_item()
1182 b = deque->leftblock; in deque_item()
1183 } else if (i == Py_SIZE(deque) - 1) { in deque_item()
1184 i = deque->rightindex; in deque_item()
1185 b = deque->rightblock; in deque_item()
1187 i += deque->leftindex; in deque_item()
1191 b = deque->leftblock; in deque_item()
1192 while (--n >= 0) in deque_item()
1193 b = b->rightlink; in deque_item()
1196 ((size_t)(deque->leftindex + Py_SIZE(deque) - 1)) in deque_item()
1197 / BLOCKLEN - n); in deque_item()
1198 b = deque->rightblock; in deque_item()
1199 while (--n >= 0) in deque_item()
1200 b = b->leftlink; in deque_item()
1203 item = b->data[i]; in deque_item()
1215 if (_deque_rotate(deque, -i)) in deque_del_item()
1216 return -1; in deque_del_item()
1228 block *b = deque->leftblock; in deque_remove()
1229 Py_ssize_t i, n = Py_SIZE(deque), index = deque->leftindex; in deque_remove()
1230 size_t start_state = deque->state; in deque_remove()
1234 item = b->data[index]; in deque_remove()
1241 if (start_state != deque->state) { in deque_remove()
1251 b = b->rightlink; in deque_remove()
1260 if (rv == -1) { in deque_remove()
1275 return -1; in deque_ass_item()
1280 i += deque->leftindex; in deque_ass_item()
1284 b = deque->leftblock; in deque_ass_item()
1285 while (--n >= 0) in deque_ass_item()
1286 b = b->rightlink; in deque_ass_item()
1289 ((size_t)(deque->leftindex + Py_SIZE(deque) - 1)) in deque_ass_item()
1290 / BLOCKLEN - n); in deque_ass_item()
1291 b = deque->rightblock; in deque_ass_item()
1292 while (--n >= 0) in deque_ass_item()
1293 b = b->leftlink; in deque_ass_item()
1296 old_value = b->data[i]; in deque_ass_item()
1297 b->data[i] = v; in deque_ass_item()
1308 if (deque->weakreflist != NULL) in deque_dealloc()
1310 if (deque->leftblock != NULL) { in deque_dealloc()
1312 assert(deque->leftblock != NULL); in deque_dealloc()
1313 freeblock(deque, deque->leftblock); in deque_dealloc()
1315 deque->leftblock = NULL; in deque_dealloc()
1316 deque->rightblock = NULL; in deque_dealloc()
1317 for (i=0 ; i < deque->numfreeblocks ; i++) { in deque_dealloc()
1318 PyMem_Free(deque->freeblocks[i]); in deque_dealloc()
1320 Py_TYPE(deque)->tp_free(deque); in deque_dealloc()
1329 Py_ssize_t indexlo = deque->leftindex; in deque_traverse()
1332 for (b = deque->leftblock; b != deque->rightblock; b = b->rightlink) { in deque_traverse()
1334 item = b->data[index]; in deque_traverse()
1339 indexhigh = deque->rightindex; in deque_traverse()
1341 item = b->data[index]; in deque_traverse()
1363 if (deque->maxlen < 0) { in deque_reduce()
1367 return Py_BuildValue("O(()n)NN", Py_TYPE(deque), deque->maxlen, state, it); in deque_reduce()
1391 if (((dequeobject *)deque)->maxlen >= 0) in deque_repr()
1394 ((dequeobject *)deque)->maxlen); in deque_repr()
1408 int b, cmp=-1; in deque_richcompare()
1486 Py_ssize_t maxlen = -1; in deque_init()
1499 return -1; in deque_init()
1503 if (maxlen == -1 && PyErr_Occurred()) in deque_init()
1504 return -1; in deque_init()
1506 PyErr_SetString(PyExc_ValueError, "maxlen must be non-negative"); in deque_init()
1507 return -1; in deque_init()
1510 deque->maxlen = maxlen; in deque_init()
1516 return -1; in deque_init()
1529 blocks = (size_t)(deque->leftindex + Py_SIZE(deque) + BLOCKLEN - 1) / BLOCKLEN; in deque_sizeof()
1530 assert(deque->leftindex + Py_SIZE(deque) - 1 == in deque_sizeof()
1531 (blocks - 1) * BLOCKLEN + deque->rightindex); in deque_sizeof()
1537 "D.__sizeof__() -- size of D in memory, in bytes");
1542 if (deque->maxlen < 0) in deque_get_maxlen()
1544 return PyLong_FromSsize_t(deque->maxlen); in deque_get_maxlen()
1572 "D.__reversed__() -- return a reverse iterator over the deque");
1617 "deque([iterable[, maxlen]]) --> deque object\n\
1619 A list-like sequence optimized for data accesses near its endpoints.");
1687 it->b = deque->leftblock; in deque_iter()
1688 it->index = deque->leftindex; in deque_iter()
1690 it->deque = deque; in deque_iter()
1691 it->state = deque->state; in deque_iter()
1692 it->counter = Py_SIZE(deque); in deque_iter()
1700 Py_VISIT(dio->deque); in dequeiter_traverse()
1707 /* bpo-31095: UnTrack is needed before calling any callbacks */ in dequeiter_dealloc()
1709 Py_XDECREF(dio->deque); in dequeiter_dealloc()
1718 if (it->deque->state != it->state) { in dequeiter_next()
1719 it->counter = 0; in dequeiter_next()
1724 if (it->counter == 0) in dequeiter_next()
1726 assert (!(it->b == it->deque->rightblock && in dequeiter_next()
1727 it->index > it->deque->rightindex)); in dequeiter_next()
1729 item = it->b->data[it->index]; in dequeiter_next()
1730 it->index++; in dequeiter_next()
1731 it->counter--; in dequeiter_next()
1732 if (it->index == BLOCKLEN && it->counter > 0) { in dequeiter_next()
1733 CHECK_NOT_END(it->b->rightlink); in dequeiter_next()
1734 it->b = it->b->rightlink; in dequeiter_next()
1735 it->index = 0; in dequeiter_next()
1760 if (it->counter) { in dequeiter_new()
1773 return PyLong_FromSsize_t(it->counter); in dequeiter_len()
1781 return Py_BuildValue("O(On)", Py_TYPE(it), it->deque, Py_SIZE(it->deque) - it->counter); in dequeiter_reduce()
1845 it->b = deque->rightblock; in deque_reviter()
1846 it->index = deque->rightindex; in deque_reviter()
1848 it->deque = deque; in deque_reviter()
1849 it->state = deque->state; in deque_reviter()
1850 it->counter = Py_SIZE(deque); in deque_reviter()
1859 if (it->counter == 0) in dequereviter_next()
1862 if (it->deque->state != it->state) { in dequereviter_next()
1863 it->counter = 0; in dequereviter_next()
1868 assert (!(it->b == it->deque->leftblock && in dequereviter_next()
1869 it->index < it->deque->leftindex)); in dequereviter_next()
1871 item = it->b->data[it->index]; in dequereviter_next()
1872 it->index--; in dequereviter_next()
1873 it->counter--; in dequereviter_next()
1874 if (it->index < 0 && it->counter > 0) { in dequereviter_next()
1875 CHECK_NOT_END(it->b->leftlink); in dequereviter_next()
1876 it->b = it->b->leftlink; in dequereviter_next()
1877 it->index = BLOCKLEN - 1; in dequereviter_next()
1902 if (it->counter) { in dequereviter_new()
1965 "__missing__(key) # Called by __getitem__ for missing key; pseudo-code:\n\
1974 PyObject *factory = dd->default_factory; in defdict_missing()
1999 dd->default_factory ? dd->default_factory : Py_None, arg, NULL); in new_defdict()
2002 PyDoc_STRVAR(defdict_copy_doc, "D.copy() -> a shallow copy of D.");
2017 /* __reduce__ must return a 5-tuple as follows: in defdict_reduce()
2019 - factory function in defdict_reduce()
2020 - tuple of args for the factory function in defdict_reduce()
2021 - additional state (here None) in defdict_reduce()
2022 - sequence iterator (here None) in defdict_reduce()
2023 - dictionary iterator (yielding successive (key, value) pairs in defdict_reduce()
2028 must be picklable; e.g., None, a built-in, or a global in defdict_reduce()
2031 Both shallow and deep copying are supported, but for deep in defdict_reduce()
2032 copying, the default_factory must be deep-copyable; e.g. None, in defdict_reduce()
2033 or a built-in (functions are not copyable at this time). in defdict_reduce()
2044 if (dd->default_factory == NULL || dd->default_factory == Py_None) in defdict_reduce()
2047 args = PyTuple_Pack(1, dd->default_factory); in defdict_reduce()
2093 /* bpo-31095: UnTrack is needed before calling any callbacks */ in defdict_dealloc()
2095 Py_CLEAR(dd->default_factory); in defdict_dealloc()
2108 if (dd->default_factory == NULL) in defdict_repr()
2112 int status = Py_ReprEnter(dd->default_factory); in defdict_repr()
2121 defrepr = PyObject_Repr(dd->default_factory); in defdict_repr()
2122 Py_ReprLeave(dd->default_factory); in defdict_repr()
2171 Py_VISIT(((defdictobject *)self)->default_factory); in defdict_traverse()
2178 Py_CLEAR(dd->default_factory); in defdict_tp_clear()
2186 PyObject *olddefault = dd->default_factory; in defdict_init()
2199 return -1; in defdict_init()
2205 return -1; in defdict_init()
2207 dd->default_factory = newdefault; in defdict_init()
2215 "defaultdict(default_factory=None, /, [...]) --> dict with default factory\n\
2219 A defaultdict compares equal to a dict with the same items.\n\
2302 /* Only take the fast path when get() and __setitem__() in _collections__count_elements_impl()
2315 /* Fast path advantages: in _collections__count_elements_impl()
2317 (by re-using the same hash for both the get and set) in _collections__count_elements_impl()
2323 (reuse an existing one-object instead) in _collections__count_elements_impl()
2332 (hash = _PyASCIIObject_CAST(key)->hash) == -1) in _collections__count_elements_impl()
2335 if (hash == -1) in _collections__count_elements_impl()
2412 self = (_tuplegetterobject *)type->tp_alloc(type, 0); in tuplegetter_new_impl()
2416 self->index = index; in tuplegetter_new_impl()
2418 self->doc = doc; in tuplegetter_new_impl()
2425 Py_ssize_t index = ((_tuplegetterobject*)self)->index; in tuplegetter_descr_get()
2441 Py_TYPE(obj)->tp_name); in tuplegetter_descr_get()
2463 return -1; in tuplegetter_descr_set()
2470 Py_VISIT(tuplegetter->doc); in tuplegetter_traverse()
2478 Py_CLEAR(tuplegetter->doc); in tuplegetter_clear()
2487 Py_TYPE(self)->tp_free((PyObject*)self); in tuplegetter_dealloc()
2493 return Py_BuildValue("(O(nO))", (PyObject*) Py_TYPE(self), self->index, self->doc); in tuplegetter_reduce()
2501 self->index, self->doc); in tuplegetter_repr()
2563 - deque: ordered collection accessible from endpoints only\n\
2564 - defaultdict: dict subclass with a default value factory\n\
2587 return -1; in collections_exec()