Fix libogc hardware lighting (GX_SetChanCtrl) - patch from https://sourceforge.net...
[libogc.git] / libogc / lwp_queue.inl
blob9c6c318553c7757c932281ba1a08e4e2702ac51a
1 #ifndef __LWP_QUEUE_INL__
2 #define __LWP_QUEUE_INL__
4 static __inline__ lwp_node* __lwp_queue_head(lwp_queue *queue)
6         return (lwp_node*)queue;
9 static __inline__ lwp_node* __lwp_queue_tail(lwp_queue *queue)
11         return (lwp_node*)&queue->perm_null;
14 static __inline__ u32 __lwp_queue_istail(lwp_queue *queue,lwp_node *node)
16         return (node==__lwp_queue_tail(queue));
19 static __inline__ u32 __lwp_queue_ishead(lwp_queue *queue,lwp_node *node)
21         return (node==__lwp_queue_head(queue));
24 static __inline__ lwp_node* __lwp_queue_firstnodeI(lwp_queue *queue)
26         lwp_node *ret;
27         lwp_node *new_first;
28 #ifdef _LWPQ_DEBUG
29         printk("__lwp_queue_firstnodeI(%p)\n",queue);
30 #endif
32         ret = queue->first;
33         new_first = ret->next;
34         queue->first = new_first;
35         new_first->prev = __lwp_queue_head(queue);
36         return ret;
39 static __inline__ void __lwp_queue_init_empty(lwp_queue *queue)
41         queue->first = __lwp_queue_tail(queue);
42         queue->perm_null = NULL;
43         queue->last = __lwp_queue_head(queue);
46 static __inline__ u32 __lwp_queue_isempty(lwp_queue *queue)
48         return (queue->first==__lwp_queue_tail(queue));
51 static __inline__ u32 __lwp_queue_onenode(lwp_queue *queue)
53         return (queue->first==queue->last);
56 static __inline__ void __lwp_queue_appendI(lwp_queue *queue,lwp_node *node)
58         lwp_node *old;
59 #ifdef _LWPQ_DEBUG
60         printk("__lwp_queue_appendI(%p,%p)\n",queue,node);
61 #endif
62         node->next = __lwp_queue_tail(queue);
63         old = queue->last;
64         queue->last = node;
65         old->next = node;
66         node->prev = old;
69 static __inline__ void __lwp_queue_extractI(lwp_node *node)
71 #ifdef _LWPQ_DEBUG
72         printk("__lwp_queue_extractI(%p)\n",node);
73 #endif
74         lwp_node *prev,*next;
75         next = node->next;
76         prev = node->prev;
77         next->prev = prev;
78         prev->next = next;
81 static __inline__ void __lwp_queue_insertI(lwp_node *after,lwp_node *node)
83         lwp_node *before;
84         
85 #ifdef _LWPQ_DEBUG
86         printk("__lwp_queue_insertI(%p,%p)\n",after,node);
87 #endif
88         node->prev = after;
89         before = after->next;
90         after->next = node;
91         node->next = before;
92         before->prev = node;
95 static __inline__ void __lwp_queue_prepend(lwp_queue *queue,lwp_node *node)
97         __lwp_queue_insert(__lwp_queue_head(queue),node);
100 static __inline__ void __lwp_queue_prependI(lwp_queue *queue,lwp_node *node)
102         __lwp_queue_insertI(__lwp_queue_head(queue),node);
105 static __inline__ lwp_node* __lwp_queue_getI(lwp_queue *queue)
107         if(!__lwp_queue_isempty(queue))
108                 return __lwp_queue_firstnodeI(queue);
109         else
110                 return NULL;
113 #endif