diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/eiotas_spin.c | 43 | 
1 files changed, 36 insertions, 7 deletions
diff --git a/src/lib/eiotas_spin.c b/src/lib/eiotas_spin.c index 296db70..9080dd4 100644 --- a/src/lib/eiotas_spin.c +++ b/src/lib/eiotas_spin.c @@ -21,19 +21,48 @@  #endif  #include "eiotas_spin.h" +#include "eiotas_iota.h"  #include "eiotas_private.h" -EAPI Eiotas_Spin* -eiotas_spin_add(const char* name, unsigned int step) +EAPI Eiotas_Spin* eiotas_spin_add(const char* name, unsigned int step)  { -    // TODO -    return NULL; +    BUILD_INSTANCE(Eiotas_Spin,spin); + +    if(name==NULL) { +        ERR("name can't be NULL"); +        return NULL; +    } + +    if(eiotas_iota_init(&spin->room.iota,name,NULL,EIOTAS_TYPE_SPIN)) { +        return NULL; +    } + +    spin->room.links = NULL;    /* not used */ +    spin->room.children = eina_hash_stringshared_new((Eina_Free_Cb)&eiotas_iota_free); +    spin->free_particles = eina_array_new(step); +    spin->sys_fifo = eina_array_new(step); +    spin->app_fifo = eina_array_new(step); + +    return spin;  } -EAPI void -eiotas_spin_free(Eiotas_Spin *spin) +EAPI void eiotas_spin_free(Eiotas_Spin *spin)  { +    unsigned int        i; +    Eiotas_Particle     *particle; +    Eina_Array_Iterator iterator; +      DBG("Spin free 0x%X",spin); -    // TODO + +    eiotas_iota_desinit(&spin->room.iota); +    eina_hash_free(spin->room.children); +    EINA_ARRAY_ITER_NEXT(spin->free_particles, i, particle, iterator) eiotas_particle_free(particle); +    EINA_ARRAY_ITER_NEXT(spin->sys_fifo, i, particle, iterator) eiotas_particle_free(particle); +    EINA_ARRAY_ITER_NEXT(spin->app_fifo, i, particle, iterator) eiotas_particle_free(particle); +    eina_array_free(spin->free_particles); +    eina_array_free(spin->sys_fifo); +    eina_array_free(spin->app_fifo); + +    free(spin);  }  | 
