diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-01-12 09:16:15 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-01-12 09:16:15 +0300 |
commit | baaaceb3eb41381c095f142c790a2c163752cdd5 (patch) | |
tree | bf36af6590206f734d826d89af5d79bd5d77d759 /source/blender/makesrna | |
parent | 9a70c609e00f952584a356b4ddc8fa3240438a12 (diff) |
comment array/collection skip(), since there was some confusion in this area which caused bugs on index lookups.
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/intern/makesrna.c | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_internal.h | 7 |
2 files changed, 10 insertions, 3 deletions
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 2036833fa37..cf1b14d5e62 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -948,6 +948,8 @@ static char *rna_def_property_begin_func(FILE *f, StructRNA *srna, PropertyRNA * static char *rna_def_property_lookup_int_func(FILE *f, StructRNA *srna, PropertyRNA *prop, PropertyDefRNA *dp, char *manualfunc, char *nextfunc) { + /* note on indicies, this is for external functions and ignores skipped values. + * so the the index can only be checked against the length when there is no 'skip' funcion. */ char *func; if(prop->flag & PROP_IDPROPERTY && manualfunc==NULL) @@ -984,9 +986,9 @@ static char *rna_def_property_lookup_int_func(FILE *f, StructRNA *srna, Property fprintf(f, " ArrayIterator *internal= iter.internal;\n"); fprintf(f, " if(index < 0 || index >= internal->length) {\n"); fprintf(f, "#ifdef __GNUC__\n"); - fprintf(f, " printf(\"Array iterator out of range: %%s (index %%d range %%d)\\n\", __func__, index, internal->length); \n"); + fprintf(f, " printf(\"Array iterator out of range: %%s (index %%d)\\n\", __func__, index);\n"); fprintf(f, "#else\n"); - fprintf(f, " printf(\"Array iterator out of range: (index %%d range %%d)\\n\", index, internal->length); \n"); + fprintf(f, " printf(\"Array iterator out of range: (index %%d)\\n\", index);\n"); fprintf(f, "#endif\n"); fprintf(f, " }\n"); fprintf(f, " else if(internal->skip) {\n"); diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 39f12c56e1c..a512bb93d6b 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -321,10 +321,15 @@ PointerRNA rna_listbase_lookup_int(PointerRNA *ptr, StructRNA *type, struct List typedef struct ArrayIterator { char *ptr; - char *endptr; + char *endptr; /* past the last valid pointer, only for comparisons, ignores skipped values */ void *free_ptr; /* will be free'd if set */ int itemsize; + + /* array length with no skip functins applied, take care not to compare against index from animsys or python indicies */ int length; + + /* optional skip function, when set the array as viewed by rna can contain only a subset of the members. + * this changes indicies so quick array index lookups are not possible when skip function is used. */ IteratorSkipFunc skip; } ArrayIterator; |