⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objectblockiterator.java

📁 cwbbs 云网论坛源码
💻 JAVA
字号:
package cn.js.fan.base;import org.apache.log4j.Logger;import java.util.Iterator;import cn.js.fan.db.PrimaryKey;import cn.js.fan.db.KeyUnit;import java.util.HashMap;public class ObjectBlockIterator implements Iterator {  public Logger logger = Logger.getLogger(this.getClass().getName());  ObjectDb objectDb;  private Object[] infoBlock;  private int blockID;  private int blockStart;  private String query;  private int startIndex;  private int currentIndex;  private int endIndex;  private Object previousElement = null;  private Object nextElement = null;    public ObjectBlockIterator(ObjectDb objectDb, Object[] block, String query,                              int startIndex, int endIndex) {    this.objectDb = objectDb;    this.infoBlock = block;    this.blockID = startIndex / objectDb.getBlockSize();    this.blockStart = blockID * objectDb.getBlockSize();    this.query = query;    this.currentIndex = startIndex - 1;    this.startIndex = startIndex;    this.endIndex = endIndex;  }  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 + objectDb.getBlockSize()) {            this.infoBlock = objectDb.getObjectBlock(query, index);      this.blockID = index / objectDb.getBlockSize();      this.blockStart = blockID * objectDb.getBlockSize();    }    Object element = null;            int relativeIndex = index % objectDb.getBlockSize();        if (relativeIndex < infoBlock.length) {      element = objectDb.getObjectDb(infoBlock[relativeIndex]);          }    return element;  }  public void setIndex(ObjectDb obj) {                  nextElement = null;      previousElement = null;            Object[] currentBlock;      for (int i = startIndex; i < endIndex; i++) {          currentBlock = obj.getObjectBlock(query, i);          if (currentBlock.length == 0) {                                      }          int blockID = i / obj.getBlockSize();          int blockEnd = blockID * obj.getBlockSize() +                         obj.getBlockSize();                    if (startIndex < blockEnd) {                                          for (int j = startIndex % obj.getBlockSize();                           j < currentBlock.length; j++, i++) {                  if (comparePrimarKey(obj.getPrimaryKey(), currentBlock[j])) {                      this.currentIndex = i;                      return;                  }              }          }                    else {              for (int j = 0; j < currentBlock.length; j++, i++) {                  if (comparePrimarKey(obj.getPrimaryKey(), currentBlock[j])) {                      this.currentIndex = i;                      return;                  }              }          }      }  }    public boolean comparePrimarKey(PrimaryKey primaryKey, Object objKey) {            if (primaryKey.getKeyCount() == 1) {          if (primaryKey.getType() == primaryKey.TYPE_LONG)              return primaryKey.getLongValue()==((Long)objKey).longValue();          else if (primaryKey.getType() == primaryKey.TYPE_INT)              return primaryKey.getIntValue()==((Integer)objKey).intValue();          else if (primaryKey.getType() == primaryKey.TYPE_STRING)              return primaryKey.getStrValue().equals(((String)objKey));      } else if (primaryKey.getType() == primaryKey.TYPE_COMPOUND) {           HashMap keys = primaryKey.getKeys();          Iterator ir = keys.keySet().iterator();          HashMap ks = (HashMap)objKey;          while (ir.hasNext()) {              String keyName = (String) ir.next();              KeyUnit ku = (KeyUnit) keys.get(keyName);              KeyUnit ku2 = (KeyUnit)ks.get(keyName);              if (ku2==null)                  throw new IllegalArgumentException("The key " + keyName + " is not exists in Primary");              return ku.getValue().equals(ku2.getValue());          }      }      return false;  }}

⌨️ 快捷键说明

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