Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
}