PyObject *BPy_Wrap_GetValues(ID *id, IDProperty *prop) { PyObject *list = PyList_New(prop->len); IDProperty *loop; int i; for (i = 0, loop = prop->data.group.first; loop; loop = loop->next, i++) { PyList_SET_ITEM(list, i, BPy_IDGroup_WrapData(id, loop, prop)); } if (i != prop->len) { BPy_IDGroup_CorrectListLen(prop, list, i, __func__); Py_DECREF(list); /*free the list*/ /*call self again*/ return BPy_Wrap_GetValues(id, prop); } return list; }
PyObject *BPy_Wrap_GetKeys(IDProperty *prop) { PyObject *seq = PyList_New(prop->len); IDProperty *loop; int i; for (i=0, loop=prop->data.group.first; loop && (i < prop->len); loop=loop->next, i++) PyList_SET_ITEM(seq, i, PyUnicode_FromString(loop->name)); /* if the id prop is corrupt, count the remaining */ for (; loop; loop=loop->next, i++) {} if (i != prop->len) { /* if the loop didnt finish, we know the length is wrong */ BPy_IDGroup_CorrectListLen(prop, seq, i); Py_DECREF(seq); /*free the list*/ /*call self again*/ return BPy_Wrap_GetKeys(prop); } return seq; }
PyObject *BPy_Wrap_GetItems(ID *id, IDProperty *prop) { PyObject *seq = PyList_New(prop->len); IDProperty *loop; int i; for (i = 0, loop = prop->data.group.first; loop; loop = loop->next, i++) { PyObject *item = PyTuple_New(2); PyTuple_SET_ITEM(item, 0, PyUnicode_FromString(loop->name)); PyTuple_SET_ITEM(item, 1, BPy_IDGroup_WrapData(id, loop, prop)); PyList_SET_ITEM(seq, i, item); } if (i != prop->len) { BPy_IDGroup_CorrectListLen(prop, seq, i, __func__); Py_DECREF(seq); /*free the list*/ /*call self again*/ return BPy_Wrap_GetItems(id, prop); } return seq; }