Changeset View
Changeset View
Standalone View
Standalone View
source/blender/python/generic/idprop_py_api.c
| Show First 20 Lines • Show All 903 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| static int BPy_IDGroup_Iter_clear(BPy_IDGroup_Iter *self) | static int BPy_IDGroup_Iter_clear(BPy_IDGroup_Iter *self) | ||||
| { | { | ||||
| Py_CLEAR(self->group); | Py_CLEAR(self->group); | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| static int BPy_IDGroup_Iter_is_gc(BPy_IDGroup_Iter *self) | |||||
| { | |||||
| return (self->group != NULL); | |||||
| } | |||||
| static bool BPy_Group_Iter_same_size_or_raise_error(BPy_IDGroup_Iter *self) | static bool BPy_Group_Iter_same_size_or_raise_error(BPy_IDGroup_Iter *self) | ||||
| { | { | ||||
| if (self->len_init == self->group->prop->len) { | if (self->len_init == self->group->prop->len) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| PyErr_SetString(PyExc_RuntimeError, "IDPropertyGroup changed size during iteration"); | PyErr_SetString(PyExc_RuntimeError, "IDPropertyGroup changed size during iteration"); | ||||
| return false; | return false; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 75 Lines • ▼ Show 20 Lines | #define SHARED_MEMBER_SET(member, value) \ | ||||
| /* Shared members. */ | /* Shared members. */ | ||||
| SHARED_MEMBER_SET(tp_basicsize, sizeof(BPy_IDGroup_Iter)); | SHARED_MEMBER_SET(tp_basicsize, sizeof(BPy_IDGroup_Iter)); | ||||
| SHARED_MEMBER_SET(tp_dealloc, (destructor)BPy_IDGroup_Iter_dealloc); | SHARED_MEMBER_SET(tp_dealloc, (destructor)BPy_IDGroup_Iter_dealloc); | ||||
| SHARED_MEMBER_SET(tp_repr, (reprfunc)BPy_IDGroup_Iter_repr); | SHARED_MEMBER_SET(tp_repr, (reprfunc)BPy_IDGroup_Iter_repr); | ||||
| SHARED_MEMBER_SET(tp_flags, Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC); | SHARED_MEMBER_SET(tp_flags, Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC); | ||||
| SHARED_MEMBER_SET(tp_traverse, (traverseproc)BPy_IDGroup_Iter_traverse); | SHARED_MEMBER_SET(tp_traverse, (traverseproc)BPy_IDGroup_Iter_traverse); | ||||
| SHARED_MEMBER_SET(tp_clear, (inquiry)BPy_IDGroup_Iter_clear); | SHARED_MEMBER_SET(tp_clear, (inquiry)BPy_IDGroup_Iter_clear); | ||||
| SHARED_MEMBER_SET(tp_is_gc, (inquiry)BPy_IDGroup_Iter_is_gc); | |||||
| SHARED_MEMBER_SET(tp_iter, PyObject_SelfIter); | SHARED_MEMBER_SET(tp_iter, PyObject_SelfIter); | ||||
| #undef SHARED_MEMBER_SET | #undef SHARED_MEMBER_SET | ||||
| } | } | ||||
| static PyObject *IDGroup_Iter_New_WithType(BPy_IDProperty *group, | static PyObject *IDGroup_Iter_New_WithType(BPy_IDProperty *group, | ||||
| const bool reversed, | const bool reversed, | ||||
| PyTypeObject *type) | PyTypeObject *type) | ||||
| { | { | ||||
| BLI_assert(group ? group->prop->type == IDP_GROUP : true); | BLI_assert(group ? group->prop->type == IDP_GROUP : true); | ||||
| BPy_IDGroup_Iter *iter = PyObject_GC_New(BPy_IDGroup_Iter, type); | BPy_IDGroup_Iter *iter = PyObject_GC_New(BPy_IDGroup_Iter, type); | ||||
| iter->reversed = reversed; | iter->reversed = reversed; | ||||
| iter->group = group; | iter->group = group; | ||||
| if (group != NULL) { | if (group != NULL) { | ||||
| Py_INCREF(group); | Py_INCREF(group); | ||||
| BLI_assert(!PyObject_GC_IsTracked((PyObject *)iter)); | |||||
| PyObject_GC_Track(iter); | PyObject_GC_Track(iter); | ||||
| iter->cur = (reversed ? group->prop->data.group.last : group->prop->data.group.first); | iter->cur = (reversed ? group->prop->data.group.last : group->prop->data.group.first); | ||||
| iter->len_init = group->prop->len; | iter->len_init = group->prop->len; | ||||
| } | } | ||||
| else { | else { | ||||
| iter->cur = NULL; | iter->cur = NULL; | ||||
| iter->len_init = 0; | iter->len_init = 0; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| static int BPy_IDGroup_View_clear(BPy_IDGroup_View *self) | static int BPy_IDGroup_View_clear(BPy_IDGroup_View *self) | ||||
| { | { | ||||
| Py_CLEAR(self->group); | Py_CLEAR(self->group); | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| static int BPy_IDGroup_View_is_gc(BPy_IDGroup_View *self) | |||||
| { | |||||
| return (self->group != NULL); | |||||
| } | |||||
| /* View Specific API's (Key/Value/Items). */ | /* View Specific API's (Key/Value/Items). */ | ||||
| static PyObject *BPy_Group_ViewKeys_iter(BPy_IDGroup_View *self) | static PyObject *BPy_Group_ViewKeys_iter(BPy_IDGroup_View *self) | ||||
| { | { | ||||
| return BPy_IDGroup_IterKeys_CreatePyObject(self->group, self->reversed); | return BPy_IDGroup_IterKeys_CreatePyObject(self->group, self->reversed); | ||||
| } | } | ||||
| static PyObject *BPy_Group_ViewValues_iter(BPy_IDGroup_View *self) | static PyObject *BPy_Group_ViewValues_iter(BPy_IDGroup_View *self) | ||||
| ▲ Show 20 Lines • Show All 131 Lines • ▼ Show 20 Lines | #define SHARED_MEMBER_SET(member, value) \ | ||||
| ((void)0) | ((void)0) | ||||
| SHARED_MEMBER_SET(tp_basicsize, sizeof(BPy_IDGroup_View)); | SHARED_MEMBER_SET(tp_basicsize, sizeof(BPy_IDGroup_View)); | ||||
| SHARED_MEMBER_SET(tp_dealloc, (destructor)BPy_IDGroup_View_dealloc); | SHARED_MEMBER_SET(tp_dealloc, (destructor)BPy_IDGroup_View_dealloc); | ||||
| SHARED_MEMBER_SET(tp_repr, (reprfunc)BPy_IDGroup_View_repr); | SHARED_MEMBER_SET(tp_repr, (reprfunc)BPy_IDGroup_View_repr); | ||||
| SHARED_MEMBER_SET(tp_flags, Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC); | SHARED_MEMBER_SET(tp_flags, Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC); | ||||
| SHARED_MEMBER_SET(tp_traverse, (traverseproc)BPy_IDGroup_View_traverse); | SHARED_MEMBER_SET(tp_traverse, (traverseproc)BPy_IDGroup_View_traverse); | ||||
| SHARED_MEMBER_SET(tp_clear, (inquiry)BPy_IDGroup_View_clear); | SHARED_MEMBER_SET(tp_clear, (inquiry)BPy_IDGroup_View_clear); | ||||
| SHARED_MEMBER_SET(tp_is_gc, (inquiry)BPy_IDGroup_View_is_gc); | |||||
| SHARED_MEMBER_SET(tp_methods, BPy_IDGroup_View_methods); | SHARED_MEMBER_SET(tp_methods, BPy_IDGroup_View_methods); | ||||
| #undef SHARED_MEMBER_SET | #undef SHARED_MEMBER_SET | ||||
| } | } | ||||
| /** \} */ | /** \} */ | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| ▲ Show 20 Lines • Show All 838 Lines • ▼ Show 20 Lines | |||||
| static BPy_IDGroup_View *IDGroup_View_New_WithType(BPy_IDProperty *group, PyTypeObject *type) | static BPy_IDGroup_View *IDGroup_View_New_WithType(BPy_IDProperty *group, PyTypeObject *type) | ||||
| { | { | ||||
| BLI_assert(group ? group->prop->type == IDP_GROUP : true); | BLI_assert(group ? group->prop->type == IDP_GROUP : true); | ||||
| BPy_IDGroup_View *iter = PyObject_GC_New(BPy_IDGroup_View, type); | BPy_IDGroup_View *iter = PyObject_GC_New(BPy_IDGroup_View, type); | ||||
| iter->reversed = false; | iter->reversed = false; | ||||
| iter->group = group; | iter->group = group; | ||||
| if (group != NULL) { | if (group != NULL) { | ||||
| Py_INCREF(group); | Py_INCREF(group); | ||||
| BLI_assert(!PyObject_GC_IsTracked((PyObject *)iter)); | |||||
| PyObject_GC_Track(iter); | PyObject_GC_Track(iter); | ||||
| } | } | ||||
| return iter; | return iter; | ||||
| } | } | ||||
| static PyObject *BPy_IDGroup_ViewKeys_CreatePyObject(BPy_IDProperty *group) | static PyObject *BPy_IDGroup_ViewKeys_CreatePyObject(BPy_IDProperty *group) | ||||
| { | { | ||||
| return (PyObject *)IDGroup_View_New_WithType(group, &BPy_IDGroup_ViewKeys_Type); | return (PyObject *)IDGroup_View_New_WithType(group, &BPy_IDGroup_ViewKeys_Type); | ||||
| ▲ Show 20 Lines • Show All 95 Lines • Show Last 20 Lines | |||||