diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/eiotas_room.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/src/lib/eiotas_room.c b/src/lib/eiotas_room.c index 9cc4170..9ea9e10 100644 --- a/src/lib/eiotas_room.c +++ b/src/lib/eiotas_room.c @@ -23,16 +23,37 @@ #include "eiotas_room.h" #include "eiotas_private.h" -EAPI Eiotas_Room* -eiotas_room_add(const char* name, Eiotas_Room *parent) +EAPI Eiotas_Room* eiotas_room_add(const char* name, Eiotas_Room *parent) { - // TODO - return NULL; + CHECK_PARENT(); + + BUILD_INSTANCE(Eiotas_Room,room); + + if(eiotas_iota_init(&room->iota,name,parent,EIOTAS_TYPE_ROOM)) { + return NULL; + } + + if(eina_hash_find(parent->children,room->iota.name)) { + ERR("Room %s already exists in %s",name,parent->iota.path); + eiotas_iota_desinit(&room->iota); + return NULL; + } + eina_hash_direct_add(parent->children,room->iota.name,room); + + room->links = NULL; // TODO + room->children = eina_hash_stringshared_new((Eina_Free_Cb)&eiotas_iota_free); + + return room; } void eiotas_room_free(Eiotas_Room *room) { DBG("Room free 0x%X",room); - // TODO + + eiotas_iota_desinit(&room->iota); + // TODO room->links + eina_hash_free(room->children); + + free(room); } |