00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00024 #ifndef COMPS_OBJLIST_H
00025 #define COMPS_OBJLIST_H
00026
00027 #include "comps_obj.h"
00028
00029 #include <string.h>
00030 #include <stdlib.h>
00031
00032 typedef struct COMPS_ObjListIt COMPS_ObjListIt;
00033
00034 struct COMPS_ObjListIt {
00035 COMPS_Object *comps_obj;
00036 COMPS_ObjListIt *next;
00037 } UnfoObjListIt;
00038
00039
00041 typedef struct COMPS_ObjList {
00042 COMPS_Object_HEAD;
00043 COMPS_ObjListIt *first;
00044 COMPS_ObjListIt *last;
00045 size_t len;
00046 } COMPS_ObjList;
00047 COMPS_Object_TAIL(COMPS_ObjList);
00048
00049
00050
00051
00052
00053
00054
00059 void comps_objlist_clear(COMPS_ObjList *objlist);
00060
00061
00062 const COMPS_ObjListIt *comps_objlist_it_next(const COMPS_ObjListIt *it);
00063
00074 int comps_objlist_walk(COMPS_ObjListIt **walker, COMPS_Object **result);
00075
00086 int comps_objlist_walk_r(COMPS_ObjListIt *walker_start,
00087 COMPS_ObjListIt *mantinel,
00088 COMPS_Object **result);
00089
00096 int comps_objlist_append_x(COMPS_ObjList *objlist, COMPS_Object *obj);
00097
00104 int comps_objlist_append(COMPS_ObjList *objlist, COMPS_Object *obj);
00105
00113 COMPS_Object* comps_objlist_get(COMPS_ObjList *objlist, unsigned int atpos);
00114
00126 int comps_objlist_set(COMPS_ObjList *objlist, unsigned int atpos,
00127 COMPS_Object *obj);
00128
00136 COMPS_Object* comps_objlist_get_x(COMPS_ObjList *objlist, unsigned int atpos);
00137
00149 int comps_objlist_insert_at(COMPS_ObjList *objlist,
00150 unsigned int pos,
00151 COMPS_Object *obj);
00152
00153 int comps_objlist_insert_at_x(COMPS_ObjList *objlist,
00154 unsigned int pos,
00155 COMPS_Object *obj);
00156
00166 int comps_objlist_remove_at(COMPS_ObjList *objlist, unsigned int atpos);
00167
00177 int comps_objlist_remove(COMPS_ObjList *objlist, COMPS_Object *obj);
00178
00179
00180 int comps_objlist_index(COMPS_ObjList *objlist, COMPS_Object *obj);
00181
00192 COMPS_ObjList* comps_objlist_sublist_it(COMPS_ObjListIt *startit,
00193 COMPS_ObjListIt *end);
00194
00203 COMPS_ObjList* comps_objlist_filter(COMPS_ObjList *list,
00204 char (*filter_func)(COMPS_Object*));
00205
00206 void comps_objlist_concat_in(COMPS_ObjList *list1, COMPS_ObjList *list2);
00207
00208
00209
00210 #endif