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:
authorCampbell Barton <ideasman42@gmail.com>2010-01-22 17:06:42 +0300
committerCampbell Barton <ideasman42@gmail.com>2010-01-22 17:06:42 +0300
commitad65d6995cd87656e3d9b7dee07adbcea16b564c (patch)
tree4538dd2e8a4e8a406caebc0d63c14b96d20a4814 /source/blender/makesrna/intern/rna_rna.c
parent8ec59c7c687b9e50c48a9d455b31ff4c01df69d2 (diff)
use string/int/length lookup functions for bpy.types, gives 20-30% overall startup time speedup on my system.
Diffstat (limited to 'source/blender/makesrna/intern/rna_rna.c')
-rw-r--r--source/blender/makesrna/intern/rna_rna.c45
1 files changed, 44 insertions, 1 deletions
diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c
index e6c21d8fede..a2a6e7c361c 100644
--- a/source/blender/makesrna/intern/rna_rna.c
+++ b/source/blender/makesrna/intern/rna_rna.c
@@ -798,6 +798,42 @@ static void rna_BlenderRNA_structs_begin(CollectionPropertyIterator *iter, Point
rna_iterator_listbase_begin(iter, &((BlenderRNA*)ptr->data)->structs, NULL);
}
+/* optional, for faster lookups */
+static int rna_BlenderRNA_structs_length(PointerRNA *ptr, int index)
+{
+ return BLI_countlist(&((BlenderRNA*)ptr->data)->structs);
+}
+static PointerRNA rna_BlenderRNA_structs_lookup_int(PointerRNA *ptr, int index)
+{
+ StructRNA *srna= BLI_findlink(&((BlenderRNA*)ptr->data)->structs, index);
+
+ if(srna) {
+ PointerRNA r_ptr;
+ RNA_pointer_create(NULL, &RNA_Struct, srna, &r_ptr);
+ return r_ptr;
+ }
+ else {
+ return PointerRNA_NULL;
+ }
+}
+static PointerRNA rna_BlenderRNA_structs_lookup_string(PointerRNA *ptr, const char *key)
+{
+ StructRNA *srna= ((BlenderRNA*)ptr->data)->structs.first;
+ for(; srna; srna=srna->cont.next)
+ if(key[0] == srna->identifier[0] && strcmp(key, srna->identifier)==0)
+ break;
+
+ if(srna) {
+ PointerRNA r_ptr;
+ RNA_pointer_create(NULL, &RNA_Struct, srna, &r_ptr);
+ return r_ptr;
+ }
+ else {
+ return PointerRNA_NULL;
+ }
+}
+
+
#else
static void rna_def_struct(BlenderRNA *brna)
@@ -1238,7 +1274,14 @@ void RNA_def_rna(BlenderRNA *brna)
prop= RNA_def_property(srna, "structs", PROP_COLLECTION, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "Struct");
- RNA_def_property_collection_funcs(prop, "rna_BlenderRNA_structs_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0);
+ RNA_def_property_collection_funcs(prop, "rna_BlenderRNA_structs_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get",
+ /* included for speed, can be removed */
+#if 0
+ 0,0,0);
+#else
+ "rna_BlenderRNA_structs_length", "rna_BlenderRNA_structs_lookup_int", "rna_BlenderRNA_structs_lookup_string");
+#endif
+
RNA_def_property_ui_text(prop, "Structs", "");
}