Changeset 30eab78 in mainline
- Timestamp:
- 2017-06-27T17:14:57Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 39b0a51
- Parents:
- b76ce3f
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/adt/list.c
rb76ce3f r30eab78 69 69 70 70 /** Moves items of one list into another after the specified item. 71 * 72 * Inserts all items of @a list after item at @a pos in another list. 73 * Both lists may be empty. 74 * 71 * 72 * Inserts all items of @a list after item at @a pos in another list. 73 * Both lists may be empty. 74 * 75 75 * @param list Source list to move after pos. Empty afterwards. 76 76 * @param pos Source items will be placed after this item. -
uspace/lib/c/generic/adt/list.c
rb76ce3f r30eab78 69 69 } 70 70 71 /** Concatenate two lists71 /** Moves items of one list into another after the specified item. 72 72 * 73 * Concatenate lists @a list1 and @a list2, producing a single 74 * list @a list1 containing items from both (in @a list1, @a list2 75 * order) and empty list @a list2. 73 * Inserts all items of @a list after item at @a pos in another list. 74 * Both lists may be empty. 76 75 * 77 * @param list1 First list and concatenated output 78 * @param list2 Second list and empty output. 79 * 76 * @param list Source list to move after pos. Empty afterwards. 77 * @param pos Source items will be placed after this item. 80 78 */ 81 void list_ concat(list_t *list1, list_t *list2)79 void list_splice(list_t *list, link_t *pos) 82 80 { 83 if (list_empty(list 2))81 if (list_empty(list)) 84 82 return; 85 86 list2->head.next->prev = list1->head.prev; 87 list2->head.prev->next = &list1->head; 88 list1->head.prev->next = list2->head.next; 89 list1->head.prev = list2->head.prev; 90 list_initialize(list2); 83 84 /* Attach list to destination. */ 85 list->head.next->prev = pos; 86 list->head.prev->next = pos->next; 87 88 /* Link destination list to the added list. */ 89 pos->next->prev = list->head.prev; 90 pos->next = list->head.next; 91 92 list_initialize(list); 91 93 } 92 94 -
uspace/lib/c/include/adt/list.h
rb76ce3f r30eab78 54 54 55 55 extern bool list_member(const link_t *, const list_t *); 56 extern void list_ concat(list_t *, list_t *);56 extern void list_splice(list_t *, link_t *); 57 57 extern unsigned long list_count(const list_t *); 58 58 … … 351 351 } 352 352 353 /** Concatenate two lists 354 * 355 * Concatenate lists @a list1 and @a list2, producing a single 356 * list @a list1 containing items from both (in @a list1, @a list2 357 * order) and empty list @a list2. 358 * 359 * @param list1 First list and concatenated output 360 * @param list2 Second list and empty output. 361 * 362 */ 363 NO_TRACE static inline void list_concat(list_t *list1, list_t *list2) 364 { 365 list_splice(list2, list1->head.prev); 366 } 367 353 368 /** Get n-th item in a list. 354 369 * … … 399 414 } 400 415 401 402 416 #endif 403 417
Note:
See TracChangeset
for help on using the changeset viewer.