Lines Matching full:extra
23 /* An element can hold this many children without extra memory
201 ElementObjectExtra* extra; member
218 self->extra = PyObject_Malloc(sizeof(ElementObjectExtra)); in create_extra()
219 if (!self->extra) { in create_extra()
225 self->extra->attrib = attrib; in create_extra()
227 self->extra->length = 0; in create_extra()
228 self->extra->allocated = STATIC_CHILDREN; in create_extra()
229 self->extra->children = self->extra->_children; in create_extra()
235 dealloc_extra(ElementObjectExtra *extra) in dealloc_extra() argument
239 if (!extra) in dealloc_extra()
242 Py_XDECREF(extra->attrib); in dealloc_extra()
244 for (i = 0; i < extra->length; i++) in dealloc_extra()
245 Py_DECREF(extra->children[i]); in dealloc_extra()
247 if (extra->children != extra->_children) in dealloc_extra()
248 PyObject_Free(extra->children); in dealloc_extra()
250 PyObject_Free(extra); in dealloc_extra()
258 if (!self->extra) in clear_extra()
263 myextra = self->extra; in clear_extra()
264 self->extra = NULL; in clear_extra()
280 self->extra = NULL; in create_new_element()
319 e->extra = NULL; in element_new()
433 element_resize(ElementObject* self, Py_ssize_t extra) in element_resize() argument
438 assert(extra >= 0); in element_resize()
439 /* make sure self->children can hold the given number of extra in element_resize()
442 if (!self->extra) { in element_resize()
447 size = self->extra->length + extra; /* never overflows */ in element_resize()
449 if (size > self->extra->allocated) { in element_resize()
460 if (self->extra->children != self->extra->_children) { in element_resize()
465 children = PyObject_Realloc(self->extra->children, in element_resize()
474 memcpy(children, self->extra->children, in element_resize()
475 self->extra->length * sizeof(PyObject*)); in element_resize()
477 self->extra->children = children; in element_resize()
478 self->extra->allocated = size; in element_resize()
510 self->extra->children[self->extra->length] = element; in element_add_subelement()
512 self->extra->length++; in element_add_subelement()
521 /* note: this function assumes that the extra section exists */ in element_get_attrib()
523 PyObject* res = self->extra->attrib; in element_get_attrib()
527 res = self->extra->attrib = PyDict_New(); in element_get_attrib()
629 if (self->extra) { in element_gc_traverse()
631 Py_VISIT(self->extra->attrib); in element_gc_traverse()
633 for (i = 0; i < self->extra->length; ++i) in element_gc_traverse()
634 Py_VISIT(self->extra->children[i]); in element_gc_traverse()
646 /* After dropping all references from extra, it's no longer valid anyway, in element_gc_clear()
663 /* element_gc_clear clears all references and deallocates extra in element_dealloc()
724 self->tag, self->extra ? self->extra->attrib : NULL); in _elementtree_Element___copy___impl()
734 assert(!element->extra || !element->extra->length); in _elementtree_Element___copy___impl()
735 if (self->extra) { in _elementtree_Element___copy___impl()
736 if (element_resize(element, self->extra->length) < 0) { in _elementtree_Element___copy___impl()
741 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element___copy___impl()
742 Py_INCREF(self->extra->children[i]); in _elementtree_Element___copy___impl()
743 element->extra->children[i] = self->extra->children[i]; in _elementtree_Element___copy___impl()
746 assert(!element->extra->length); in _elementtree_Element___copy___impl()
747 element->extra->length = self->extra->length; in _elementtree_Element___copy___impl()
780 if (self->extra && self->extra->attrib) { in _elementtree_Element___deepcopy___impl()
781 attrib = deepcopy(self->extra->attrib, memo); in _elementtree_Element___deepcopy___impl()
808 assert(!element->extra || !element->extra->length); in _elementtree_Element___deepcopy___impl()
809 if (self->extra) { in _elementtree_Element___deepcopy___impl()
810 if (element_resize(element, self->extra->length) < 0) in _elementtree_Element___deepcopy___impl()
813 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element___deepcopy___impl()
814 PyObject* child = deepcopy(self->extra->children[i], memo); in _elementtree_Element___deepcopy___impl()
820 element->extra->length = i; in _elementtree_Element___deepcopy___impl()
823 element->extra->children[i] = child; in _elementtree_Element___deepcopy___impl()
826 assert(!element->extra->length); in _elementtree_Element___deepcopy___impl()
827 element->extra->length = self->extra->length; in _elementtree_Element___deepcopy___impl()
907 if (self->extra) { in _elementtree_Element___sizeof___impl()
909 if (self->extra->children != self->extra->_children) in _elementtree_Element___sizeof___impl()
910 result += sizeof(PyObject*) * self->extra->allocated; in _elementtree_Element___sizeof___impl()
941 children = PyList_New(self->extra ? self->extra->length : 0); in _elementtree_Element___getstate___impl()
945 PyObject *child = self->extra->children[i]; in _elementtree_Element___getstate___impl()
950 if (self->extra && self->extra->attrib) { in _elementtree_Element___getstate___impl()
951 attrib = self->extra->attrib; in _elementtree_Element___getstate___impl()
1010 /* (Re-)allocate 'extra'. in element_setstate_from_attributes()
1013 oldextra = self->extra; in element_setstate_from_attributes()
1014 self->extra = NULL; in element_setstate_from_attributes()
1016 assert(!self->extra || !self->extra->length); in element_setstate_from_attributes()
1018 self->extra = oldextra; in element_setstate_from_attributes()
1021 assert(self->extra); in element_setstate_from_attributes()
1022 assert(self->extra->allocated >= nchildren); in element_setstate_from_attributes()
1024 assert(self->extra->attrib == NULL); in element_setstate_from_attributes()
1025 self->extra->attrib = oldextra->attrib; in element_setstate_from_attributes()
1034 self->extra->length = i; in element_setstate_from_attributes()
1039 self->extra->children[i] = child; in element_setstate_from_attributes()
1042 assert(!self->extra->length); in element_setstate_from_attributes()
1043 self->extra->length = nchildren; in element_setstate_from_attributes()
1053 Py_XSETREF(self->extra->attrib, attrib); in element_setstate_from_attributes()
1228 if (!self->extra) in _elementtree_Element_find_impl()
1231 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element_find_impl()
1232 PyObject* item = self->extra->children[i]; in _elementtree_Element_find_impl()
1272 if (!self->extra) { in _elementtree_Element_findtext_impl()
1277 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element_findtext_impl()
1278 PyObject *item = self->extra->children[i]; in _elementtree_Element_findtext_impl()
1330 if (!self->extra) in _elementtree_Element_findall_impl()
1333 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element_findall_impl()
1334 PyObject* item = self->extra->children[i]; in _elementtree_Element_findall_impl()
1384 if (self->extra && self->extra->attrib) { in _elementtree_Element_get_impl()
1385 PyObject *attrib = self->extra->attrib; in _elementtree_Element_get_impl()
1447 if (!self->extra || index < 0 || index >= self->extra->length) { in element_getitem()
1455 Py_INCREF(self->extra->children[index]); in element_getitem()
1456 return self->extra->children[index]; in element_getitem()
1475 if (!self->extra) { in _elementtree_Element_insert_impl()
1481 index += self->extra->length; in _elementtree_Element_insert_impl()
1485 if (index > self->extra->length) in _elementtree_Element_insert_impl()
1486 index = self->extra->length; in _elementtree_Element_insert_impl()
1491 for (i = self->extra->length; i > index; i--) in _elementtree_Element_insert_impl()
1492 self->extra->children[i] = self->extra->children[i-1]; in _elementtree_Element_insert_impl()
1495 self->extra->children[index] = subelement; in _elementtree_Element_insert_impl()
1497 self->extra->length++; in _elementtree_Element_insert_impl()
1511 if (!self->extra || !self->extra->attrib) in _elementtree_Element_items_impl()
1514 return PyDict_Items(self->extra->attrib); in _elementtree_Element_items_impl()
1526 if (!self->extra || !self->extra->attrib) in _elementtree_Element_keys_impl()
1529 return PyDict_Keys(self->extra->attrib); in _elementtree_Element_keys_impl()
1535 if (!self->extra) in element_length()
1538 return self->extra->length; in element_length()
1584 if (!self->extra) { in _elementtree_Element_remove_impl()
1593 for (i = 0; i < self->extra->length; i++) { in _elementtree_Element_remove_impl()
1594 if (self->extra->children[i] == subelement) in _elementtree_Element_remove_impl()
1596 rc = PyObject_RichCompareBool(self->extra->children[i], subelement, Py_EQ); in _elementtree_Element_remove_impl()
1603 if (i >= self->extra->length) { in _elementtree_Element_remove_impl()
1612 found = self->extra->children[i]; in _elementtree_Element_remove_impl()
1614 self->extra->length--; in _elementtree_Element_remove_impl()
1615 for (; i < self->extra->length; i++) in _elementtree_Element_remove_impl()
1616 self->extra->children[i] = self->extra->children[i+1]; in _elementtree_Element_remove_impl()
1660 if (!self->extra) { in _elementtree_Element_set_impl()
1682 if (!self->extra || index < 0 || index >= self->extra->length) { in element_setitem()
1689 old = self->extra->children[index]; in element_setitem()
1697 self->extra->children[index] = item; in element_setitem()
1699 self->extra->length--; in element_setitem()
1700 for (i = index; i < self->extra->length; i++) in element_setitem()
1701 self->extra->children[i] = self->extra->children[i+1]; in element_setitem()
1720 if (i < 0 && self->extra) in element_subscr()
1721 i += self->extra->length; in element_subscr()
1729 if (!self->extra) in element_subscr()
1735 slicelen = PySlice_AdjustIndices(self->extra->length, &start, &stop, in element_subscr()
1747 PyObject* item = self->extra->children[cur]; in element_subscr()
1773 if (i < 0 && self->extra) in element_ass_subscr()
1774 i += self->extra->length; in element_ass_subscr()
1784 if (!self->extra) { in element_ass_subscr()
1792 slicelen = PySlice_AdjustIndices(self->extra->length, &start, &stop, in element_ass_subscr()
1833 if (cur + step >= (size_t)self->extra->length) { in element_ass_subscr()
1834 num_moved = self->extra->length - cur - 1; in element_ass_subscr()
1837 PyList_SET_ITEM(recycle, i, self->extra->children[cur]); in element_ass_subscr()
1840 self->extra->children + cur - i, in element_ass_subscr()
1841 self->extra->children + cur + 1, in element_ass_subscr()
1847 if (cur < (size_t)self->extra->length) { in element_ass_subscr()
1849 self->extra->children + cur - slicelen, in element_ass_subscr()
1850 self->extra->children + cur, in element_ass_subscr()
1851 (self->extra->length - cur) * sizeof(PyObject *)); in element_ass_subscr()
1854 self->extra->length -= slicelen; in element_ass_subscr()
1911 PyList_SET_ITEM(recycle, i, self->extra->children[cur]); in element_ass_subscr()
1916 for (i = stop; i < self->extra->length; i++) in element_ass_subscr()
1917 self->extra->children[i + newlen - slicelen] = self->extra->children[i]; in element_ass_subscr()
1920 for (i = self->extra->length-1; i >= stop; i--) in element_ass_subscr()
1921 self->extra->children[i + newlen - slicelen] = self->extra->children[i]; in element_ass_subscr()
1929 self->extra->children[cur] = element; in element_ass_subscr()
1932 self->extra->length += newlen - slicelen; in element_ass_subscr()
1976 if (!self->extra) { in element_attrib_getter()
2031 if (!self->extra) { in element_attrib_setter()
2036 Py_XSETREF(self->extra->attrib, value); in element_attrib_setter()
2166 ElementObjectExtra *extra; in elementiter_next() local
2168 extra = elem->extra; in elementiter_next()
2169 if (!extra || child_index >= extra->length) { in elementiter_next()
2171 /* Note that extra condition on it->parent_stack_used here; in elementiter_next()
2183 assert(Element_Check(extra->children[child_index])); in elementiter_next()
2184 elem = (ElementObject *)extra->children[child_index]; in elementiter_next()