diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-12-29 18:40:26 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-12-29 18:40:26 +0300 |
commit | 5cd837a562d773cdff155ab05084af590341758d (patch) | |
tree | 20609a23f562cbf8ccf91b41af3f80240551b977 /source/blender/editors/space_logic | |
parent | d5cef9a30d1febb22b760eb7d5cdac0fd628bb06 (diff) |
* speedup for animating bones, in one scene with sintel and a dragon animated its over 4x faster.
* utility function BLI_findstring to avoid listbase lookup loops everywhere.
eg:
ListBase *lb= objects= &CTX_data_main(C)->object;
Object *ob= BLI_findstring(lb, name, offsetof(ID, name) + 2);
* made some more math functions use const's, (fix warnings I made in previous commits)
Diffstat (limited to 'source/blender/editors/space_logic')
-rw-r--r-- | source/blender/editors/space_logic/logic_window.c | 94 |
1 files changed, 16 insertions, 78 deletions
diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c index 8ba0577e3c7..dfc9b263ac2 100644 --- a/source/blender/editors/space_logic/logic_window.c +++ b/source/blender/editors/space_logic/logic_window.c @@ -975,107 +975,45 @@ static void verify_logicbutton_func(bContext *C, void *data1, void *data2) static void test_scriptpoin_but(struct bContext *C, char *name, ID **idpp) { - ID *id; - - id= CTX_data_main(C)->text.first; - while(id) { - if( strcmp(name, id->name+2)==0 ) { - *idpp= id; - return; - } - id= id->next; - } - *idpp= NULL; + *idpp= BLI_findstring(&CTX_data_main(C)->text, name, offsetof(ID, name) + 2); } static void test_actionpoin_but(struct bContext *C, char *name, ID **idpp) { - ID *id; - - id= CTX_data_main(C)->action.first; - while(id) { - if( strcmp(name, id->name+2)==0 ) { - id_us_plus(id); - *idpp= id; - return; - } - id= id->next; - } - *idpp= NULL; + *idpp= BLI_findstring(&CTX_data_main(C)->text, name, offsetof(ID, name) + 2); + if(*idpp) + id_us_plus(*idpp); } static void test_obpoin_but(struct bContext *C, char *name, ID **idpp) { - ID *id; - - id= CTX_data_main(C)->object.first; - while(id) { - if( strcmp(name, id->name+2)==0 ) { - *idpp= id; - id_lib_extern(id); /* checks lib data, sets correct flag for saving then */ - return; - } - id= id->next; - } - *idpp= NULL; + *idpp= BLI_findstring(&CTX_data_main(C)->object, name, offsetof(ID, name) + 2); + if(*idpp) + id_lib_extern(*idpp); /* checks lib data, sets correct flag for saving then */ } static void test_meshpoin_but(struct bContext *C, char *name, ID **idpp) { - ID *id; - - if( *idpp ) (*idpp)->us--; - - id= CTX_data_main(C)->mesh.first; - while(id) { - if( strcmp(name, id->name+2)==0 ) { - *idpp= id; - id_us_plus(id); - return; - } - id= id->next; - } - *idpp= NULL; + *idpp= BLI_findstring(&CTX_data_main(C)->mesh, name, offsetof(ID, name) + 2); + if(*idpp) + id_us_plus(*idpp); } static void test_matpoin_but(struct bContext *C, char *name, ID **idpp) { - ID *id; - - if( *idpp ) (*idpp)->us--; - - id= CTX_data_main(C)->mat.first; - while(id) { - if( strcmp(name, id->name+2)==0 ) { - *idpp= id; - id_us_plus(id); - return; - } - id= id->next; - } - *idpp= NULL; + *idpp= BLI_findstring(&CTX_data_main(C)->mat, name, offsetof(ID, name) + 2); + if(*idpp) + id_us_plus(*idpp); } static void test_scenepoin_but(struct bContext *C, char *name, ID **idpp) { - ID *id; - - if( *idpp ) (*idpp)->us--; - - id= CTX_data_main(C)->scene.first; - while(id) { - if( strcmp(name, id->name+2)==0 ) { - *idpp= id; - id_us_plus(id); - return; - } - id= id->next; - } - *idpp= NULL; + *idpp= BLI_findstring(&CTX_data_main(C)->scene, name, offsetof(ID, name) + 2); + if(*idpp) + id_us_plus(*idpp); } - static void test_keyboard_event(struct bContext *C, void *arg_ks, void *arg_unused) { bKeyboardSensor *ks= (bKeyboardSensor*)arg_ks; |