00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "ortp/port.h"
00028 #include "utils.h"
00029
00030 OList *o_list_new(void *data){
00031 OList *new_elem=(OList*)ortp_new0(OList,1);
00032 new_elem->data=data;
00033 return new_elem;
00034 }
00035
00036 OList * o_list_append(OList *elem, void * data){
00037 OList *new_elem=o_list_new(data);
00038 OList *it=elem;
00039 if (elem==NULL) return new_elem;
00040 while (it->next!=NULL) it=o_list_next(it);
00041 it->next=new_elem;
00042 new_elem->prev=it;
00043 return elem;
00044 }
00045
00046 OList * o_list_free(OList *list){
00047 OList *elem = list;
00048 OList *tmp;
00049 return_val_if_fail(list, list);
00050 while(elem->next!=NULL) {
00051 tmp = elem;
00052 elem = elem->next;
00053 ortp_free(tmp);
00054 }
00055 ortp_free(elem);
00056 return NULL;
00057 }
00058
00059 OList *o_list_remove_link(OList *list, OList *elem){
00060 OList *ret;
00061 if (elem==list){
00062 ret=elem->next;
00063 elem->prev=NULL;
00064 elem->next=NULL;
00065 if (ret!=NULL) ret->prev=NULL;
00066 ortp_free(elem);
00067 return ret;
00068 }
00069 elem->prev->next=elem->next;
00070 if (elem->next!=NULL) elem->next->prev=elem->prev;
00071 elem->next=NULL;
00072 elem->prev=NULL;
00073 ortp_free(elem);
00074 return list;
00075 }
00076
00077 OList * o_list_remove(OList *list, void *data){
00078 OList *it;
00079 for(it=list;it!=NULL;it=it->next){
00080 if (it->data==data){
00081 return o_list_remove_link(list,it);
00082 }
00083 }
00084 return list;
00085 }
00086