exec_list: Add a prepend function.

This complements the existing append function. It's implemented in a
rather simple way right now; it could be changed if performance is a
concern.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Connor Abbott <connor.abbott@intel.com>
This commit is contained in:
Connor Abbott 2014-07-08 12:20:58 -07:00 committed by Matt Turner
parent 9a723b970e
commit 28c4fd4bc6
1 changed files with 19 additions and 1 deletions

View File

@ -345,9 +345,15 @@ struct exec_list {
void move_nodes_to(exec_list *target);
/**
* Append all nodes from the source list to the target list
* Append all nodes from the source list to the end of the target list
*/
void append_list(exec_list *source);
/**
* Prepend all nodes from the source list to the beginning of the target
* list
*/
void prepend_list(exec_list *source);
#endif
};
@ -478,6 +484,13 @@ exec_list_append(struct exec_list *list, struct exec_list *source)
exec_list_make_empty(source);
}
static inline void
exec_list_prepend(struct exec_list *list, struct exec_list *source)
{
exec_list_append(source, list);
exec_list_move_nodes_to(source, list);
}
static inline void
exec_node_insert_list_before(struct exec_node *n, struct exec_list *before)
{
@ -554,6 +567,11 @@ inline void exec_list::append_list(exec_list *source)
exec_list_append(this, source);
}
inline void exec_list::prepend_list(exec_list *source)
{
exec_list_prepend(this, source);
}
inline void exec_node::insert_before(exec_list *before)
{
exec_node_insert_list_before(this, before);