]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/cfs/lru.c
audiohda: fix syntax error
[plan9front.git] / sys / src / cmd / cfs / lru.c
1 /*
2  *  lru lists are circular with a list head
3  *  pointing to the start and end of the list
4  */
5 #include <u.h>
6 #include "lru.h"
7
8 /*
9  *  Create an lru chain of buffers
10  */
11 void
12 lruinit(Lru *h)
13 {
14         h->lprev = h->lnext = h;
15 }
16
17 /*
18  *  Add a member to an lru chain
19  */
20 void
21 lruadd(Lru *h, Lru *m)
22 {
23         h->lprev->lnext = m;
24         m->lprev = h->lprev;
25         h->lprev = m;
26         m->lnext = h;
27 }
28
29 /*
30  *  Move to end of lru list
31  */
32 void
33 lruref(Lru *h, Lru *m)
34 {
35         if(h->lprev == m)
36                 return;         /* alread at end of list */
37
38         /*
39          *  remove from list
40          */
41         m->lprev->lnext = m->lnext;
42         m->lnext->lprev = m->lprev;
43
44         /*
45          *  add in at end
46          */
47         h->lprev->lnext = m;
48         m->lprev = h->lprev;
49         h->lprev = m;
50         m->lnext = h;
51 }
52
53 /*
54  *  Move to head of lru list
55  */
56 void
57 lruderef(Lru *h, Lru *m)
58 {
59         if(h->lnext == m)
60                 return;         /* alread at head of list */
61
62         /*
63          *  remove from list
64          */
65         m->lprev->lnext = m->lnext;
66         m->lnext->lprev = m->lprev;
67
68         /*
69          *  add in at head
70          */
71         h->lnext->lprev = m;
72         m->lnext = h->lnext;
73         h->lnext = m;
74         m->lprev = h;
75 }