comment array/collection skip(), since there was some confusion in this area which...
authorCampbell Barton <ideasman42@gmail.com>
Wed, 12 Jan 2011 06:16:15 +0000 (06:16 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 12 Jan 2011 06:16:15 +0000 (06:16 +0000)
source/blender/makesrna/intern/makesrna.c
source/blender/makesrna/intern/rna_internal.h

index 2036833fa37040ba498118f01d1f6c18d3e618e3..cf1b14d5e620e70390bcae6c837098b25fb91cec 100644 (file)
@@ -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");
index 39f12c56e1cb962e6d8c19fb2f56f7e4b2691dfe..a512bb93d6ba364e09c296106999be0fb81f2536 100644 (file)
@@ -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;