lrulist.java
来自「NMS jdbm」· Java 代码 · 共 125 行
JAVA
125 行
// Developed by Kinva Network Inc. 2000
// Source File Name: jdbm.java
package com.kinva.util.jdbm;
import java.io.IOException;
// Referenced classes of package com.kinva.util.jdbm:
// LRUEntry, jdbm, jdbmBucket
class LRUList
{
synchronized void removeEntry(LRUEntry lruentry)
{
if(lruentry == head)
{
head = lruentry.next;
lruentry.next = null;
lruentry.prev = null;
if(tail == lruentry)
{
tail = null;
return;
}
} else
{
if(lruentry == tail)
{
tail = lruentry.prev;
tail.next = null;
lruentry.next = null;
lruentry.prev = null;
return;
}
lruentry.prev.next = lruentry.next;
lruentry.next.prev = lruentry.prev;
lruentry.next = null;
lruentry.prev = null;
}
}
private final synchronized void atTop(LRUEntry lruentry)
{
if(lruentry == head)
{
return;
} else
{
removeEntry(lruentry);
lruentry.next = head;
lruentry.prev = null;
head.prev = lruentry;
head = lruentry;
return;
}
}
protected final void notifyUses(LRUEntry lruentry)
{
atTop(lruentry);
}
protected LRUEntry getLRU()
{
LRUEntry lruentry = tail;
if(lruentry != null)
removeEntry(lruentry);
return lruentry;
}
protected synchronized LRUEntry addEntry(jdbmBucket jdbmbucket)
{
LRUEntry lruentry = new LRUEntry(jdbmbucket);
lruentry.next = head;
if(head != null)
head.prev = lruentry;
lruentry.prev = null;
head = lruentry;
if(tail == null)
tail = head;
return lruentry;
}
protected synchronized void removeBucket(jdbmBucket jdbmbucket)
{
for(LRUEntry lruentry = head; lruentry != null; lruentry = lruentry.next)
if(lruentry.bucket == jdbmbucket)
{
removeEntry(lruentry);
return;
}
}
protected synchronized LRUEntry lookupBucket(int i)
{
for(LRUEntry lruentry = head; lruentry != null; lruentry = lruentry.next)
if(lruentry.bucket.fileptr == i)
return lruentry;
return null;
}
protected synchronized void saveModified(jdbm jdbm1)
throws IOException
{
for(LRUEntry lruentry = head; lruentry != null; lruentry = lruentry.next)
if(lruentry.bucket.modified)
jdbm1.saveBucket(lruentry.bucket);
}
LRUList()
{
head = null;
tail = null;
}
LRUEntry head;
LRUEntry tail;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?