qobjectblockiterator.java

来自「cwbbs 云网论坛源码」· Java 代码 · 共 172 行

JAVA
172
字号
package com.cloudwebsoft.framework.base;import org.apache.log4j.Logger;import java.util.Iterator;public class QObjectBlockIterator implements Iterator {    public Logger logger = Logger.getLogger(this.getClass().getName());    QObjectDb qObject;    private Object[] infoBlock;    private int blockID;    private int blockStart;    private String query;    private int startIndex;    private int currentIndex;    private int endIndex;    private String groupName;    private Object previousElement = null;    private Object nextElement = null;        public QObjectBlockIterator(QObjectDb qObject, Object[] block, String query,                                String groupName,                                int startIndex, int endIndex) {        this.qObject = qObject;        this.infoBlock = block;        this.blockID = startIndex / qObject.getTable().getBlockSize();        this.blockStart = blockID * qObject.getTable().getBlockSize();        this.query = query;        this.currentIndex = startIndex - 1;        this.startIndex = startIndex;        this.endIndex = endIndex;        this.groupName = groupName;    }    public void remove() {}    public boolean hasNext() {                if (currentIndex == endIndex) {            return false;        }                                if (nextElement == null) {            nextElement = getNextElement();                        if (nextElement == null) {                return false;            }        }        return true;    }    public boolean hasPrevious() {                if (currentIndex == startIndex) {            return false;        }                        if (previousElement == null) {            previousElement = getPreviousElement();                        if (previousElement == null) {                return false;            }        }        return true;    }    public Object next() throws java.util.NoSuchElementException {        Object element = null;        if (nextElement != null) {            element = nextElement;            this.nextElement = null;        } else {            element = getNextElement();            if (element == null) {                throw new java.util.NoSuchElementException();            }        }                return element;    }    public Object previous() {        Object element = null;        if (previousElement != null) {            element = previousElement;            previousElement = null;        } else {            element = getPreviousElement();            if (element == null) {                throw new java.util.NoSuchElementException();            }        }        return element;    }        private Object getNextElement() {        previousElement = null;        Object element = null;        if (endIndex != Integer.MAX_VALUE) {             while (currentIndex + 1 < endIndex && element == null) {                currentIndex++;                element = getElement(currentIndex);                            }        } else {             if (currentIndex + 1 < endIndex) {                currentIndex++;                element = getElement(currentIndex);            }        }                return element;    }        private Object getPreviousElement() {        nextElement = null;        Object element = null;        while (currentIndex >= startIndex && element == null) {            currentIndex--;            element = getElement(currentIndex);        }        return element;    }        private Object getElement(int index) {                if (index < 0) {            return null;        }                        if (index < blockStart ||            index >= blockStart + qObject.getTable().getBlockSize()) {                        this.infoBlock = qObject.getQObjectBlock(query, groupName, index);            this.blockID = index / qObject.getTable().getBlockSize();            this.blockStart = blockID * qObject.getTable().getBlockSize();        }        Object element = null;                        int relativeIndex = index % qObject.getTable().getBlockSize();                if (relativeIndex < infoBlock.length) {            element = qObject.getQObjectDb(infoBlock[relativeIndex]);                    }        return element;    }        public void beforeFirst() {        currentIndex = startIndex - 1;        previousElement = null;        nextElement = null;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?