Lines Matching refs:od

76 * _odictnode_VALUE(od, node)
82 * _odict_FIRST(od)
83 * _odict_LAST(od)
84 * _odict_EMPTY(od)
85 * _odict_FOREACH(od, node) - used in place of `for (node=...)`
89 * _odict_add_head(od, node)
90 * _odict_add_tail(od, node)
91 * _odict_add_new_node(od, key, hash)
95 * _odict_clear_node(od, node, key, hash)
96 * _odict_clear_nodes(od, clear_each)
100 * _odict_find_node_hash(od, key, hash)
101 * _odict_find_node(od, key)
517 #define _odictnode_VALUE(node, od) \
518 PyODict_GetItemWithError((PyObject *)od, _odictnode_KEY(node))
522 #define _odict_FIRST(od) (((PyODictObject *)od)->od_first)
523 #define _odict_LAST(od) (((PyODictObject *)od)->od_last)
524 #define _odict_EMPTY(od) (_odict_FIRST(od) == NULL)
525 #define _odict_FOREACH(od, node) \
526 for (node = _odict_FIRST(od); node != NULL; node = _odictnode_NEXT(node))
530 _odict_get_index_raw(PyODictObject *od, PyObject *key, Py_hash_t hash)
533 PyDictKeysObject *keys = ((PyDictObject *)od)->ma_keys;
536 ix = _Py_dict_lookup((PyDictObject *)od, key, hash, &value);
548 /* Replace od->od_fast_nodes with a new table matching the size of dict's. */
550 _odict_resize(PyODictObject *od)
556 size = ONE << (((PyDictObject *)od)->ma_keys->dk_log2_size);
566 _odict_FOREACH(od, node) {
567 i = _odict_get_index_raw(od, _odictnode_KEY(node),
577 PyMem_Free(od->od_fast_nodes);
578 od->od_fast_nodes = fast_nodes;
579 od->od_fast_nodes_size = size;
580 od->od_resize_sentinel = ((PyDictObject *)od)->ma_keys;
586 _odict_get_index(PyODictObject *od, PyObject *key, Py_hash_t hash)
591 keys = ((PyDictObject *)od)->ma_keys;
594 if (od->od_resize_sentinel != keys ||
595 od->od_fast_nodes_size != (ONE << (keys->dk_log2_size))) {
596 int resize_res = _odict_resize(od);
601 return _odict_get_index_raw(od, key, hash);
606 _odict_find_node_hash(PyODictObject *od, PyObject *key, Py_hash_t hash)
610 if (_odict_EMPTY(od))
612 index = _odict_get_index(od, key, hash);
615 assert(od->od_fast_nodes != NULL);
616 return od->od_fast_nodes[index];
620 _odict_find_node(PyODictObject *od, PyObject *key)
625 if (_odict_EMPTY(od))
630 index = _odict_get_index(od, key, hash);
633 assert(od->od_fast_nodes != NULL);
634 return od->od_fast_nodes[index];
638 _odict_add_head(PyODictObject *od, _ODictNode *node)
641 _odictnode_NEXT(node) = _odict_FIRST(od);
642 if (_odict_FIRST(od) == NULL)
643 _odict_LAST(od) = node;
645 _odictnode_PREV(_odict_FIRST(od)) = node;
646 _odict_FIRST(od) = node;
647 od->od_state++;
651 _odict_add_tail(PyODictObject *od, _ODictNode *node)
653 _odictnode_PREV(node) = _odict_LAST(od);
655 if (_odict_LAST(od) == NULL)
656 _odict_FIRST(od) = node;
658 _odictnode_NEXT(_odict_LAST(od)) = node;
659 _odict_LAST(od) = node;
660 od->od_state++;
665 _odict_add_new_node(PyODictObject *od, PyObject *key, Py_hash_t hash)
671 i = _odict_get_index(od, key, hash);
678 assert(od->od_fast_nodes != NULL);
679 if (od->od_fast_nodes[i] != NULL) {
695 _odict_add_tail(od, node);
696 od->od_fast_nodes[i] = node;
709 _odict_remove_node(PyODictObject *od, _ODictNode *node)
711 if (_odict_FIRST(od) == node)
712 _odict_FIRST(od) = _odictnode_NEXT(node);
716 if (_odict_LAST(od) == node)
717 _odict_LAST(od) = _odictnode_PREV(node);
723 od->od_state++;
743 _odict_clear_node(PyODictObject *od, _ODictNode *node, PyObject *key,
749 if (_odict_EMPTY(od)) {
754 i = _odict_get_index(od, key, hash);
758 assert(od->od_fast_nodes != NULL);
760 node = od->od_fast_nodes[i];
761 assert(node == od->od_fast_nodes[i]);
768 od->od_fast_nodes[i] = NULL;
769 _odict_remove_node(od, node);
775 _odict_clear_nodes(PyODictObject *od)
779 PyMem_Free(od->od_fast_nodes);
780 od->od_fast_nodes = NULL;
781 od->od_fast_nodes_size = 0;
782 od->od_resize_sentinel = NULL;
784 node = _odict_FIRST(od);
785 _odict_FIRST(od) = NULL;
786 _odict_LAST(od) = NULL;
836 odict_mp_ass_sub(PyODictObject *od, PyObject *v, PyObject *w)
839 return PyODict_DelItem((PyObject *)od, v);
841 return PyODict_SetItem((PyObject *)od, v, w);
933 odict_sizeof(PyODictObject *od, PyObject *Py_UNUSED(ignored))
935 Py_ssize_t res = _PyDict_SizeOf((PyDictObject *)od);
936 res += sizeof(_ODictNode *) * od->od_fast_nodes_size; /* od_fast_nodes */
937 if (!_odict_EMPTY(od)) {
938 res += sizeof(_ODictNode) * PyODict_SIZE(od); /* linked-list */
948 odict_reduce(register PyODictObject *od, PyObject *Py_UNUSED(ignored))
954 state = _PyObject_GetState((PyObject *)od);
963 items = PyObject_CallMethodNoArgs((PyObject *)od, &_Py_ID(items));
972 result = PyTuple_Pack(5, Py_TYPE(od), args, state, Py_None, items_iter);
1038 _odict_popkey_hash(PyObject *od, PyObject *key, PyObject *failobj,
1043 _ODictNode *node = _odict_find_node_hash((PyODictObject *)od, key, hash);
1048 int res = _odict_clear_node((PyODictObject *)od, node, key, hash);
1053 value = _PyDict_Pop_KnownHash(od, key, hash, failobj);
1076 od.pop(key[,default]) -> v, remove specified key and return the corresponding value.
1137 static PyObject * odictkeys_new(PyObject *od, PyObject *Py_UNUSED(ignored)); /* forward */
1144 static PyObject * odictvalues_new(PyObject *od, PyObject *Py_UNUSED(ignored)); /* forward */
1151 static PyObject * odictitems_new(PyObject *od, PyObject *Py_UNUSED(ignored)); /* forward */
1166 "od.clear() -> None. Remove all items from od.");
1169 odict_clear(register PyODictObject *od, PyObject *Py_UNUSED(ignored))
1171 PyDict_Clear((PyObject *)od);
1172 _odict_clear_nodes(od);
1182 PyDoc_STRVAR(odict_copy__doc__, "od.copy() -> a shallow copy of od");
1185 odict_copy(register PyODictObject *od, PyObject *Py_UNUSED(ignored))
1190 if (PyODict_CheckExact(od))
1193 od_copy = _PyObject_CallNoArgs((PyObject *)Py_TYPE(od));
1197 if (PyODict_CheckExact(od)) {
1198 _odict_FOREACH(od, node) {
1200 PyObject *value = _odictnode_VALUE(node, od);
1212 _odict_FOREACH(od, node) {
1214 PyObject *value = PyObject_GetItem((PyObject *)od,
1234 PyDoc_STRVAR(odict_reversed__doc__, "od.__reversed__() <==> reversed(od)");
1245 odict_reversed(PyODictObject *od, PyObject *Py_UNUSED(ignored))
1247 return odictiter_new(od, _odict_ITER_KEYS|_odict_ITER_REVERSED);
1448 odict_traverse(PyODictObject *od, visitproc visit, void *arg)
1452 Py_VISIT(od->od_inst_dict);
1453 _odict_FOREACH(od, node) {
1456 return PyDict_Type.tp_traverse((PyObject *)od, visit, arg);
1462 odict_tp_clear(PyODictObject *od)
1464 Py_CLEAR(od->od_inst_dict);
1465 PyDict_Clear((PyObject *)od);
1466 _odict_clear_nodes(od);
1510 odict_iter(PyODictObject *od)
1512 return odictiter_new(od, _odict_ITER_KEYS);
1597 _PyODict_SetItem_KnownHash(PyObject *od, PyObject *key, PyObject *value,
1600 int res = _PyDict_SetItem_KnownHash(od, key, value, hash);
1602 res = _odict_add_new_node((PyODictObject *)od, key, hash);
1607 (void) _PyDict_DelItem_KnownHash(od, key, hash);
1615 PyODict_SetItem(PyObject *od, PyObject *key, PyObject *value)
1620 return _PyODict_SetItem_KnownHash(od, key, value, hash);
1624 PyODict_DelItem(PyObject *od, PyObject *key)
1630 res = _odict_clear_node((PyODictObject *)od, NULL, key, hash);
1633 return _PyDict_DelItem_KnownHash(od, key, hash);
1852 odictiter_new(PyODictObject *od, int kind)
1874 node = reversed ? _odict_LAST(od) : _odict_FIRST(od);
1877 di->di_size = PyODict_SIZE(od);
1878 di->di_state = od->od_state;
1879 di->di_odict = od;
1880 Py_INCREF(od);
1948 odictkeys_new(PyObject *od, PyObject *Py_UNUSED(ignored))
1950 return _PyDictView_New(od, &PyODictKeys_Type);
2015 odictitems_new(PyObject *od, PyObject *Py_UNUSED(ignored))
2017 return _PyDictView_New(od, &PyODictItems_Type);
2082 odictvalues_new(PyObject *od, PyObject *Py_UNUSED(ignored))
2084 return _PyDictView_New(od, &PyODictValues_Type);