Minor cleanups in list implementation:
- Reconcile lam_list_item base class string debugging name - Use NULL instead of 0 - Ensure to decrement list length in remove_first() - Protect function prototypes from C++ munging - Add lam_list_get_begin() to be symmetrical with lam_list_get_end() This commit was SVN r497.
Этот коммит содержится в:
родитель
095ac4525e
Коммит
b9c2371df6
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
lam_class_info_t lam_list_item_cls = {"lam_list_link_item_t", &lam_object_cls,
|
lam_class_info_t lam_list_item_cls = {"lam_list_item_t", &lam_object_cls,
|
||||||
(class_init_t) lam_list_item_init, (class_destroy_t)lam_obj_destroy};
|
(class_init_t) lam_list_item_init, (class_destroy_t)lam_obj_destroy};
|
||||||
lam_class_info_t lam_list_cls = {"lam_list_t", &lam_object_cls,
|
lam_class_info_t lam_list_cls = {"lam_list_t", &lam_object_cls,
|
||||||
(class_init_t)lam_list_init, (class_destroy_t)lam_list_destroy};
|
(class_init_t)lam_list_init, (class_destroy_t)lam_list_destroy};
|
||||||
@ -24,7 +24,7 @@ lam_class_info_t lam_list_cls = {"lam_list_t", &lam_object_cls,
|
|||||||
void lam_list_item_init(lam_list_item_t *item)
|
void lam_list_item_init(lam_list_item_t *item)
|
||||||
{
|
{
|
||||||
SUPER_INIT(item, lam_list_item_cls.cls_parent);
|
SUPER_INIT(item, lam_list_item_cls.cls_parent);
|
||||||
item->lam_list_next = item->lam_list_prev = 0;
|
item->lam_list_next = item->lam_list_prev = NULL;
|
||||||
item->lam_list_type = 0;
|
item->lam_list_type = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,14 +38,15 @@ void lam_list_item_init(lam_list_item_t *item)
|
|||||||
void lam_list_init(lam_list_t *list)
|
void lam_list_init(lam_list_t *list)
|
||||||
{
|
{
|
||||||
SUPER_INIT(list, lam_list_cls.cls_parent);
|
SUPER_INIT(list, lam_list_cls.cls_parent);
|
||||||
list->lam_list_head.lam_list_next=&(list->lam_list_tail);
|
list->lam_list_head.lam_list_prev = NULL;
|
||||||
list->lam_list_head.lam_list_prev=(lam_list_item_t *)NULL;
|
list->lam_list_head.lam_list_next = &list->lam_list_tail;
|
||||||
list->lam_list_tail.lam_list_prev=(lam_list_item_t *)NULL;
|
list->lam_list_tail.lam_list_prev = &list->lam_list_head;
|
||||||
list->lam_list_tail.lam_list_prev=&(list->lam_list_head);
|
list->lam_list_tail.lam_list_next = NULL;
|
||||||
list->lam_list_type = 0;
|
list->lam_list_type = 0;
|
||||||
list->lam_list_length = 0;
|
list->lam_list_length = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void lam_list_destroy(lam_list_t *list)
|
void lam_list_destroy(lam_list_t *list)
|
||||||
{
|
{
|
||||||
/* release all items in list */
|
/* release all items in list */
|
||||||
@ -53,7 +54,6 @@ void lam_list_destroy(lam_list_t *list)
|
|||||||
SUPER_DESTROY(list, lam_list_cls.cls_parent);
|
SUPER_DESTROY(list, lam_list_cls.cls_parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds item to the end of the list.
|
* Adds item to the end of the list.
|
||||||
@ -65,7 +65,6 @@ void lam_list_destroy(lam_list_t *list)
|
|||||||
*/
|
*/
|
||||||
void lam_list_append(lam_list_t *list, lam_list_item_t *item)
|
void lam_list_append(lam_list_t *list, lam_list_item_t *item)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* set new element's previous pointer */
|
/* set new element's previous pointer */
|
||||||
item->lam_list_prev=list->lam_list_tail.lam_list_prev;
|
item->lam_list_prev=list->lam_list_tail.lam_list_prev;
|
||||||
|
|
||||||
@ -148,6 +147,9 @@ lam_list_item_t *lam_list_remove_first(lam_list_t *list)
|
|||||||
if ( 0 == list->lam_list_length )
|
if ( 0 == list->lam_list_length )
|
||||||
return (lam_list_item_t *)NULL;
|
return (lam_list_item_t *)NULL;
|
||||||
|
|
||||||
|
/* reset list length counter */
|
||||||
|
list->lam_list_length--;
|
||||||
|
|
||||||
/* get pointer to first element on the list */
|
/* get pointer to first element on the list */
|
||||||
item = list->lam_list_head.lam_list_next;
|
item = list->lam_list_head.lam_list_next;
|
||||||
|
|
||||||
|
@ -34,8 +34,14 @@ typedef struct lam_list_item
|
|||||||
struct lam_list_item *lam_list_prev;
|
struct lam_list_item *lam_list_prev;
|
||||||
} lam_list_item_t;
|
} lam_list_item_t;
|
||||||
|
|
||||||
void lam_list_item_init(lam_list_item_t *item);
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
void lam_list_item_destroy(lam_list_item_t *item);
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
void lam_list_item_init(lam_list_item_t *item);
|
||||||
|
void lam_list_item_destroy(lam_list_item_t *item);
|
||||||
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#define lam_list_get_next(item) \
|
#define lam_list_get_next(item) \
|
||||||
((item) ? (((lam_list_item_t*)(item))->lam_list_next) : 0)
|
((item) ? (((lam_list_item_t*)(item))->lam_list_next) : 0)
|
||||||
@ -54,13 +60,19 @@ typedef struct lam_list
|
|||||||
lam_object_t super;
|
lam_object_t super;
|
||||||
lam_list_item_t lam_list_head;
|
lam_list_item_t lam_list_head;
|
||||||
lam_list_item_t lam_list_tail;
|
lam_list_item_t lam_list_tail;
|
||||||
lam_list_type_t lam_list_type;
|
lam_list_type_t lam_list_type;
|
||||||
volatile size_t lam_list_length;
|
volatile size_t lam_list_length;
|
||||||
} lam_list_t;
|
} lam_list_t;
|
||||||
|
|
||||||
|
|
||||||
void lam_list_init(lam_list_t *list);
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
void lam_list_destroy(lam_list_t *list);
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
void lam_list_init(lam_list_t *list);
|
||||||
|
void lam_list_destroy(lam_list_t *list);
|
||||||
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Inlined accessor functions
|
* Inlined accessor functions
|
||||||
@ -102,6 +114,14 @@ static inline lam_list_item_t* lam_list_get_last(lam_list_t* list)
|
|||||||
return list->lam_list_tail.lam_list_prev;
|
return list->lam_list_tail.lam_list_prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns beginning of list, an invalid list entry.
|
||||||
|
*/
|
||||||
|
static inline lam_list_item_t* lam_list_get_begin(lam_list_t* list)
|
||||||
|
{
|
||||||
|
return &(list->lam_list_head);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns end of list, an invalid list entry.
|
* Returns end of list, an invalid list entry.
|
||||||
*/
|
*/
|
||||||
@ -152,42 +172,47 @@ static inline lam_list_item_t *lam_list_remove_item
|
|||||||
return item->lam_list_prev;
|
return item->lam_list_prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
* Adds item to the end of the list but does not retain item.
|
extern "C" {
|
||||||
*/
|
#endif
|
||||||
void lam_list_append(lam_list_t *list, lam_list_item_t *item);
|
/*
|
||||||
|
* Adds item to the end of the list but does not retain item.
|
||||||
|
*/
|
||||||
|
void lam_list_append(lam_list_t *list, lam_list_item_t *item);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Remove item from the list.
|
* Remove item from the list.
|
||||||
*/
|
*/
|
||||||
lam_list_item_t* lam_list_remove(lam_list_t *list, lam_list_item_t *item);
|
lam_list_item_t* lam_list_remove(lam_list_t *list, lam_list_item_t *item);
|
||||||
|
|
||||||
/* Adds item to list at index and retains item.
|
/* Adds item to list at index and retains item.
|
||||||
Returns 1 if successful, 0 otherwise.
|
Returns 1 if successful, 0 otherwise.
|
||||||
0 <= idx < length_m
|
0 <= idx < length_m
|
||||||
Example: if idx = 2 and list = item1->item2->item3->item4, then
|
Example: if idx = 2 and list = item1->item2->item3->item4, then
|
||||||
after insert, list = item1->item2->item->item3->item4
|
after insert, list = item1->item2->item->item3->item4
|
||||||
*/
|
*/
|
||||||
int lam_list_insert(lam_list_t *list, lam_list_item_t *item, long long idx);
|
int lam_list_insert(lam_list_t *list, lam_list_item_t *item, long long idx);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Adds item to the front of the list and retains item.
|
* Adds item to the front of the list and retains item.
|
||||||
*/
|
*/
|
||||||
|
void lam_list_prepend(lam_list_t *list, lam_list_item_t *item);
|
||||||
void lam_list_prepend(lam_list_t *list, lam_list_item_t *item);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Removes and returns first item on list.
|
* Removes and returns first item on list.
|
||||||
*/
|
*/
|
||||||
lam_list_item_t *lam_list_remove_first(lam_list_t *list);
|
lam_list_item_t *lam_list_remove_first(lam_list_t *list);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Removes and returns last item on list.
|
* Removes and returns last item on list.
|
||||||
*/
|
*/
|
||||||
lam_list_item_t *lam_list_remove_last(lam_list_t *list);
|
lam_list_item_t *lam_list_remove_last(lam_list_t *list);
|
||||||
|
#if defined(c_plusplus) || defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* LAM_LIST_H */
|
#endif /* LAM_LIST_H */
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user