diff -r 8eed495fd8da -r 15f722e0b96f project_files/frontlib/model/roomlist.c --- a/project_files/frontlib/model/roomlist.c Mon Jun 25 15:21:18 2012 +0200 +++ b/project_files/frontlib/model/roomlist.c Wed Jun 27 18:02:45 2012 +0200 @@ -11,7 +11,7 @@ return flib_calloc(1, sizeof(flib_roomlist)); } -static void flib_roomlist_room_destroy(flib_roomlist_room *room) { +static void flib_roomlist_room_destroy(flib_room *room) { if(room) { free(room->map); free(room->name); @@ -27,13 +27,14 @@ for(int i=0; iroomCount; i++) { flib_roomlist_room_destroy(list->rooms[i]); } + free(list->rooms); free(list); } } -static flib_roomlist_room *fillRoomFromParams(char **params) { - flib_roomlist_room *result = NULL; - flib_roomlist_room *tmpRoom = flib_calloc(1, sizeof(flib_roomlist_room)); +static flib_room *fillRoomFromParams(char **params) { + flib_room *result = NULL; + flib_room *tmpRoom = flib_calloc(1, sizeof(flib_room)); if(tmpRoom) { tmpRoom->inProgress = !strcmp(params[0], "True"); tmpRoom->name = flib_strdupnull(params[1]); @@ -52,16 +53,26 @@ return result; } +GENERATE_STATIC_LIST_INSERT(insertRoom, flib_room*) +GENERATE_STATIC_LIST_DELETE(deleteRoom, flib_room*) + +static int findRoom(const flib_roomlist *list, const char *name) { + for(int i=0; iroomCount; i++) { + if(!strcmp(name, list->rooms[i]->name)) { + return i; + } + } + return -1; +} + int flib_roomlist_add(flib_roomlist *list, char **params) { int result = -1; if(!list || !params) { flib_log_e("null parameter in flib_roomlist_add"); } else { - flib_roomlist_room *tmpRoom = fillRoomFromParams(params); + flib_room *tmpRoom = fillRoomFromParams(params); if(tmpRoom) { - flib_roomlist_room **rooms = flib_list_insert(list->rooms, &list->roomCount, sizeof(*list->rooms), &tmpRoom, 0); - if(rooms) { - list->rooms = rooms; + if(!insertRoom(&list->rooms, &list->roomCount, tmpRoom, 0)) { tmpRoom = NULL; result = 0; } @@ -71,13 +82,23 @@ return result; } -static int findRoom(flib_roomlist *list, const char *name) { - for(int i=0; iroomCount; i++) { - if(!strcmp(name, list->rooms[i]->name)) { - return i; +int flib_roomlist_delete(flib_roomlist *list, const char *name) { + int result = -1; + if(!list || !name) { + flib_log_e("null parameter in flib_roomlist_delete"); + } else { + int roomid = findRoom(list, name); + if(roomid<0) { + flib_log_w("Attempt to delete unknown room %s", name); + } else { + flib_room *room = list->rooms[roomid]; + if(!deleteRoom(&list->rooms, &list->roomCount, roomid)) { + flib_roomlist_room_destroy(room); + result = 0; + } } } - return -1; + return result; } int flib_roomlist_update(flib_roomlist *list, const char *name, char **params) { @@ -85,7 +106,7 @@ if(!list || !name || !params) { flib_log_e("null parameter in flib_roomlist_update"); } else { - flib_roomlist_room *tmpRoom = fillRoomFromParams(params); + flib_room *tmpRoom = fillRoomFromParams(params); int roomid = findRoom(list, name); if(tmpRoom && roomid>=0) { flib_roomlist_room_destroy(list->rooms[roomid]); @@ -98,8 +119,8 @@ return result; } -flib_roomlist_room *flib_roomlist_find(flib_roomlist *list, const char *name) { - flib_roomlist_room *result = NULL; +flib_room *flib_roomlist_find(const flib_roomlist *list, const char *name) { + flib_room *result = NULL; if(!list || !name) { flib_log_e("null parameter in flib_roomlist_find"); } else { @@ -123,24 +144,3 @@ list->roomCount = 0; } } - -int flib_roomlist_delete(flib_roomlist *list, const char *name) { - int result = -1; - if(!list || !name) { - flib_log_e("null parameter in flib_roomlist_delete"); - } else { - int roomid = findRoom(list, name); - if(roomid<0) { - flib_log_w("Attempt to delete unknown room %s", name); - } else { - flib_roomlist_room *room = list->rooms[roomid]; - flib_roomlist_room **rooms = flib_list_delete(list->rooms, &list->roomCount, sizeof(*list->rooms), roomid); - if(rooms || list->roomCount==0) { - list->rooms = rooms; - flib_roomlist_room_destroy(room); - result = 0; - } - } - } - return result; -}