diff options
author | Matt Turner <[email protected]> | 2014-06-10 00:14:24 -0700 |
---|---|---|
committer | Matt Turner <[email protected]> | 2014-06-10 13:05:50 -0700 |
commit | 47a77ba8398be708a6c69289fe2b060c78639537 (patch) | |
tree | fc0d587914fd49e889a07dfa2aad1a36947bff8a | |
parent | 5f90f2ee5938bc74f6291bf82327d71e42399fec (diff) |
glsl: Add C API for exec_node.
Reviewed-by: Ian Romanick <[email protected]>
-rw-r--r-- | src/glsl/list.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/glsl/list.h b/src/glsl/list.h index 205dc91ef21..ce7f81f4d23 100644 --- a/src/glsl/list.h +++ b/src/glsl/list.h @@ -129,6 +129,88 @@ struct exec_node { #endif }; +static inline const struct exec_node * +exec_node_get_next_const(const struct exec_node *n) +{ + return n->next; +} + +static inline struct exec_node * +exec_node_get_next(struct exec_node *n) +{ + return n->next; +} + +static inline const struct exec_node * +exec_node_get_prev_const(const struct exec_node *n) +{ + return n->prev; +} + +static inline struct exec_node * +exec_node_get_prev(struct exec_node *n) +{ + return n->prev; +} + +static inline void +exec_node_remove(struct exec_node *n) +{ + n->next->prev = n->prev; + n->prev->next = n->next; + n->next = NULL; + n->prev = NULL; +} + +static inline void +exec_node_self_link(struct exec_node *n) +{ + n->next = n; + n->prev = n; +} + +static inline void +exec_node_insert_after(struct exec_node *n, struct exec_node *after) +{ + after->next = n->next; + after->prev = n; + + n->next->prev = after; + n->next = after; +} + +static inline void +exec_node_insert_node_before(struct exec_node *n, struct exec_node *before) +{ + before->next = n; + before->prev = n->prev; + + n->prev->next = before; + n->prev = before; +} + +static inline void +exec_node_replace_with(struct exec_node *n, struct exec_node *replacement) +{ + replacement->prev = n->prev; + replacement->next = n->next; + + n->prev->next = replacement; + n->next->prev = replacement; +} + +static inline bool +exec_node_is_tail_sentinel(const struct exec_node *n) +{ + return n->next == NULL; +} + +static inline bool +exec_node_is_head_sentinel(const struct exec_node *n) +{ + return n->prev == NULL; +} + #ifdef __cplusplus inline const exec_node *exec_node::get_next() const { |