summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Turner <[email protected]>2014-06-10 00:14:24 -0700
committerMatt Turner <[email protected]>2014-06-10 13:05:50 -0700
commit47a77ba8398be708a6c69289fe2b060c78639537 (patch)
treefc0d587914fd49e889a07dfa2aad1a36947bff8a
parent5f90f2ee5938bc74f6291bf82327d71e42399fec (diff)
glsl: Add C API for exec_node.
Reviewed-by: Ian Romanick <[email protected]>
-rw-r--r--src/glsl/list.h82
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
{