33 #define USE_STRING_COERCE
35 #ifdef USE_STRING_COERCE
54 return PyBytes_FromStringAndSize(
IDP_String(prop), prop->
len);
57 #ifdef USE_STRING_COERCE
60 return PyUnicode_FromStringAndSize(
IDP_String(prop), prop->
len - 1);
66 return PyLong_FromLong((
long)
IDP_Int(prop));
71 return PyFloat_FromDouble((
double)
IDP_Float(prop));
85 return (PyObject *)group;
98 return (PyObject *)
array;
103 PyObject *seq = PyList_New(prop->
len);
109 PyExc_RuntimeError,
"%s: IDP_IDPARRAY: PyList_New(%d) failed", __func__, prop->
len);
113 for (i = 0; i < prop->
len; i++) {
122 PyList_SET_ITEM(seq, i,
wrap);
137 return _Py_HashPointer(
self->prop);
142 return PyUnicode_FromFormat(
"<bpy id prop: owner=\"%s\", name=\"%s\", address=%p>",
143 self->id ?
self->id->name :
"<NONE>",
150 switch (prop->
type) {
176 switch (prop->
type) {
179 if (!PyUnicode_Check(value)) {
180 PyErr_SetString(PyExc_TypeError,
"expected a string!");
184 # ifdef USE_STRING_COERCE
187 PyObject *value_coerce =
NULL;
190 alloc_len = strlen(st) + 1;
192 st = PyUnicode_AsUTF8(value);
195 Py_XDECREF(value_coerce);
198 st = PyUnicode_AsUTF8(value);
207 int ivalue = PyLong_AsSsize_t(value);
208 if (ivalue == -1 && PyErr_Occurred()) {
209 PyErr_SetString(PyExc_TypeError,
"expected an int type");
216 float fvalue = (
float)PyFloat_AsDouble(value);
217 if (fvalue == -1 && PyErr_Occurred()) {
218 PyErr_SetString(PyExc_TypeError,
"expected a float");
225 double dvalue = PyFloat_AsDouble(value);
226 if (dvalue == -1 && PyErr_Occurred()) {
227 PyErr_SetString(PyExc_TypeError,
"expected a float");
234 PyErr_SetString(PyExc_AttributeError,
"attempt to set read-only attribute!");
243 return PyUnicode_FromString(
self->prop->name);
249 Py_ssize_t name_size;
251 if (!PyUnicode_Check(value)) {
252 PyErr_SetString(PyExc_TypeError,
"expected a string!");
256 name = PyUnicode_AsUTF8AndSize(value, &name_size);
259 PyErr_SetString(PyExc_TypeError,
"string length cannot exceed 63 characters!");
263 memcpy(
self->prop->name, name, name_size);
270 return PyLong_FromLong(
self->prop->type);
278 "The name of this Group.",
286 PyErr_SetString(PyExc_TypeError,
"len() of unsized object");
290 return self->prop->len;
299 PyErr_SetString(PyExc_TypeError,
"unsubscriptable object");
303 name = PyUnicode_AsUTF8(item);
306 PyErr_SetString(PyExc_TypeError,
"only strings are allowed as keys of ID properties");
312 if (idprop ==
NULL) {
313 PyErr_SetString(PyExc_KeyError,
"key not in subgroup dict");
323 PyObject **seq_fast_items = PySequence_Fast_ITEMS(seq_fast);
327 Py_ssize_t i,
len = PySequence_Fast_GET_SIZE(seq_fast);
329 for (i = 0; i <
len; i++) {
330 item = seq_fast_items[i];
331 if (PyFloat_Check(item)) {
337 else if (PyLong_Check(item)) {
342 else if (PyMapping_Check(item)) {
358 const char *name =
NULL;
360 Py_ssize_t name_size;
361 name = PyUnicode_AsUTF8AndSize(name_obj, &name_size);
364 PyErr_Format(PyExc_KeyError,
365 "invalid id-property key, expected a string, not a %.200s",
366 Py_TYPE(name_obj)->tp_name);
371 PyErr_SetString(PyExc_KeyError,
372 "the length of IDProperty names is limited to 63 characters");
396 val.
d = PyFloat_AsDouble(ob);
403 val.
i = PyC_Long_AsI32(ob);
404 if (val.
i == -1 && PyErr_Occurred()) {
414 #ifdef USE_STRING_COERCE
415 Py_ssize_t value_size;
416 PyObject *value_coerce =
NULL;
421 Py_XDECREF(value_coerce);
423 val.
str = PyUnicode_AsUTF8(ob);
497 PyObject **ob_seq_fast_items;
501 ob_seq_fast_items = PySequence_Fast_ITEMS(ob);
504 PyErr_SetString(PyExc_TypeError,
505 "only floats, ints and dicts are allowed in ID property arrays");
513 val.
array.
len = PySequence_Fast_GET_SIZE(ob);
520 for (i = 0; i < val.
array.
len; i++) {
521 item = ob_seq_fast_items[i];
522 if (((prop_data[i] = PyFloat_AsDouble(item)) == -1.0) && PyErr_Occurred()) {
533 for (i = 0; i < val.
array.
len; i++) {
534 item = ob_seq_fast_items[i];
535 if (((prop_data[i] = PyC_Long_AsI32(item)) == -1) && PyErr_Occurred()) {
544 for (i = 0; i < val.
array.
len; i++) {
545 item = ob_seq_fast_items[i];
555 PyErr_SetString(PyExc_RuntimeError,
"internal error with idp array.type");
564 bool use_buffer =
false;
566 if (PyObject_CheckBuffer(ob)) {
567 PyObject_GetBuffer(ob, &
buffer, PyBUF_SIMPLE | PyBUF_FORMAT);
574 PyBuffer_Release(&
buffer);
580 PyBuffer_Release(&
buffer);
584 PyObject *ob_seq_fast = PySequence_Fast(ob,
"py -> idprop");
585 if (ob_seq_fast !=
NULL) {
587 Py_DECREF(ob_seq_fast);
599 PyObject *keys, *vals, *key, *pval;
602 keys = PyMapping_Keys(ob);
603 vals = PyMapping_Values(ob);
608 len = PyMapping_Length(ob);
609 for (i = 0; i <
len; i++) {
610 key = PySequence_GetItem(keys, i);
611 pval = PySequence_GetItem(vals, i);
643 if (PyFloat_Check(ob)) {
646 if (PyLong_Check(ob)) {
649 if (PyUnicode_Check(ob)) {
652 if (PyBytes_Check(ob)) {
655 if (PySequence_Check(ob)) {
661 if (PyMapping_Check(ob)) {
666 PyExc_TypeError,
"invalid id-property type %.200s not supported", Py_TYPE(ob)->tp_name);
700 if ((prop_exist !=
NULL) && (prop_exist->
type == prop->
type) &&
722 PyErr_SetString(PyExc_TypeError,
"unsubscriptable object");
728 const char *name = PyUnicode_AsUTF8(key);
731 PyErr_Format(PyExc_KeyError,
"expected a string, not %.200s", Py_TYPE(key)->tp_name);
741 PyErr_SetString(PyExc_KeyError,
"property not found in group");
767 PyObject_GC_Track(iter);
768 return (PyObject *)iter;
774 switch (prop->
type) {
786 PyObject *seq = PyList_New(prop->
len);
791 PyExc_RuntimeError,
"%s: IDP_ARRAY: PyList_New(%d) failed", __func__, prop->
len);
798 for (i = 0; i < prop->
len; i++) {
799 PyList_SET_ITEM(seq, i, PyFloat_FromDouble(
array[i]));
805 for (i = 0; i < prop->
len; i++) {
806 PyList_SET_ITEM(seq, i, PyFloat_FromDouble(
array[i]));
812 for (i = 0; i < prop->
len; i++) {
813 PyList_SET_ITEM(seq, i, PyLong_FromLong(
array[i]));
819 PyExc_RuntimeError,
"%s: invalid/corrupt array type '%d'!", __func__, prop->
subtype);
827 PyObject *seq = PyList_New(prop->
len);
833 PyExc_RuntimeError,
"%s: IDP_IDPARRAY: PyList_New(%d) failed", __func__, prop->
len);
837 for (i = 0; i < prop->
len; i++) {
846 PyList_SET_ITEM(seq, i,
wrap);
851 PyObject *dict = _PyDict_NewPresized(prop->
len);
863 PyDict_SetItemString(dict, loop->
name,
wrap);
870 PyErr_Format(PyExc_RuntimeError,
871 "%s ERROR: '%s' property exists with a bad type code '%d'!",
886 ".. method:: pop(key, default)\n"
888 " Remove an item from the group, returning a Python representation.\n"
890 " :raises KeyError: When the item doesn't exist.\n"
892 " :arg key: Name of item to remove.\n"
893 " :type key: string\n"
894 " :arg default: Value to return when key isn't found, otherwise raise an exception.\n"
895 " :type default: Undefined\n");
902 PyObject *def =
NULL;
904 if (!PyArg_ParseTuple(args,
"s|O:get", &key, &def)) {
909 if (idprop ==
NULL) {
911 PyErr_SetString(PyExc_KeyError,
"item not in group");
914 return Py_INCREF_RET(def);
918 if (pyform ==
NULL) {
930 BPy_IDGroup_iter_items_doc,
931 ".. method:: iteritems()\n"
933 " Iterate through the items in the dict; behaves like dictionary method iteritems.\n");
941 PyObject_GC_Track(iter);
942 return (PyObject *)iter;
950 printf(
"%s: ID Property Error found and corrected!\n", func);
953 for (j =
len; j < prop->
len; j++) {
954 PyList_SET_ITEM(seq, j, Py_INCREF_RET(Py_None));
963 PyObject *list = PyList_New(prop->
len);
968 PyList_SET_ITEM(list, i, PyUnicode_FromString(loop->
name));
972 for (; loop; loop = loop->
next, i++) {
976 if (i != prop->
len) {
988 PyObject *list = PyList_New(prop->
len);
996 if (i != prop->
len) {
1008 PyObject *seq = PyList_New(prop->
len);
1013 PyObject *item = PyTuple_New(2);
1016 PyList_SET_ITEM(seq, i, item);
1019 if (i != prop->
len) {
1030 ".. method:: keys()\n"
1032 " Return the keys associated with this group as a list of strings.\n");
1039 ".. method:: values()\n"
1041 " Return the values associated with this group.\n");
1048 ".. method:: items()\n"
1050 " Return the items associated with this group.\n");
1058 const char *name = PyUnicode_AsUTF8(value);
1061 PyErr_Format(PyExc_TypeError,
"expected a string, not a %.200s", Py_TYPE(value)->tp_name);
1069 ".. method:: update(other)\n"
1071 " Update key, values.\n"
1073 " :arg other: Updates the values in the group with this.\n"
1074 " :type other: :class:`IDPropertyGroup` or dict\n");
1077 PyObject *pkey, *pval;
1089 else if (PyDict_Check(value)) {
1090 while (PyDict_Next(value, &i, &pkey, &pval)) {
1092 if (PyErr_Occurred()) {
1098 PyErr_Format(PyExc_TypeError,
1099 "expected a dict or an IDPropertyGroup type, not a %.200s",
1100 Py_TYPE(value)->tp_name);
1108 ".. method:: to_dict()\n"
1110 " Return a purely python version of the group.\n");
1117 ".. method:: clear()\n"
1119 " Clear all members from this group.\n");
1127 ".. method:: get(key, default=None)\n"
1129 " Return the value for key, if it exists, else default.\n");
1134 PyObject *def = Py_None;
1136 if (!PyArg_ParseTuple(args,
"s|O:get", &key, &def)) {
1153 {
"pop", (PyCFunction)
BPy_IDGroup_pop, METH_VARARGS, BPy_IDGroup_pop_doc},
1155 {
"keys", (PyCFunction)
BPy_IDGroup_keys, METH_NOARGS, BPy_IDGroup_keys_doc},
1159 {
"get", (PyCFunction)
BPy_IDGroup_get, METH_VARARGS, BPy_IDGroup_get_doc},
1192 PyVarObject_HEAD_INIT(
NULL, 0)
1260 switch (
self->prop->subtype) {
1262 *r_is_double =
false;
1263 return &PyFloat_Type;
1265 *r_is_double =
true;
1266 return &PyFloat_Type;
1268 *r_is_double =
false;
1269 return &PyLong_Type;
1271 *r_is_double =
false;
1278 return PyUnicode_FromFormat(
"<bpy id property array [%d]>",
self->prop->len);
1282 "The type of the data in the array {'f': float, 'd': double, 'i': int}.");
1285 switch (
self->prop->subtype) {
1287 return PyUnicode_FromString(
"f");
1289 return PyUnicode_FromString(
"d");
1291 return PyUnicode_FromString(
"i");
1295 PyExc_RuntimeError,
"%s: invalid/corrupt array type '%d'!", __func__,
self->prop->subtype);
1305 BPy_IDArray_get_typecode_doc,
1311 ".. method:: to_list()\n"
1313 " Return the array as a list.\n");
1326 return self->prop->len;
1331 if (index < 0 || index >=
self->prop->len) {
1332 PyErr_SetString(PyExc_IndexError,
"index out of range!");
1336 switch (
self->prop->subtype) {
1338 return PyFloat_FromDouble(((
float *)
IDP_Array(
self->prop))[index]);
1340 return PyFloat_FromDouble(((
double *)
IDP_Array(
self->prop))[index]);
1342 return PyLong_FromLong((
long)((
int *)
IDP_Array(
self->prop))[index]);
1346 PyExc_RuntimeError,
"%s: invalid/corrupt array type '%d'!", __func__,
self->prop->subtype);
1353 if (index < 0 || index >=
self->prop->len) {
1354 PyErr_SetString(PyExc_RuntimeError,
"index out of range!");
1358 switch (
self->prop->subtype) {
1360 const float f = (
float)PyFloat_AsDouble(value);
1361 if (f == -1 && PyErr_Occurred()) {
1368 const double d = PyFloat_AsDouble(value);
1369 if (d == -1 && PyErr_Occurred()) {
1376 const int i = PyC_Long_AsI32(value);
1377 if (i == -1 && PyErr_Occurred()) {
1411 end = prop->
len + end + 1;
1414 begin =
MIN2(begin, end);
1416 tuple = PyTuple_New(end - begin);
1422 PyTuple_SET_ITEM(tuple,
count - begin, PyFloat_FromDouble(
array[
count]));
1429 PyTuple_SET_ITEM(tuple,
count - begin, PyFloat_FromDouble(
array[
count]));
1436 PyTuple_SET_ITEM(tuple,
count - begin, PyLong_FromLong(
array[
count]));
1450 const size_t elem_size = is_double ?
sizeof(
double) :
sizeof(
float);
1457 begin =
MIN2(begin, end);
1459 size = (end - begin);
1460 alloc_len =
size * elem_size;
1465 if (
PyC_AsArray(vec, seq,
size, py_type, is_double,
"slice assignment: ") == -1) {
1470 memcpy((
void *)(((
char *)
IDP_Array(prop)) + (begin * elem_size)), vec, alloc_len);
1478 if (PyIndex_Check(item)) {
1480 i = PyNumber_AsSsize_t(item, PyExc_IndexError);
1481 if (i == -1 && PyErr_Occurred()) {
1485 i +=
self->prop->len;
1489 if (PySlice_Check(item)) {
1490 Py_ssize_t start, stop, step, slicelength;
1492 if (PySlice_GetIndicesEx(item,
self->prop->len, &start, &stop, &step, &slicelength) < 0) {
1496 if (slicelength <= 0) {
1497 return PyTuple_New(0);
1503 PyErr_SetString(PyExc_TypeError,
"slice steps not supported with vectors");
1507 PyErr_Format(PyExc_TypeError,
1508 "vector indices must be integers, not %.200s",
1510 Py_TYPE(item)->tp_name);
1516 if (PyIndex_Check(item)) {
1517 Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
1518 if (i == -1 && PyErr_Occurred()) {
1522 i +=
self->prop->len;
1526 if (PySlice_Check(item)) {
1527 Py_ssize_t start, stop, step, slicelength;
1529 if (PySlice_GetIndicesEx(item,
self->prop->len, &start, &stop, &step, &slicelength) < 0) {
1537 PyErr_SetString(PyExc_TypeError,
"slice steps not supported with vectors");
1542 PyExc_TypeError,
"vector indices must be integers, not %.200s", Py_TYPE(item)->tp_name);
1558 return sizeof(
float);
1570 const int length = itemsize * prop->
len;
1572 if (PyBuffer_FillInfo(
view, (PyObject *)
self,
IDP_Array(prop),
length,
false, flags) == -1) {
1576 view->itemsize = itemsize;
1579 Py_ssize_t *shape =
MEM_mallocN(
sizeof(Py_ssize_t), __func__);
1580 shape[0] = prop->
len;
1581 view->shape = shape;
1601 PyVarObject_HEAD_INIT(
NULL, 0)
1689 return PyUnicode_FromFormat(
"(ID Property Group Iter \"%s\")",
self->group->prop->name);
1694 PyObject_GC_UnTrack(
self);
1695 Py_CLEAR(
self->group);
1696 PyObject_GC_Del(
self);
1701 Py_VISIT(
self->group);
1707 Py_CLEAR(
self->group);
1719 self->cur =
self->cur->
next;
1722 ret = PyTuple_New(2);
1724 PyUnicode_FromString(cur->
name),
1729 return PyUnicode_FromString(cur->
name);
1732 PyErr_SetNone(PyExc_StopIteration);
1737 PyVarObject_HEAD_INIT(
NULL, 0)
1739 "IDPropertyGroupIter",
1770 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
1807 PyModuleDef_HEAD_INIT,
1820 PyObject *submodule;
1845 "This module provides access id property types (currently mainly for docs).");
1847 PyModuleDef_HEAD_INIT,
1861 PyObject *submodule;
1862 PyObject *sys_modules = PyImport_GetModuleDict();
1868 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_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_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_MergeGroup(struct IDProperty *dest, const struct IDProperty *src, const bool do_overwrite) ATTR_NONNULL()
struct IDProperty * IDP_New(const char type, const IDPropertyTemplate *val, 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 RGB to Bright Vector Camera CLAMP
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE btScalar length(const btQuaternion &q)
Return the length of a quaternion.
void IDProp_Init_Types(void)
static PyMethodDef IDProp_methods[]
PyDoc_STRVAR(BPy_IDGroup_pop_doc, ".. method:: pop(key, default)\n" "\n" " Remove an item from the group, returning a Python representation.\n" "\n" " :raises KeyError: When the item doesn't exist.\n" "\n" " :arg key: Name of item to remove.\n" " :type key: string\n" " :arg default: Value to return when key isn't found, otherwise raise an exception.\n" " :type default: Undefined\n")
static PyGetSetDef BPy_IDGroup_getseters[]
static struct PyModuleDef IDProp_module_def
static PyObject * BPy_IDGroup_pop(BPy_IDProperty *self, PyObject *args)
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_keys(BPy_IDProperty *self)
static PyObject * BPyInit_idprop_types(void)
static struct PyMethodDef BPy_IDGroup_methods[]
static IDProperty * idp_from_PyBytes(const char *name, PyObject *ob)
bool pyrna_id_CheckPyObject(PyObject *obj)
static PyObject * BPy_IDArray_GetItem(BPy_IDArray *self, int index)
static PyGetSetDef BPy_IDArray_getseters[]
static PyObject * BPy_IDGroup_values(BPy_IDProperty *self)
int BPy_Wrap_SetMapItem(IDProperty *prop, PyObject *key, PyObject *val)
static void BPy_IDGroup_Iter_dealloc(BPy_IDGroup_Iter *self)
PyObject * BPy_IDGroup_MapDataToPy(IDProperty *prop)
static IDProperty * idp_from_PyLong(const char *name, PyObject *ob)
static PyMethodDef BPy_IDArray_methods[]
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 PyObject * BPy_IDArray_repr(BPy_IDArray *self)
PyObject * BPy_Wrap_GetItems(ID *id, IDProperty *prop)
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)
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 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)
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 PyObject * idprop_py_from_idp_array(ID *id, IDProperty *prop)
PyTypeObject BPy_IDGroup_Iter_Type
static PySequenceMethods BPy_IDGroup_Seq
static int BPy_IDGroup_Contains(BPy_IDProperty *self, PyObject *value)
PyObject * BPy_Wrap_GetKeys(IDProperty *prop)
static PyBufferProcs BPy_IDArray_Buffer
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_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_Group_Iter_Next(BPy_IDGroup_Iter *self)
static PyObject * BPy_IDGroup_Map_GetItem(BPy_IDProperty *self, PyObject *item)
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)
PyObject * BPyInit_idprop(void)
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 PyObject * IDGroup_Iter_repr(BPy_IDGroup_Iter *self)
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)
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)
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)
static PyObject * BPy_IDGroup_iter_items(BPy_IDProperty *self)
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_IDGroup_Iter BPy_IDGroup_Iter
struct BPy_IDProperty BPy_IDProperty
#define IDPROP_ITER_ITEMS
struct BPy_IDArray BPy_IDArray
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
static GPUContext * wrap(Context *ctx)
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)
const char * PyC_UnicodeAsByteAndSize(PyObject *py_str, Py_ssize_t *size, PyObject **coerce)
bool PyC_StructFmt_type_is_float_any(char format)
int PyC_AsArray(void *array, PyObject *value, const Py_ssize_t length, const PyTypeObject *type, const bool is_double, const char *error_prefix)
#define PyTuple_SET_ITEMS(op_arg,...)
PyObject_VAR_HEAD BPy_IDProperty * group
struct IDProperty * parent
PyObject_VAR_HEAD struct ID * id
struct IDPropertyTemplate::@28 array
struct IDPropertyTemplate::@27 string
ccl_device_inline int mod(int x, int m)