Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2014-04-05 16:36:18 +0400
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2014-04-05 16:50:17 +0400
commit45507319635a0351d3c5010d75c32e40bf211d25 (patch)
tree909a5c2cf0816630bbe166de46d8e23d573db09d /source/blender/makesrna/intern/rna_access.c
parentcb0520f79a7a2babd4c4a4f0d075c0d289b2a2f0 (diff)
RNA: optimization to avoid malloc for iterators.
This mostly helps making Cycles scene synchronization a bit faster.
Diffstat (limited to 'source/blender/makesrna/intern/rna_access.c')
-rw-r--r--source/blender/makesrna/intern/rna_access.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 5e0ed7cd08b..b0ed7e29c6a 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -2886,7 +2886,7 @@ void RNA_property_collection_skip(CollectionPropertyIterator *iter, int num)
if (num > 1 && (iter->idprop || (cprop->property.flag & PROP_RAW_ARRAY))) {
/* fast skip for array */
- ArrayIterator *internal = iter->internal;
+ ArrayIterator *internal = &iter->internal.array;
if (!internal->skip) {
internal->ptr += internal->itemsize * (num - 1);
@@ -3227,7 +3227,7 @@ int RNA_property_collection_raw_array(PointerRNA *ptr, PropertyRNA *prop, Proper
if (iter.valid) {
/* get data from array iterator and item property */
- internal = iter.internal;
+ internal = &iter.internal.array;
arrayp = (iter.valid) ? iter.ptr.data : NULL;
if (internal->skip || !RNA_property_editable(&iter.ptr, itemprop)) {
@@ -3644,13 +3644,11 @@ int RNA_property_collection_raw_set(ReportList *reports, PointerRNA *ptr, Proper
void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip)
{
- ListBaseIterator *internal;
+ ListBaseIterator *internal = &iter->internal.listbase;
- internal = MEM_callocN(sizeof(ListBaseIterator), "ListBaseIterator");
internal->link = (lb) ? lb->first : NULL;
internal->skip = skip;
- iter->internal = internal;
iter->valid = (internal->link != NULL);
if (skip && iter->valid && skip(iter, internal->link))
@@ -3659,7 +3657,7 @@ void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb,
void rna_iterator_listbase_next(CollectionPropertyIterator *iter)
{
- ListBaseIterator *internal = iter->internal;
+ ListBaseIterator *internal = &iter->internal.listbase;
if (internal->skip) {
do {
@@ -3675,15 +3673,13 @@ void rna_iterator_listbase_next(CollectionPropertyIterator *iter)
void *rna_iterator_listbase_get(CollectionPropertyIterator *iter)
{
- ListBaseIterator *internal = iter->internal;
+ ListBaseIterator *internal = &iter->internal.listbase;
return internal->link;
}
-void rna_iterator_listbase_end(CollectionPropertyIterator *iter)
+void rna_iterator_listbase_end(CollectionPropertyIterator *UNUSED(iter))
{
- MEM_freeN(iter->internal);
- iter->internal = NULL;
}
PointerRNA rna_listbase_lookup_int(PointerRNA *ptr, StructRNA *type, struct ListBase *lb, int index)
@@ -3704,7 +3700,7 @@ void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int i
itemsize = 0;
}
- internal = MEM_callocN(sizeof(ArrayIterator), "ArrayIterator");
+ internal = &iter->internal.array;
internal->ptr = ptr;
internal->free_ptr = free_ptr ? ptr : NULL;
internal->endptr = ((char *)ptr) + length * itemsize;
@@ -3712,7 +3708,6 @@ void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int i
internal->skip = skip;
internal->length = length;
- iter->internal = internal;
iter->valid = (internal->ptr != internal->endptr);
if (skip && iter->valid && skip(iter, internal->ptr))
@@ -3721,7 +3716,7 @@ void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int i
void rna_iterator_array_next(CollectionPropertyIterator *iter)
{
- ArrayIterator *internal = iter->internal;
+ ArrayIterator *internal = &iter->internal.array;
if (internal->skip) {
do {
@@ -3737,14 +3732,14 @@ void rna_iterator_array_next(CollectionPropertyIterator *iter)
void *rna_iterator_array_get(CollectionPropertyIterator *iter)
{
- ArrayIterator *internal = iter->internal;
+ ArrayIterator *internal = &iter->internal.array;
return internal->ptr;
}
void *rna_iterator_array_dereference_get(CollectionPropertyIterator *iter)
{
- ArrayIterator *internal = iter->internal;
+ ArrayIterator *internal = &iter->internal.array;
/* for ** arrays */
return *(void **)(internal->ptr);
@@ -3752,14 +3747,12 @@ void *rna_iterator_array_dereference_get(CollectionPropertyIterator *iter)
void rna_iterator_array_end(CollectionPropertyIterator *iter)
{
- ArrayIterator *internal = iter->internal;
+ ArrayIterator *internal = &iter->internal.array;
if (internal->free_ptr) {
MEM_freeN(internal->free_ptr);
internal->free_ptr = NULL;
}
- MEM_freeN(iter->internal);
- iter->internal = NULL;
}
PointerRNA rna_array_lookup_int(PointerRNA *ptr, StructRNA *type, void *data, int itemsize, int length, int index)