From c44556317abf77ca6e344c79d119c91bebe25c8c Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Wed, 7 Jul 2010 12:12:48 -0700 Subject: exec_list: Add method to append one complete list to another --- src/glsl/list.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/glsl/list.h') diff --git a/src/glsl/list.h b/src/glsl/list.h index d449bdd8b1..b5a413dc51 100644 --- a/src/glsl/list.h +++ b/src/glsl/list.h @@ -385,6 +385,30 @@ struct exec_list { } } + /** + * Append all nodes from the source list to the target list + */ + void + append_list(exec_list *source) + { + if (source->is_empty()) + return; + + /* Link the first node of the source with the last node of the target list. + */ + this->tail_pred->next = source->head; + source->head->prev = this->tail_pred; + + /* Make the tail of the source list be the tail of the target list. + */ + this->tail_pred = source->tail_pred; + this->tail_pred->next = (exec_node *) &this->tail; + + /* Make the source list empty for good measure. + */ + source->make_empty(); + } + exec_list_iterator iterator() { return exec_list_iterator(head); -- cgit v1.2.3