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 + -
显示快捷键?