Changeset c14762e in mainline for kernel/generic/include/adt/list.h
- Timestamp:
- 2012-07-12T16:43:38Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e8471b9
- Parents:
- 2e16033
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/adt/list.h
r2e16033 rc14762e 51 51 } list_t; 52 52 53 54 extern int list_member(const link_t *, const list_t *); 55 extern void list_splice(list_t *, link_t *); 56 extern unsigned int list_count(const list_t *); 57 58 53 59 /** Declare and initialize statically allocated list. 54 60 * … … 301 307 } 302 308 303 /** Moves items of one list into another after the specified item. 304 * 305 * Inserts all items of @a list after item at @a pos in another list. 306 * Both lists may be empty. 307 * 308 * @param list Source list to move after pos. 309 * @param pos Source items will be placed after this item. 310 */ 311 NO_TRACE static inline void list_splice(list_t *list, link_t *pos) 312 { 313 link_t *pos_next = pos->next; 314 315 if (!list_empty(list)) { 316 link_t *first = list->head.next; 317 link_t *last = list->head.prev; 318 319 pos->next = first; 320 first->prev = pos; 321 322 last->next = pos_next; 323 pos_next->prev = last; 324 325 list_initialize(list); 326 } 327 } 328 329 /** Moves all items of list @a src to the end of list @a dest. 330 * 331 * Both lists may be empty. 332 * 333 * @param src Source list to move. Becomes empty. 334 * @param dest Items of src will be inserted at the end of this list, ie 335 * after all items of src. 336 */ 337 NO_TRACE static inline void list_append_list(list_t *src, list_t *dest) 338 { 339 list_splice(src, dest->head.prev); 340 } 341 342 /** Moves all items of list @a src to the beginning of list @a dest. 343 * 344 * Both lists may be empty. 345 * 346 * @param src Source list to move. Becomes empty. 347 * @param dest Items of src will be inserted at the beginning of this list. 348 */ 349 NO_TRACE static inline void list_prepend_list(list_t *src, list_t *dest) 350 { 351 list_splice(src, &dest->head); 309 /** Concatenate two lists 310 * 311 * Concatenate lists @a list1 and @a list2, producing a single 312 * list @a list1 containing items from both (in @a list1, @a list2 313 * order) and empty list @a list2. 314 * 315 * @param list1 First list and concatenated output 316 * @param list2 Second list and empty output. 317 * 318 */ 319 NO_TRACE static inline void list_concat(list_t *list1, list_t *list2) 320 { 321 list_splice(list2, list1->head.prev); 352 322 } 353 323 … … 375 345 } 376 346 377 extern int list_member(const link_t *, const list_t *);378 extern void list_concat(list_t *, list_t *);379 extern unsigned int list_count(const list_t *);380 381 347 #endif 382 348
Note:
See TracChangeset
for help on using the changeset viewer.