u_blitter: use user buffers instead of real buffers
[mesa.git] / src / gallium / auxiliary / util / u_double_list.h
index 8cb10c98206e11114606460158422d3d1294039c..42adb1f069996ee8c989a1671edf2ce4638d00b8 100644 (file)
@@ -70,6 +70,14 @@ struct list_head
     (__list)->prev = (__item);                 \
   } while(0)
 
+#define LIST_REPLACE(__from, __to)             \
+  do {                                         \
+    (__to)->prev = (__from)->prev;             \
+    (__to)->next = (__from)->next;             \
+    (__from)->next->prev = (__to);             \
+    (__from)->prev->next = (__to);             \
+  } while (0)
+
 #define LIST_DEL(__item)                       \
   do {                                         \
     (__item)->prev->next = (__item)->next;     \
@@ -87,5 +95,23 @@ struct list_head
 #define LIST_ENTRY(__type, __item, __field)   \
     ((__type *)(((char *)(__item)) - offsetof(__type, __field)))
 
+#define LIST_IS_EMPTY(__list)                   \
+    ((__list)->next == (__list))
+
+#ifndef container_of
+#define container_of(ptr, sample, member)                              \
+    (void *)((char *)(ptr)                                             \
+            - ((char *)&(sample)->member - (char *)(sample)))
+#endif
+
+#define LIST_FOR_EACH_ENTRY(pos, head, member)                         \
+   for (pos = container_of((head)->next, pos, member);                 \
+       &pos->member != (head);                                         \
+       pos = container_of(pos->member.next, pos, member))
 
+#define LIST_FOR_EACH_ENTRY_SAFE(pos, storage, head, member)   \
+   for (pos = container_of((head)->next, pos, member),                 \
+       storage = container_of(pos->member.next, pos, member);  \
+       &pos->member != (head);                                         \
+       pos = storage, storage = container_of(storage->member.next, storage, member))
 #endif /*_U_DOUBLE_LIST_H_*/