diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-04-05 16:36:18 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-04-05 16:50:17 +0400 |
commit | 45507319635a0351d3c5010d75c32e40bf211d25 (patch) | |
tree | 909a5c2cf0816630bbe166de46d8e23d573db09d /source/blender/makesrna/intern/rna_access.c | |
parent | cb0520f79a7a2babd4c4a4f0d075c0d289b2a2f0 (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.c | 29 |
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) |