Lines Matching full:extra
29 /* An element can hold this many children without extra memory
253 ElementObjectExtra* extra; member
270 self->extra = PyMem_Malloc(sizeof(ElementObjectExtra)); in create_extra()
271 if (!self->extra) { in create_extra()
276 self->extra->attrib = Py_XNewRef(attrib); in create_extra()
278 self->extra->length = 0; in create_extra()
279 self->extra->allocated = STATIC_CHILDREN; in create_extra()
280 self->extra->children = self->extra->_children; in create_extra()
286 dealloc_extra(ElementObjectExtra *extra) in dealloc_extra() argument
290 if (!extra) in dealloc_extra()
293 Py_XDECREF(extra->attrib); in dealloc_extra()
295 for (i = 0; i < extra->length; i++) in dealloc_extra()
296 Py_DECREF(extra->children[i]); in dealloc_extra()
298 if (extra->children != extra->_children) { in dealloc_extra()
299 PyMem_Free(extra->children); in dealloc_extra()
302 PyMem_Free(extra); in dealloc_extra()
310 if (!self->extra) in clear_extra()
315 myextra = self->extra; in clear_extra()
316 self->extra = NULL; in clear_extra()
332 self->extra = NULL; in create_new_element()
358 e->extra = NULL; in element_new()
461 element_resize(ElementObject* self, Py_ssize_t extra) in element_resize() argument
466 assert(extra >= 0); in element_resize()
467 /* make sure self->children can hold the given number of extra in element_resize()
470 if (!self->extra) { in element_resize()
475 size = self->extra->length + extra; /* never overflows */ in element_resize()
477 if (size > self->extra->allocated) { in element_resize()
488 if (self->extra->children != self->extra->_children) { in element_resize()
493 children = PyMem_Realloc(self->extra->children, in element_resize()
504 memcpy(children, self->extra->children, in element_resize()
505 self->extra->length * sizeof(PyObject*)); in element_resize()
507 self->extra->children = children; in element_resize()
508 self->extra->allocated = size; in element_resize()
539 self->extra->children[self->extra->length] = Py_NewRef(element); in element_add_subelement()
541 self->extra->length++; in element_add_subelement()
550 /* note: this function assumes that the extra section exists */ in element_get_attrib()
552 PyObject* res = self->extra->attrib; in element_get_attrib()
556 res = self->extra->attrib = PyDict_New(); in element_get_attrib()
658 if (self->extra) { in element_gc_traverse()
660 Py_VISIT(self->extra->attrib); in element_gc_traverse()
662 for (i = 0; i < self->extra->length; ++i) in element_gc_traverse()
663 Py_VISIT(self->extra->children[i]); in element_gc_traverse()
675 /* After dropping all references from extra, it's no longer valid anyway, in element_gc_clear()
694 /* element_gc_clear clears all references and deallocates extra in element_dealloc()
760 st, self->tag, self->extra ? self->extra->attrib : NULL); in _elementtree_Element___copy___impl()
770 assert(!element->extra || !element->extra->length); in _elementtree_Element___copy___impl()
771 if (self->extra) { in _elementtree_Element___copy___impl()
772 if (element_resize(element, self->extra->length) < 0) { in _elementtree_Element___copy___impl()
777 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element___copy___impl()
778 element->extra->children[i] = Py_NewRef(self->extra->children[i]); in _elementtree_Element___copy___impl()
781 assert(!element->extra->length); in _elementtree_Element___copy___impl()
782 element->extra->length = self->extra->length; in _elementtree_Element___copy___impl()
817 if (self->extra && self->extra->attrib) { in _elementtree_Element___deepcopy___impl()
818 attrib = deepcopy(st, self->extra->attrib, memo); in _elementtree_Element___deepcopy___impl()
845 assert(!element->extra || !element->extra->length); in _elementtree_Element___deepcopy___impl()
846 if (self->extra) { in _elementtree_Element___deepcopy___impl()
847 if (element_resize(element, self->extra->length) < 0) in _elementtree_Element___deepcopy___impl()
850 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element___deepcopy___impl()
851 PyObject* child = deepcopy(st, self->extra->children[i], memo); in _elementtree_Element___deepcopy___impl()
857 element->extra->length = i; in _elementtree_Element___deepcopy___impl()
860 element->extra->children[i] = child; in _elementtree_Element___deepcopy___impl()
863 assert(!element->extra->length); in _elementtree_Element___deepcopy___impl()
864 element->extra->length = self->extra->length; in _elementtree_Element___deepcopy___impl()
939 if (self->extra) { in _elementtree_Element___sizeof___impl()
941 if (self->extra->children != self->extra->_children) { in _elementtree_Element___sizeof___impl()
942 result += (size_t)self->extra->allocated * sizeof(PyObject*); in _elementtree_Element___sizeof___impl()
974 children = PyList_New(self->extra ? self->extra->length : 0); in _elementtree_Element___getstate___impl()
978 PyObject *child = Py_NewRef(self->extra->children[i]); in _elementtree_Element___getstate___impl()
982 if (self->extra && self->extra->attrib) { in _elementtree_Element___getstate___impl()
983 attrib = Py_NewRef(self->extra->attrib); in _elementtree_Element___getstate___impl()
1041 /* (Re-)allocate 'extra'. in element_setstate_from_attributes()
1044 oldextra = self->extra; in element_setstate_from_attributes()
1045 self->extra = NULL; in element_setstate_from_attributes()
1047 assert(!self->extra || !self->extra->length); in element_setstate_from_attributes()
1049 self->extra = oldextra; in element_setstate_from_attributes()
1052 assert(self->extra); in element_setstate_from_attributes()
1053 assert(self->extra->allocated >= nchildren); in element_setstate_from_attributes()
1055 assert(self->extra->attrib == NULL); in element_setstate_from_attributes()
1056 self->extra->attrib = oldextra->attrib; in element_setstate_from_attributes()
1065 self->extra->length = i; in element_setstate_from_attributes()
1069 self->extra->children[i] = Py_NewRef(child); in element_setstate_from_attributes()
1072 assert(!self->extra->length); in element_setstate_from_attributes()
1073 self->extra->length = nchildren; in element_setstate_from_attributes()
1082 Py_XSETREF(self->extra->attrib, Py_XNewRef(attrib)); in element_setstate_from_attributes()
1261 if (!self->extra) in _elementtree_Element_find_impl()
1264 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element_find_impl()
1265 PyObject* item = self->extra->children[i]; in _elementtree_Element_find_impl()
1306 if (!self->extra) { in _elementtree_Element_findtext_impl()
1310 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element_findtext_impl()
1311 PyObject *item = self->extra->children[i]; in _elementtree_Element_findtext_impl()
1363 if (!self->extra) in _elementtree_Element_findall_impl()
1366 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element_findall_impl()
1367 PyObject* item = self->extra->children[i]; in _elementtree_Element_findall_impl()
1418 if (self->extra && self->extra->attrib) { in _elementtree_Element_get_impl()
1419 PyObject *attrib = Py_NewRef(self->extra->attrib); in _elementtree_Element_get_impl()
1485 if (!self->extra || index < 0 || index >= self->extra->length) { in element_getitem()
1493 return Py_NewRef(self->extra->children[index]); in element_getitem()
1507 if (self->extra ? self->extra->length : 0) { in element_bool()
1529 if (!self->extra) { in _elementtree_Element_insert_impl()
1535 index += self->extra->length; in _elementtree_Element_insert_impl()
1539 if (index > self->extra->length) in _elementtree_Element_insert_impl()
1540 index = self->extra->length; in _elementtree_Element_insert_impl()
1545 for (i = self->extra->length; i > index; i--) in _elementtree_Element_insert_impl()
1546 self->extra->children[i] = self->extra->children[i-1]; in _elementtree_Element_insert_impl()
1548 self->extra->children[index] = Py_NewRef(subelement); in _elementtree_Element_insert_impl()
1550 self->extra->length++; in _elementtree_Element_insert_impl()
1564 if (!self->extra || !self->extra->attrib) in _elementtree_Element_items_impl()
1567 return PyDict_Items(self->extra->attrib); in _elementtree_Element_items_impl()
1579 if (!self->extra || !self->extra->attrib) in _elementtree_Element_keys_impl()
1582 return PyDict_Keys(self->extra->attrib); in _elementtree_Element_keys_impl()
1588 if (!self->extra) in element_length()
1591 return self->extra->length; in element_length()
1639 if (!self->extra) { in _elementtree_Element_remove_impl()
1648 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element_remove_impl()
1649 if (self->extra->children[i] == subelement) in _elementtree_Element_remove_impl()
1651 rc = PyObject_RichCompareBool(self->extra->children[i], subelement, Py_EQ); in _elementtree_Element_remove_impl()
1658 if (i >= self->extra->length) { in _elementtree_Element_remove_impl()
1667 found = self->extra->children[i]; in _elementtree_Element_remove_impl()
1669 self->extra->length--; in _elementtree_Element_remove_impl()
1670 for (; i < self->extra->length; i++) in _elementtree_Element_remove_impl()
1671 self->extra->children[i] = self->extra->children[i+1]; in _elementtree_Element_remove_impl()
1715 if (!self->extra) { in _elementtree_Element_set_impl()
1737 if (!self->extra || index < 0 || index >= self->extra->length) { in element_setitem()
1744 old = self->extra->children[index]; in element_setitem()
1753 self->extra->children[index] = Py_NewRef(item); in element_setitem()
1755 self->extra->length--; in element_setitem()
1756 for (i = index; i < self->extra->length; i++) in element_setitem()
1757 self->extra->children[i] = self->extra->children[i+1]; in element_setitem()
1776 if (i < 0 && self->extra) in element_subscr()
1777 i += self->extra->length; in element_subscr()
1785 if (!self->extra) in element_subscr()
1791 slicelen = PySlice_AdjustIndices(self->extra->length, &start, &stop, in element_subscr()
1803 PyObject* item = Py_NewRef(self->extra->children[cur]); in element_subscr()
1828 if (i < 0 && self->extra) in element_ass_subscr()
1829 i += self->extra->length; in element_ass_subscr()
1839 if (!self->extra) { in element_ass_subscr()
1847 slicelen = PySlice_AdjustIndices(self->extra->length, &start, &stop, in element_ass_subscr()
1888 if (cur + step >= (size_t)self->extra->length) { in element_ass_subscr()
1889 num_moved = self->extra->length - cur - 1; in element_ass_subscr()
1892 PyList_SET_ITEM(recycle, i, self->extra->children[cur]); in element_ass_subscr()
1895 self->extra->children + cur - i, in element_ass_subscr()
1896 self->extra->children + cur + 1, in element_ass_subscr()
1902 if (cur < (size_t)self->extra->length) { in element_ass_subscr()
1904 self->extra->children + cur - slicelen, in element_ass_subscr()
1905 self->extra->children + cur, in element_ass_subscr()
1906 (self->extra->length - cur) * sizeof(PyObject *)); in element_ass_subscr()
1909 self->extra->length -= slicelen; in element_ass_subscr()
1964 PyList_SET_ITEM(recycle, i, self->extra->children[cur]); in element_ass_subscr()
1969 for (i = stop; i < self->extra->length; i++) in element_ass_subscr()
1970 self->extra->children[i + newlen - slicelen] = self->extra->children[i]; in element_ass_subscr()
1973 for (i = self->extra->length-1; i >= stop; i--) in element_ass_subscr()
1974 self->extra->children[i + newlen - slicelen] = self->extra->children[i]; in element_ass_subscr()
1981 self->extra->children[cur] = Py_NewRef(element); in element_ass_subscr()
1984 self->extra->length += newlen - slicelen; in element_ass_subscr()
2025 if (!self->extra) { in element_attrib_getter()
2076 if (!self->extra) { in element_attrib_setter()
2080 Py_XSETREF(self->extra->attrib, Py_NewRef(value)); in element_attrib_setter()
2202 ElementObjectExtra *extra; in elementiter_next() local
2204 extra = elem->extra; in elementiter_next()
2205 if (!extra || child_index >= extra->length) { in elementiter_next()
2207 /* Note that extra condition on it->parent_stack_used here; in elementiter_next()
2222 assert(Element_Check(st, extra->children[child_index])); in elementiter_next()
2224 elem = (ElementObject *)Py_NewRef(extra->children[child_index]); in elementiter_next()