Lines Matching refs:self

687 hamt_node_bitmap_assoc(PyHamtNode_Bitmap *self,
693 Return: a new node, or self if key/val already is in the
701 uint32_t idx = hamt_bitindex(self->b_bitmap, bit);
717 if (self->b_bitmap & bit) {
723 assert(val_idx < (size_t)Py_SIZE(self));
725 PyObject *key_or_null = self->b_array[key_idx];
726 PyObject *val_or_node = self->b_array[val_idx];
743 Py_INCREF(self);
744 return (PyHamtNode *)self;
747 PyHamtNode_Bitmap *ret = hamt_node_bitmap_clone(self);
765 /* we already have the same key/val pair; return self. */
766 Py_INCREF(self);
767 return (PyHamtNode *)self;
772 PyHamtNode_Bitmap *ret = hamt_node_bitmap_clone(self);
799 PyHamtNode_Bitmap *ret = hamt_node_bitmap_clone(self);
813 uint32_t n = (uint32_t)_Py_popcount32(self->b_bitmap);
864 if (((self->b_bitmap >> i) & 1) != 0) {
870 if (self->b_array[j] == NULL) {
872 (PyHamtNode *)self->b_array[j + 1];
876 int32_t rehash = hamt_hash(self->b_array[j]);
884 self->b_array[j],
885 self->b_array[j + 1],
930 Py_XINCREF(self->b_array[i]);
931 new_node->b_array[i] = self->b_array[i];
942 assert(Py_SIZE(self) >= 0 && Py_SIZE(self) <= 32);
943 for (i = key_idx; i < (uint32_t)Py_SIZE(self); i++) {
944 Py_XINCREF(self->b_array[i]);
945 new_node->b_array[i + 2] = self->b_array[i];
948 new_node->b_bitmap = self->b_bitmap | bit;
955 hamt_node_bitmap_without(PyHamtNode_Bitmap *self,
961 if ((self->b_bitmap & bit) == 0) {
965 uint32_t idx = hamt_bitindex(self->b_bitmap, bit);
970 PyObject *key_or_null = self->b_array[key_idx];
971 PyObject *val_or_node = self->b_array[val_idx];
1017 PyHamtNode_Bitmap *clone = hamt_node_bitmap_clone(self);
1048 PyHamtNode_Bitmap *clone = hamt_node_bitmap_clone(self);
1080 if (hamt_node_bitmap_count(self) == 1) {
1085 hamt_node_bitmap_clone_without(self, bit);
1095 hamt_node_bitmap_find(PyHamtNode_Bitmap *self,
1109 if ((self->b_bitmap & bit) == 0) {
1113 idx = hamt_bitindex(self->b_bitmap, bit);
1117 assert(val_idx < (size_t)Py_SIZE(self));
1119 key_or_null = self->b_array[key_idx];
1120 val_or_node = self->b_array[val_idx];
1146 hamt_node_bitmap_traverse(PyHamtNode_Bitmap *self, visitproc visit, void *arg)
1152 for (i = Py_SIZE(self); --i >= 0; ) {
1153 Py_VISIT(self->b_array[i]);
1160 hamt_node_bitmap_dealloc(PyHamtNode_Bitmap *self)
1164 Py_ssize_t len = Py_SIZE(self);
1167 PyObject_GC_UnTrack(self);
1168 Py_TRASHCAN_BEGIN(self, hamt_node_bitmap_dealloc)
1173 Py_XDECREF(self->b_array[i]);
1177 Py_TYPE(self)->tp_free((PyObject *)self);
1289 hamt_node_collision_find_index(PyHamtNode_Collision *self, PyObject *key,
1292 /* Lookup `key` in the Collision node `self`. Set the index of the
1298 for (i = 0; i < Py_SIZE(self); i += 2) {
1299 el = self->c_array[i];
1316 hamt_node_collision_assoc(PyHamtNode_Collision *self,
1323 if (hash == self->c_hash) {
1333 found = hamt_node_collision_find_index(self, key, &key_idx);
1344 self->c_hash, Py_SIZE(self) + 2);
1349 for (i = 0; i < Py_SIZE(self); i++) {
1350 Py_INCREF(self->c_array[i]);
1351 new_node->c_array[i] = self->c_array[i];
1366 assert(key_idx < Py_SIZE(self));
1369 if (self->c_array[val_idx] == val) {
1371 Py_INCREF(self);
1372 return (PyHamtNode *)self;
1378 self->c_hash, Py_SIZE(self));
1384 for (i = 0; i < Py_SIZE(self); i++) {
1385 Py_INCREF(self->c_array[i]);
1386 new_node->c_array[i] = self->c_array[i];
1416 new_node->b_bitmap = hamt_bitpos(self->c_hash, shift);
1417 Py_INCREF(self);
1418 new_node->b_array[1] = (PyObject*) self;
1434 hamt_node_collision_without(PyHamtNode_Collision *self,
1439 if (hash != self->c_hash) {
1444 hamt_find_t found = hamt_node_collision_find_index(self, key, &key_idx);
1455 assert(key_idx < Py_SIZE(self));
1457 Py_ssize_t new_count = hamt_node_collision_count(self) - 1;
1480 Py_INCREF(self->c_array[2]);
1481 node->b_array[0] = self->c_array[2];
1482 Py_INCREF(self->c_array[3]);
1483 node->b_array[1] = self->c_array[3];
1487 Py_INCREF(self->c_array[0]);
1488 node->b_array[0] = self->c_array[0];
1489 Py_INCREF(self->c_array[1]);
1490 node->b_array[1] = self->c_array[1];
1503 self->c_hash, Py_SIZE(self) - 2);
1508 /* Copy all other keys from `self` to `new` */
1511 Py_INCREF(self->c_array[i]);
1512 new->c_array[i] = self->c_array[i];
1514 for (i = key_idx + 2; i < Py_SIZE(self); i++) {
1515 Py_INCREF(self->c_array[i]);
1516 new->c_array[i - 2] = self->c_array[i];
1528 hamt_node_collision_find(PyHamtNode_Collision *self,
1532 /* Lookup `key` in the Collision node `self`. Set the value
1538 res = hamt_node_collision_find_index(self, key, &idx);
1544 assert(idx + 1 < Py_SIZE(self));
1546 *val = self->c_array[idx + 1];
1554 hamt_node_collision_traverse(PyHamtNode_Collision *self,
1561 for (i = Py_SIZE(self); --i >= 0; ) {
1562 Py_VISIT(self->c_array[i]);
1569 hamt_node_collision_dealloc(PyHamtNode_Collision *self)
1573 Py_ssize_t len = Py_SIZE(self);
1575 PyObject_GC_UnTrack(self);
1576 Py_TRASHCAN_BEGIN(self, hamt_node_collision_dealloc)
1581 Py_XDECREF(self->c_array[len]);
1585 Py_TYPE(self)->tp_free((PyObject *)self);
1677 hamt_node_array_assoc(PyHamtNode_Array *self,
1689 PyHamtNode *node = self->a_array[idx];
1717 new_node = (PyHamtNode_Array *)hamt_node_array_new(self->a_count + 1);
1726 Py_XINCREF(self->a_array[i]);
1727 new_node->a_array[i] = self->a_array[i];
1742 else if (child_node == (PyHamtNode *)self) {
1744 return (PyHamtNode *)self;
1747 new_node = hamt_node_array_clone(self);
1761 hamt_node_array_without(PyHamtNode_Array *self,
1767 PyHamtNode *node = self->a_array[idx];
1790 PyHamtNode_Array *clone = hamt_node_array_clone(self);
1806 Py_ssize_t new_count = self->a_count - 1;
1820 PyHamtNode_Array *new = hamt_node_array_clone(self);
1850 PyHamtNode *node = self->a_array[i];
1919 hamt_node_array_find(PyHamtNode_Array *self,
1923 /* Lookup `key` in the Array node `self`. Set the value
1929 node = self->a_array[idx];
1939 hamt_node_array_traverse(PyHamtNode_Array *self,
1947 Py_VISIT(self->a_array[i]);
1954 hamt_node_array_dealloc(PyHamtNode_Array *self)
1960 PyObject_GC_UnTrack(self);
1961 Py_TRASHCAN_BEGIN(self, hamt_node_array_dealloc)
1964 Py_XDECREF(self->a_array[i]);
1967 Py_TYPE(self)->tp_free((PyObject *)self);
2510 hamt_dump(PyHamtObject *self)
2516 if (_hamt_dump_format(&writer, "HAMT(len=%zd):\n", self->h_count)) {
2520 if (hamt_node_dump(self->h_root, &writer, 0)) {
2696 hamt_dump(PyHamtObject *self);
2707 hamt_tp_clear(PyHamtObject *self)
2709 Py_CLEAR(self->h_root);
2715 hamt_tp_traverse(PyHamtObject *self, visitproc visit, void *arg)
2717 Py_VISIT(self->h_root);
2722 hamt_tp_dealloc(PyHamtObject *self)
2724 PyObject_GC_UnTrack(self);
2725 if (self->h_weakreflist != NULL) {
2726 PyObject_ClearWeakRefs((PyObject*)self);
2728 (void)hamt_tp_clear(self);
2729 Py_TYPE(self)->tp_free(self);
2758 hamt_tp_contains(PyHamtObject *self, PyObject *key)
2761 return _PyHamt_Find(self, key, &val);
2765 hamt_tp_subscript(PyHamtObject *self, PyObject *key)
2768 hamt_find_t res = hamt_find(self, key, &val);
2784 hamt_tp_len(PyHamtObject *self)
2786 return _PyHamt_Len(self);
2790 hamt_tp_iter(PyHamtObject *self)
2792 return _PyHamt_NewIterKeys(self);
2796 hamt_py_set(PyHamtObject *self, PyObject *args)
2805 return (PyObject *)_PyHamt_Assoc(self, key, val);
2809 hamt_py_get(PyHamtObject *self, PyObject *args)
2819 hamt_find_t res = hamt_find(self, key, &val);
2838 hamt_py_delete(PyHamtObject *self, PyObject *key)
2840 return (PyObject *)_PyHamt_Without(self, key);
2844 hamt_py_items(PyHamtObject *self, PyObject *args)
2846 return _PyHamt_NewIterItems(self);
2850 hamt_py_values(PyHamtObject *self, PyObject *args)
2852 return _PyHamt_NewIterValues(self);
2856 hamt_py_keys(PyHamtObject *self, PyObject *Py_UNUSED(args))
2858 return _PyHamt_NewIterKeys(self);
2863 hamt_py_dump(PyHamtObject *self, PyObject *Py_UNUSED(args))
2865 return hamt_dump(self);