20 #define USE_STRING_COERCE
22 #ifdef USE_STRING_COERCE
53 return PyBytes_FromStringAndSize(
IDP_String(prop), prop->
len);
56 #ifdef USE_STRING_COERCE
59 return PyUnicode_FromStringAndSize(
IDP_String(prop), prop->
len - 1);
65 return PyLong_FromLong((
long)
IDP_Int(prop));
70 return PyFloat_FromDouble((
double)
IDP_Float(prop));
84 return (PyObject *)group;
97 return (PyObject *)
array;
102 PyObject *seq = PyList_New(prop->
len);
108 PyExc_RuntimeError,
"%s: IDP_IDPARRAY: PyList_New(%d) failed", __func__, prop->
len);
112 for (i = 0; i < prop->
len; i++) {
121 PyList_SET_ITEM(seq, i,
wrap);
136 return _Py_HashPointer(
self->prop);
141 return PyUnicode_FromFormat(
"<bpy id prop: owner=\"%s\", name=\"%s\", address=%p>",
142 self->owner_id ?
self->owner_id->name :
"<NONE>",
149 switch (prop->
type) {
175 switch (prop->
type) {
178 if (!PyUnicode_Check(value)) {
179 PyErr_SetString(PyExc_TypeError,
"expected a string!");
183 # ifdef USE_STRING_COERCE
186 PyObject *value_coerce =
NULL;
189 alloc_len = strlen(
st) + 1;
191 st = PyUnicode_AsUTF8(value);
194 Py_XDECREF(value_coerce);
197 st = PyUnicode_AsUTF8(value);
206 int ivalue = PyLong_AsSsize_t(value);
207 if (ivalue == -1 && PyErr_Occurred()) {
208 PyErr_SetString(PyExc_TypeError,
"expected an int type");
215 float fvalue = (
float)PyFloat_AsDouble(value);
216 if (fvalue == -1 && PyErr_Occurred()) {
217 PyErr_SetString(PyExc_TypeError,
"expected a float");
224 double dvalue = PyFloat_AsDouble(value);
225 if (dvalue == -1 && PyErr_Occurred()) {
226 PyErr_SetString(PyExc_TypeError,
"expected a float");
233 PyErr_SetString(PyExc_AttributeError,
"attempt to set read-only attribute!");
242 return PyUnicode_FromString(
self->prop->name);
248 Py_ssize_t name_size;
250 if (!PyUnicode_Check(value)) {
251 PyErr_SetString(PyExc_TypeError,
"expected a string!");
255 name = PyUnicode_AsUTF8AndSize(value, &name_size);
258 PyErr_SetString(PyExc_TypeError,
"string length cannot exceed 63 characters!");
262 memcpy(
self->prop->name, name, name_size + 1);
269 return PyLong_FromLong(
self->prop->type);
277 "The name of this Group.",
285 PyErr_SetString(PyExc_TypeError,
"len() of unsized object");
289 return self->prop->len;
298 PyErr_SetString(PyExc_TypeError,
"unsubscriptable object");
302 name = PyUnicode_AsUTF8(item);
305 PyErr_SetString(PyExc_TypeError,
"only strings are allowed as keys of ID properties");
311 if (idprop ==
NULL) {
312 PyErr_SetString(PyExc_KeyError,
"key not in subgroup dict");
322 PyObject **seq_fast_items = PySequence_Fast_ITEMS(seq_fast);
326 Py_ssize_t i,
len = PySequence_Fast_GET_SIZE(seq_fast);
328 for (i = 0; i <
len; i++) {
329 item = seq_fast_items[i];
330 if (PyFloat_Check(item)) {
336 else if (PyLong_Check(item)) {
341 else if (PyMapping_Check(item)) {
357 const char *name =
NULL;
359 Py_ssize_t name_size;
360 name = PyUnicode_AsUTF8AndSize(name_obj, &name_size);
363 PyErr_Format(PyExc_KeyError,
364 "invalid id-property key, expected a string, not a %.200s",
365 Py_TYPE(name_obj)->tp_name);
370 PyErr_SetString(PyExc_KeyError,
371 "the length of IDProperty names is limited to 63 characters");
395 val.
d = PyFloat_AsDouble(ob);
402 val.
i = PyC_Long_AsI32(ob);
403 if (val.
i == -1 && PyErr_Occurred()) {
413 #ifdef USE_STRING_COERCE
414 Py_ssize_t value_size;
415 PyObject *value_coerce =
NULL;
420 Py_XDECREF(value_coerce);
422 val.
str = PyUnicode_AsUTF8(ob);
496 PyObject **ob_seq_fast_items;
500 ob_seq_fast_items = PySequence_Fast_ITEMS(ob);
503 PyErr_SetString(PyExc_TypeError,
504 "only floats, ints and dicts are allowed in ID property arrays");
512 val.
array.
len = PySequence_Fast_GET_SIZE(ob);
519 for (i = 0; i < val.
array.
len; i++) {
520 item = ob_seq_fast_items[i];
521 if (((prop_data[i] = PyFloat_AsDouble(item)) == -1.0) && PyErr_Occurred()) {
532 for (i = 0; i < val.
array.
len; i++) {
533 item = ob_seq_fast_items[i];
534 if (((prop_data[i] = PyC_Long_AsI32(item)) == -1) && PyErr_Occurred()) {
543 for (i = 0; i < val.
array.
len; i++) {
544 item = ob_seq_fast_items[i];
554 PyErr_SetString(PyExc_RuntimeError,
"internal error with idp array.type");
563 bool use_buffer =
false;
565 if (PyObject_CheckBuffer(ob)) {
566 PyObject_GetBuffer(ob, &
buffer, PyBUF_SIMPLE | PyBUF_FORMAT);
573 PyBuffer_Release(&
buffer);
579 PyBuffer_Release(&
buffer);
583 PyObject *ob_seq_fast = PySequence_Fast(ob,
"py -> idprop");
584 if (ob_seq_fast !=
NULL) {
586 Py_DECREF(ob_seq_fast);
598 PyObject *keys, *vals, *key, *pval;
601 keys = PyMapping_Keys(ob);
602 vals = PyMapping_Values(ob);
607 len = PyMapping_Length(ob);
608 for (i = 0; i <
len; i++) {
609 key = PySequence_GetItem(keys, i);
610 pval = PySequence_GetItem(vals, i);
642 if (PyFloat_Check(ob)) {
645 if (PyLong_Check(ob)) {
648 if (PyUnicode_Check(ob)) {
651 if (PyBytes_Check(ob)) {
654 if (PySequence_Check(ob)) {
660 if (PyMapping_Check(ob)) {
665 PyExc_TypeError,
"invalid id-property type %.200s not supported", Py_TYPE(ob)->tp_name);
693 if ((prop_exist !=
NULL) && (prop_exist->
type == prop->
type) &&
719 PyErr_SetString(PyExc_TypeError,
"unsubscriptable object");
725 const char *name = PyUnicode_AsUTF8(key);
728 PyErr_Format(PyExc_KeyError,
"expected a string, not %.200s", Py_TYPE(key)->tp_name);
738 PyErr_SetString(PyExc_KeyError,
"property not found in group");
762 ret = PyObject_GetIter(iterable);
773 switch (prop->
type) {
785 PyObject *seq = PyList_New(prop->
len);
790 PyExc_RuntimeError,
"%s: IDP_ARRAY: PyList_New(%d) failed", __func__, prop->
len);
797 for (i = 0; i < prop->
len; i++) {
798 PyList_SET_ITEM(seq, i, PyFloat_FromDouble(
array[i]));
804 for (i = 0; i < prop->
len; i++) {
805 PyList_SET_ITEM(seq, i, PyFloat_FromDouble(
array[i]));
811 for (i = 0; i < prop->
len; i++) {
812 PyList_SET_ITEM(seq, i, PyLong_FromLong(
array[i]));
818 PyExc_RuntimeError,
"%s: invalid/corrupt array type '%d'!", __func__, prop->
subtype);
826 PyObject *seq = PyList_New(prop->
len);
832 PyExc_RuntimeError,
"%s: IDP_IDPARRAY: PyList_New(%d) failed", __func__, prop->
len);
836 for (i = 0; i < prop->
len; i++) {
845 PyList_SET_ITEM(seq, i,
wrap);
850 PyObject *dict = _PyDict_NewPresized(prop->
len);
862 PyDict_SetItemString(dict, loop->
name,
wrap);
869 PyErr_Format(PyExc_RuntimeError,
870 "%s ERROR: '%s' property exists with a bad type code '%d'!",
886 return PyUnicode_FromFormat(
"<%s>", Py_TYPE(
self)->tp_name);
888 return PyUnicode_FromFormat(
"<%s \"%s\">", Py_TYPE(
self)->tp_name,
self->group->prop->name);
894 PyObject_GC_UnTrack(
self);
896 Py_CLEAR(
self->group);
897 PyObject_GC_Del(
self);
902 Py_VISIT(
self->group);
908 Py_CLEAR(
self->group);
914 if (
self->len_init ==
self->group->prop->len) {
917 PyErr_SetString(PyExc_RuntimeError,
"IDPropertyGroup changed size during iteration");
929 self->cur =
self->reversed ?
self->cur->
prev :
self->cur->
next;
930 return PyUnicode_FromString(cur->
name);
932 PyErr_SetNone(PyExc_StopIteration);
944 self->cur =
self->reversed ?
self->cur->
prev :
self->cur->
next;
947 PyErr_SetNone(PyExc_StopIteration);
959 self->cur =
self->reversed ?
self->cur->
prev :
self->cur->
next;
960 PyObject *
ret = PyTuple_New(2);
962 PyUnicode_FromString(cur->
name),
966 PyErr_SetNone(PyExc_StopIteration);
977 #define SHARED_MEMBER_SET(member, value) \
979 k_ty->member = v_ty->member = i_ty->member = value; \
988 k_ty->tp_name =
"IDPropertyGroupIterKeys";
989 v_ty->tp_name =
"IDPropertyGroupIterValues";
990 i_ty->tp_name =
"IDPropertyGroupIterItems";
1005 #undef SHARED_MEMBER_SET
1009 const bool reversed,
1015 iter->
group = group;
1016 if (group !=
NULL) {
1018 PyObject_GC_Track(iter);
1026 return (PyObject *)iter;
1063 return PyUnicode_FromFormat(
"<%s>", Py_TYPE(
self)->tp_name);
1065 return PyUnicode_FromFormat(
"<%s \"%s\">", Py_TYPE(
self)->tp_name,
self->group->prop->name);
1071 PyObject_GC_UnTrack(
self);
1073 Py_CLEAR(
self->group);
1074 PyObject_GC_Del(
self);
1079 Py_VISIT(
self->group);
1085 Py_CLEAR(
self->group);
1111 return self->group->prop->len;
1128 PyObject *list = PySequence_List((PyObject *)
self);
1129 const int result = PySequence_Contains(list, value);
1140 PyObject *list = PySequence_List((PyObject *)
self);
1141 const int result = PySequence_Contains(list, value);
1182 "Return a reverse iterator over the ID Property keys values or items.");
1187 result->reversed = !
self->reversed;
1188 return (PyObject *)
result;
1195 BPy_IDGroup_View_reversed_doc},
1211 k_ty->tp_name =
"IDPropertyGroupViewKeys";
1212 v_ty->tp_name =
"IDPropertyGroupViewValues";
1213 i_ty->tp_name =
"IDPropertyGroupViewItems";
1224 #define SHARED_MEMBER_SET(member, value) \
1226 k_ty->member = v_ty->member = i_ty->member = value; \
1238 #undef SHARED_MEMBER_SET
1248 BPy_IDGroup_pop_doc,
1249 ".. method:: pop(key, default)\n"
1251 " Remove an item from the group, returning a Python representation.\n"
1253 " :raises KeyError: When the item doesn't exist.\n"
1255 " :arg key: Name of item to remove.\n"
1256 " :type key: string\n"
1257 " :arg default: Value to return when key isn't found, otherwise raise an exception.\n"
1258 " :type default: Undefined\n");
1265 PyObject *def =
NULL;
1267 if (!PyArg_ParseTuple(args,
"s|O:get", &key, &def)) {
1272 if (idprop ==
NULL) {
1274 PyErr_SetString(PyExc_KeyError,
"item not in group");
1277 return Py_INCREF_RET(def);
1281 if (pyform ==
NULL) {
1296 printf(
"%s: ID Property Error found and corrected!\n", func);
1299 for (j =
len; j < prop->
len; j++) {
1300 PyList_SET_ITEM(seq, j, Py_INCREF_RET(Py_None));
1309 PyObject *list = PyList_New(prop->
len);
1314 PyList_SET_ITEM(list, i, PyUnicode_FromString(loop->
name));
1318 for (; loop; loop = loop->
next, i++) {
1322 if (i != prop->
len) {
1334 PyObject *list = PyList_New(prop->
len);
1342 if (i != prop->
len) {
1354 PyObject *seq = PyList_New(prop->
len);
1359 PyObject *item = PyTuple_New(2);
1362 PyList_SET_ITEM(seq, i, item);
1365 if (i != prop->
len) {
1400 ".. method:: keys()\n"
1402 " Return the keys associated with this group as a list of strings.\n");
1409 ".. method:: values()\n"
1411 " Return the values associated with this group.\n");
1418 ".. method:: items()\n"
1420 " Iterate through the items in the dict; behaves like dictionary method items.\n");
1428 const char *name = PyUnicode_AsUTF8(value);
1431 PyErr_Format(PyExc_TypeError,
"expected a string, not a %.200s", Py_TYPE(value)->tp_name);
1439 ".. method:: update(other)\n"
1441 " Update key, values.\n"
1443 " :arg other: Updates the values in the group with this.\n"
1444 " :type other: :class:`IDPropertyGroup` or dict\n");
1447 PyObject *pkey, *pval;
1459 else if (PyDict_Check(value)) {
1460 while (PyDict_Next(value, &i, &pkey, &pval)) {
1462 if (PyErr_Occurred()) {
1468 PyErr_Format(PyExc_TypeError,
1469 "expected a dict or an IDPropertyGroup type, not a %.200s",
1470 Py_TYPE(value)->tp_name);
1478 ".. method:: to_dict()\n"
1480 " Return a purely python version of the group.\n");
1487 ".. method:: clear()\n"
1489 " Clear all members from this group.\n");
1497 ".. method:: get(key, default=None)\n"
1499 " Return the value for key, if it exists, else default.\n");
1504 PyObject *def = Py_None;
1506 if (!PyArg_ParseTuple(args,
"s|O:get", &key, &def)) {
1523 {
"pop", (PyCFunction)
BPy_IDGroup_pop, METH_VARARGS, BPy_IDGroup_pop_doc},
1524 {
"keys", (PyCFunction)
BPy_IDGroup_keys, METH_NOARGS, BPy_IDGroup_keys_doc},
1528 {
"get", (PyCFunction)
BPy_IDGroup_get, METH_VARARGS, BPy_IDGroup_get_doc},
1561 PyVarObject_HEAD_INIT(
NULL, 0)
1629 switch (
self->prop->subtype) {
1631 *r_is_double =
false;
1632 return &PyFloat_Type;
1634 *r_is_double =
true;
1635 return &PyFloat_Type;
1637 *r_is_double =
false;
1638 return &PyLong_Type;
1640 *r_is_double =
false;
1647 return PyUnicode_FromFormat(
"<bpy id property array [%d]>",
self->prop->len);
1651 "The type of the data in the array {'f': float, 'd': double, 'i': int}.");
1654 switch (
self->prop->subtype) {
1656 return PyUnicode_FromString(
"f");
1658 return PyUnicode_FromString(
"d");
1660 return PyUnicode_FromString(
"i");
1664 PyExc_RuntimeError,
"%s: invalid/corrupt array type '%d'!", __func__,
self->prop->subtype);
1674 BPy_IDArray_get_typecode_doc,
1680 ".. method:: to_list()\n"
1682 " Return the array as a list.\n");
1695 return self->prop->len;
1700 if (index < 0 || index >=
self->prop->len) {
1701 PyErr_SetString(PyExc_IndexError,
"index out of range!");
1705 switch (
self->prop->subtype) {
1707 return PyFloat_FromDouble(((
float *)
IDP_Array(
self->prop))[index]);
1709 return PyFloat_FromDouble(((
double *)
IDP_Array(
self->prop))[index]);
1711 return PyLong_FromLong((
long)((
int *)
IDP_Array(
self->prop))[index]);
1715 PyExc_RuntimeError,
"%s: invalid/corrupt array type '%d'!", __func__,
self->prop->subtype);
1722 if (index < 0 || index >=
self->prop->len) {
1723 PyErr_SetString(PyExc_RuntimeError,
"index out of range!");
1727 switch (
self->prop->subtype) {
1729 const float f = (
float)PyFloat_AsDouble(value);
1730 if (f == -1 && PyErr_Occurred()) {
1737 const double d = PyFloat_AsDouble(value);
1738 if (d == -1 && PyErr_Occurred()) {
1745 const int i = PyC_Long_AsI32(value);
1746 if (i == -1 && PyErr_Occurred()) {
1780 end = prop->
len + end + 1;
1783 begin =
MIN2(begin, end);
1785 tuple = PyTuple_New(end - begin);
1791 PyTuple_SET_ITEM(tuple,
count - begin, PyFloat_FromDouble(
array[
count]));
1798 PyTuple_SET_ITEM(tuple,
count - begin, PyFloat_FromDouble(
array[
count]));
1805 PyTuple_SET_ITEM(tuple,
count - begin, PyLong_FromLong(
array[
count]));
1819 const size_t elem_size = is_double ?
sizeof(
double) :
sizeof(
float);
1826 begin =
MIN2(begin, end);
1828 size = (end - begin);
1829 alloc_len =
size * elem_size;
1834 if (
PyC_AsArray(vec, elem_size, seq,
size, py_type,
"slice assignment: ") == -1) {
1839 memcpy((
void *)(((
char *)
IDP_Array(prop)) + (begin * elem_size)), vec, alloc_len);
1847 if (PyIndex_Check(item)) {
1849 i = PyNumber_AsSsize_t(item, PyExc_IndexError);
1850 if (i == -1 && PyErr_Occurred()) {
1854 i +=
self->prop->len;
1858 if (PySlice_Check(item)) {
1859 Py_ssize_t start, stop, step, slicelength;
1861 if (PySlice_GetIndicesEx(item,
self->prop->len, &start, &stop, &step, &slicelength) < 0) {
1865 if (slicelength <= 0) {
1866 return PyTuple_New(0);
1872 PyErr_SetString(PyExc_TypeError,
"slice steps not supported with vectors");
1876 PyErr_Format(PyExc_TypeError,
1877 "vector indices must be integers, not %.200s",
1879 Py_TYPE(item)->tp_name);
1885 if (PyIndex_Check(item)) {
1886 Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
1887 if (i == -1 && PyErr_Occurred()) {
1891 i +=
self->prop->len;
1895 if (PySlice_Check(item)) {
1896 Py_ssize_t start, stop, step, slicelength;
1898 if (PySlice_GetIndicesEx(item,
self->prop->len, &start, &stop, &step, &slicelength) < 0) {
1906 PyErr_SetString(PyExc_TypeError,
"slice steps not supported with vectors");
1911 PyExc_TypeError,
"vector indices must be integers, not %.200s", Py_TYPE(item)->tp_name);
1927 return sizeof(
float);
1939 const int length = itemsize * prop->
len;
1941 if (PyBuffer_FillInfo(
view, (PyObject *)
self,
IDP_Array(prop),
length,
false, flags) == -1) {
1945 view->itemsize = itemsize;
1948 Py_ssize_t *shape =
MEM_mallocN(
sizeof(Py_ssize_t), __func__);
1949 shape[0] = prop->
len;
1950 view->shape = shape;
1972 PyVarObject_HEAD_INIT(
NULL, 0)
2087 iter->
group = group;
2088 if (group !=
NULL) {
2090 PyObject_GC_Track(iter);
2117 PyModuleDef_HEAD_INIT,
2130 PyObject *submodule;
2164 "This module provides access id property types (currently mainly for docs).");
2166 PyModuleDef_HEAD_INIT,
2180 PyObject *submodule;
2181 PyObject *sys_modules = PyImport_GetModuleDict();
2187 PyDict_SetItem(sys_modules, PyModule_GetNameObject(submodule), submodule);
typedef float(TangentPoint)[2]
#define IDP_IDPArray(prop)
void IDP_AppendArray(struct IDProperty *prop, struct IDProperty *item)
void IDP_FreePropertyContent(struct IDProperty *prop)
struct IDProperty * IDP_New(char type, const IDPropertyTemplate *val, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
struct IDProperty * IDP_NewIDPArray(const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_ReplaceInGroup_ex(struct IDProperty *group, struct IDProperty *prop, struct IDProperty *prop_exist)
void IDP_MergeGroup(struct IDProperty *dest, const struct IDProperty *src, bool do_overwrite) ATTR_NONNULL()
void IDP_FreeProperty(struct IDProperty *prop)
void IDP_ResizeArray(struct IDProperty *prop, int newlen)
struct IDProperty * IDP_GetPropertyFromGroup(const struct IDProperty *prop, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_FreeFromGroup(struct IDProperty *group, struct IDProperty *prop) ATTR_NONNULL()
void IDP_ClearProperty(struct IDProperty *prop)
typedef double(DMatrix)[4][4]
ID and Library types, which are fundamental for sdna.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position CLAMP
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SyclQueue void void size_t num_bytes void
void IDProp_Init_Types(void)
static PyMethodDef IDProp_methods[]
static int BPy_Group_ViewItems_Contains(BPy_IDGroup_View *self, PyObject *value)
static PySequenceMethods BPy_IDGroup_ViewItems_as_sequence
PyTypeObject BPy_IDGroup_ViewItems_Type
static PyGetSetDef BPy_IDGroup_getseters[]
PyDoc_STRVAR(BPy_IDGroup_View_reversed_doc, "Return a reverse iterator over the ID Property keys values or items.")
PyTypeObject BPy_IDGroup_ViewValues_Type
static struct PyModuleDef IDProp_module_def
static PyObject * BPy_IDGroup_IterItems_CreatePyObject(BPy_IDProperty *group, const bool reversed)
static int BPy_Group_ViewKeys_Contains(BPy_IDGroup_View *self, PyObject *value)
static PyObject * BPy_IDGroup_pop(BPy_IDProperty *self, PyObject *args)
static PyObject * BPy_IDGroup_View_reversed(BPy_IDGroup_View *self, PyObject *UNUSED(ignored))
static PyObject * BPy_IDArray_slice(BPy_IDArray *self, int begin, int end)
static PyObject * BPy_IDGroup_get(BPy_IDProperty *self, PyObject *args)
static PyObject * BPy_IDGroup_IterValues_CreatePyObject(BPy_IDProperty *group, const bool reversed)
static PyObject * BPy_IDGroup_keys(BPy_IDProperty *self)
static PyObject * BPyInit_idprop_types(void)
static struct PyMethodDef BPy_IDGroup_methods[]
PyTypeObject BPy_IDGroup_ViewKeys_Type
static IDProperty * idp_from_PyBytes(const char *name, PyObject *ob)
bool pyrna_id_CheckPyObject(PyObject *obj)
static void IDGroup_Iter_init_type(void)
static PyObject * BPy_IDArray_GetItem(BPy_IDArray *self, int index)
static PyObject * BPy_IDGroup_IterKeys_CreatePyObject(BPy_IDProperty *group, const bool reversed)
static PyMethodDef BPy_IDGroup_View_methods[]
static PyObject * BPy_Group_IterItems_next(BPy_IDGroup_Iter *self)
static PyGetSetDef BPy_IDArray_getseters[]
static PyObject * BPy_IDGroup_values(BPy_IDProperty *self)
static PyObject * BPy_IDGroup_View_repr(BPy_IDGroup_View *self)
int BPy_Wrap_SetMapItem(IDProperty *prop, PyObject *key, PyObject *val)
static PyObject * IDGroup_Iter_New_WithType(BPy_IDProperty *group, const bool reversed, PyTypeObject *type)
static void BPy_IDGroup_Iter_dealloc(BPy_IDGroup_Iter *self)
PyObject * BPy_IDGroup_MapDataToPy(IDProperty *prop)
static int BPy_IDGroup_View_traverse(BPy_IDGroup_View *self, visitproc visit, void *arg)
static IDProperty * idp_from_PyLong(const char *name, PyObject *ob)
static PyObject * BPy_Group_IterValues_next(BPy_IDGroup_Iter *self)
static PyObject * BPy_Group_ViewValues_iter(BPy_IDGroup_View *self)
static PyMethodDef BPy_IDArray_methods[]
static Py_ssize_t BPy_Group_View_len(BPy_IDGroup_View *self)
static IDProperty * idp_from_PyFloat(const char *name, PyObject *ob)
static PyObject * BPy_IDGroup_GetName(BPy_IDProperty *self, void *UNUSED(closure))
static int BPy_IDArray_ass_subscript(BPy_IDArray *self, PyObject *item, PyObject *value)
static const char * idp_format_from_array_type(int type)
static BPy_IDGroup_View * IDGroup_View_New_WithType(BPy_IDProperty *group, PyTypeObject *type)
static PyObject * BPy_IDArray_repr(BPy_IDArray *self)
PyObject * BPy_Wrap_GetItems(ID *id, IDProperty *prop)
PyTypeObject BPy_IDGroup_IterKeys_Type
static PyObject * BPy_IDArray_subscript(BPy_IDArray *self, PyObject *item)
static PyTypeObject * idp_array_py_type(BPy_IDArray *self, bool *r_is_double)
static PyObject * BPy_IDArray_to_list(BPy_IDArray *self)
PyObject * BPy_Wrap_GetKeys_View_WithID(ID *id, IDProperty *prop)
static PyObject * BPy_IDGroup_repr(BPy_IDProperty *self)
static int itemsize_by_idarray_type(int array_type)
static PyObject * idprop_py_from_idp_double(const IDProperty *prop)
static PyObject * BPy_Group_ViewItems_iter(BPy_IDGroup_View *self)
static const char * idp_try_read_name(PyObject *name_obj)
static PyObject * BPy_IDGroup_clear(BPy_IDProperty *self)
static void BPy_IDArray_releasebuffer(BPy_IDArray *UNUSED(self), Py_buffer *view)
static PySequenceMethods BPy_IDGroup_ViewValues_as_sequence
PyTypeObject BPy_IDGroup_Type
bool BPy_IDProperty_Map_ValidateAndCreate(PyObject *name_obj, IDProperty *group, PyObject *ob)
PyTypeObject BPy_IDArray_Type
PyObject * BPy_Wrap_GetValues(ID *id, IDProperty *prop)
static int BPy_IDGroup_Iter_clear(BPy_IDGroup_Iter *self)
static void IDGroup_View_init_type(void)
static PyObject * idprop_py_from_idp_array(ID *id, IDProperty *prop)
static PyObject * BPy_Group_IterKeys_next(BPy_IDGroup_Iter *self)
static PySequenceMethods BPy_IDGroup_Seq
static int BPy_IDGroup_Contains(BPy_IDProperty *self, PyObject *value)
PyTypeObject BPy_IDGroup_IterValues_Type
static PyObject * BPy_Group_ViewKeys_iter(BPy_IDGroup_View *self)
static int BPy_Group_ViewValues_Contains(BPy_IDGroup_View *self, PyObject *value)
PyObject * BPy_Wrap_GetKeys(IDProperty *prop)
static PyBufferProcs BPy_IDArray_Buffer
static bool BPy_Group_Iter_same_size_or_raise_error(BPy_IDGroup_Iter *self)
static PyObject * BPy_IDArray_get_typecode(BPy_IDArray *self)
static PyObject * idprop_py_from_idp_idparray(ID *id, IDProperty *prop)
static IDProperty * idp_from_PySequence(const char *name, PyObject *ob)
static void BPy_IDGroup_View_dealloc(BPy_IDGroup_View *self)
static void BPy_IDGroup_CorrectListLen(IDProperty *prop, PyObject *seq, int len, const char *func)
PyObject * BPy_IDGroup_WrapData(ID *id, IDProperty *prop, IDProperty *parent)
static PySequenceMethods BPy_IDArray_Seq
static PyObject * BPy_IDGroup_Map_GetItem(BPy_IDProperty *self, PyObject *item)
static PyObject * BPy_IDGroup_ViewKeys_CreatePyObject(BPy_IDProperty *group)
static IDProperty * idp_from_PyMapping(const char *name, PyObject *ob)
static PyMappingMethods BPy_IDArray_AsMapping
static IDProperty * idp_from_PyObject(PyObject *name_obj, PyObject *ob)
static IDProperty * idp_from_PySequence_Fast(const char *name, PyObject *ob)
static PyObject * BPy_IDGroup_ViewItems_CreatePyObject(BPy_IDProperty *group)
PyObject * BPyInit_idprop(void)
PyObject * BPy_Wrap_GetValues_View_WithID(ID *id, IDProperty *prop)
static PyObject * idprop_py_from_idp_float(const IDProperty *prop)
static int BPy_IDArray_Len(BPy_IDArray *self)
static PyObject * idprop_py_from_idp_string(const IDProperty *prop)
static PySequenceMethods BPy_IDGroup_ViewKeys_as_sequence
static PyObject * idprop_py_from_idp_group(ID *id, IDProperty *prop, IDProperty *parent)
static Py_ssize_t BPy_IDGroup_Map_Len(BPy_IDProperty *self)
static IDProperty * idp_from_PySequence_Buffer(const char *name, Py_buffer *buffer)
static char idp_sequence_type(PyObject *seq_fast)
static PyObject * idprop_py_from_idp_id(IDProperty *prop)
static int BPy_IDArray_SetItem(BPy_IDArray *self, int index, PyObject *value)
static int BPy_IDGroup_Map_SetItem(BPy_IDProperty *self, PyObject *key, PyObject *val)
static int BPy_IDGroup_View_clear(BPy_IDGroup_View *self)
PyObject * pyrna_id_CreatePyObject(ID *id)
static PyObject * BPy_IDGroup_items(BPy_IDProperty *self)
static PyObject * idprop_py_from_idp_int(const IDProperty *prop)
static int BPy_IDArray_ass_slice(BPy_IDArray *self, int begin, int end, PyObject *seq)
static struct PyModuleDef IDProp_types_module_def
bool pyrna_id_FromPyObject(PyObject *obj, ID **id)
static PyObject * BPy_IDGroup_iter(BPy_IDProperty *self)
static int BPy_IDArray_getbuffer(BPy_IDArray *self, Py_buffer *view, int flags)
static PyObject * BPy_IDGroup_to_dict(BPy_IDProperty *self)
static PyObject * BPy_IDGroup_update(BPy_IDProperty *self, PyObject *value)
PyTypeObject BPy_IDGroup_IterItems_Type
static PyObject * BPy_IDGroup_Iter_repr(BPy_IDGroup_Iter *self)
static PyObject * BPy_IDGroup_ViewValues_CreatePyObject(BPy_IDProperty *group)
static Py_hash_t BPy_IDGroup_hash(BPy_IDProperty *self)
static int idp_array_type_from_formatstr_and_size(const char *typestr, Py_ssize_t itemsize)
static int BPy_IDGroup_Iter_traverse(BPy_IDGroup_Iter *self, visitproc visit, void *arg)
static IDProperty * idp_from_DatablockPointer(const char *name, PyObject *ob)
static IDProperty * idp_from_PyUnicode(const char *name, PyObject *ob)
#define SHARED_MEMBER_SET(member, value)
PyObject * BPy_Wrap_GetItems_View_WithID(ID *id, IDProperty *prop)
static int BPy_IDGroup_SetName(BPy_IDProperty *self, PyObject *value, void *UNUSED(closure))
static PyMappingMethods BPy_IDGroup_Mapping
#define BPy_IDGroup_Check(v)
struct BPy_IDProperty BPy_IDProperty
struct BPy_IDArray BPy_IDArray
void IDPropertyUIData_Init_Types()
ccl_global float * buffer
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
static struct PartialUpdateUser * wrap(PartialUpdateUserImpl *user)
T length(const vec_base< T, Size > &a)
static const pxr::TfToken st("st", pxr::TfToken::Immortal)
char PyC_StructFmt_type_from_str(const char *typestr)
const char * PyC_UnicodeAsByte(PyObject *py_str, PyObject **coerce)
PyObject * PyC_UnicodeFromByteAndSize(const char *str, Py_ssize_t size)
bool PyC_StructFmt_type_is_int_any(char format)
int PyC_AsArray(void *array, const size_t array_item_size, PyObject *value, const Py_ssize_t length, const PyTypeObject *type, const char *error_prefix)
const char * PyC_UnicodeAsByteAndSize(PyObject *py_str, Py_ssize_t *size, PyObject **coerce)
bool PyC_StructFmt_type_is_float_any(char format)
#define PyTuple_SET_ITEMS(op_arg,...)
PyObject_VAR_HEAD BPy_IDProperty * group
PyObject_VAR_HEAD BPy_IDProperty * group
PyObject_VAR_HEAD struct ID * owner_id
struct IDProperty * parent
IDPropertyUIData * ui_data
struct IDPropertyTemplate::@27 array
struct IDPropertyTemplate::@26 string
ccl_device_inline int mod(int x, int m)