EPhysics: use inlist for worlds list

SVN revision: 75138
This commit is contained in:
Bruno Dilly 2012-08-10 21:03:01 +00:00
parent d432a4faba
commit 595e8c8195
1 changed files with 11 additions and 11 deletions

View File

@ -20,6 +20,7 @@ struct _EPhysics_World_Callback {
}; };
struct _EPhysics_World { struct _EPhysics_World {
EINA_INLIST;
btBroadphaseInterface* broadphase; btBroadphaseInterface* broadphase;
btDefaultCollisionConfiguration* collision; btDefaultCollisionConfiguration* collision;
btCollisionDispatcher* dispatcher; btCollisionDispatcher* dispatcher;
@ -47,7 +48,7 @@ struct _EPhysics_World {
static int _ephysics_world_init_count = 0; static int _ephysics_world_init_count = 0;
static int _worlds_running = 0; static int _worlds_running = 0;
static Eina_List *_worlds = NULL; static Eina_Inlist *_worlds = NULL;
static Ecore_Animator *_anim_simulate = NULL; static Ecore_Animator *_anim_simulate = NULL;
struct _ephysics_world_ovelap_filter_cb : public btOverlapFilterCallback struct _ephysics_world_ovelap_filter_cb : public btOverlapFilterCallback
@ -126,14 +127,13 @@ _ephysics_world_tick_cb(btDynamicsWorld *dynamics_world, btScalar timeStep)
static Eina_Bool static Eina_Bool
_simulate_worlds(void *data) _simulate_worlds(void *data)
{ {
Eina_List *l, *lworlds = (Eina_List *) data; Eina_Inlist *lworlds = (Eina_Inlist *) data;
EPhysics_World *world;
double time_now; double time_now;
void *ldata;
EINA_LIST_FOREACH(lworlds, l, ldata) EINA_INLIST_FOREACH(lworlds, world)
{ {
double time_now, delta; double time_now, delta;
EPhysics_World *world = (EPhysics_World *) ldata;
if (!world->running) if (!world->running)
continue; continue;
@ -232,8 +232,6 @@ ephysics_world_init(void)
int int
ephysics_world_shutdown(void) ephysics_world_shutdown(void)
{ {
void *ldata;
if (--_ephysics_world_init_count != 0) if (--_ephysics_world_init_count != 0)
return _ephysics_world_init_count; return _ephysics_world_init_count;
@ -243,9 +241,11 @@ ephysics_world_shutdown(void)
_anim_simulate = NULL; _anim_simulate = NULL;
} }
EINA_LIST_FREE(_worlds, ldata) while (_worlds)
{ {
EPhysics_World *world = (EPhysics_World *) ldata; EPhysics_World *world = EINA_INLIST_CONTAINER_GET(
_worlds, EPhysics_World);
_worlds = eina_inlist_remove(_worlds, _worlds);
ephysics_world_del(world); ephysics_world_del(world);
} }
@ -327,7 +327,7 @@ ephysics_world_new(void)
goto no_world; goto no_world;
} }
_worlds = eina_list_append(_worlds, world); _worlds = eina_inlist_append(_worlds, EINA_INLIST_GET(world));
if (eina_error_get()) if (eina_error_get())
{ {
ERR("Couldn't add world to worlds list."); ERR("Couldn't add world to worlds list.");
@ -435,7 +435,7 @@ ephysics_world_del(EPhysics_World *world)
} }
ephysics_world_running_set(world, EINA_FALSE); ephysics_world_running_set(world, EINA_FALSE);
_worlds = eina_list_remove(_worlds, world); _worlds = eina_inlist_remove(_worlds, EINA_INLIST_GET(world));
while (world->callbacks) while (world->callbacks)
{ {