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

📄 btreekey.java

📁 这个是perst-269.zip下面的SOURCECODE,和大家分享了。
💻 JAVA
字号:
package org.garret.perst.impl;
import  org.garret.perst.*;

class BtreeKey { 
    Key key;
    int oid;
    int oldOid;

    BtreeKey(Key key, int oid) { 
        this.key = key;
        this.oid = oid;
    }

    final void getStr(Page pg, int i) { 
        int len = BtreePage.getKeyStrSize(pg, i);
        int offs = BtreePage.firstKeyOffs + BtreePage.getKeyStrOffs(pg, i);
        char[] sval = new char[len];
        for (int j = 0; j < len; j++) { 
            sval[j] = (char)Bytes.unpack2(pg.data, offs);
            offs += 2;
        }
        key = new Key(sval);
    }

    final void getByteArray(Page pg, int i) { 
        int len = BtreePage.getKeyStrSize(pg, i);
        int offs = BtreePage.firstKeyOffs + BtreePage.getKeyStrOffs(pg, i);
        byte[] bval = new byte[len];
        System.arraycopy(pg.data, offs, bval, 0, len);
        key = new Key(bval);
    }


    final void extract(Page pg, int offs, int type) { 
        byte[] data = pg.data;

        switch (type) {
          case ClassDescriptor.tpBoolean:
            key = new Key(data[offs] != 0);
            break;
          case ClassDescriptor.tpByte:
            key = new Key(data[offs]);
            break;
          case ClassDescriptor.tpShort:
            key = new Key(Bytes.unpack2(data, offs));
            break;
          case ClassDescriptor.tpChar:
            key = new Key((char)Bytes.unpack2(data, offs));
            break;
          case ClassDescriptor.tpInt:
          case ClassDescriptor.tpObject:
          case ClassDescriptor.tpEnum:
            key = new Key(Bytes.unpack4(data, offs));
            break;
          case ClassDescriptor.tpLong:
          case ClassDescriptor.tpDate:
            key = new Key(Bytes.unpack8(data, offs));
            break;
          case ClassDescriptor.tpFloat:
            key = new Key(Float.intBitsToFloat(Bytes.unpack4(data, offs)));
            break;
          case ClassDescriptor.tpDouble:
            key = new Key(Double.longBitsToDouble(Bytes.unpack8(data, offs)));
            break;
          default:
            Assert.failed("Invalid type");
        }
    } 
    
    final void pack(Page pg, int i) { 
        byte[] dst = pg.data;
        switch (key.type) { 
          case ClassDescriptor.tpBoolean:
          case ClassDescriptor.tpByte:
            dst[BtreePage.firstKeyOffs + i] = (byte)key.ival;
            break;
          case ClassDescriptor.tpShort:
          case ClassDescriptor.tpChar:
            Bytes.pack2(dst, BtreePage.firstKeyOffs + i*2, (short)key.ival);
            break;
          case ClassDescriptor.tpInt:
          case ClassDescriptor.tpObject:
          case ClassDescriptor.tpEnum:
            Bytes.pack4(dst, BtreePage.firstKeyOffs + i*4, key.ival);
            break;
          case ClassDescriptor.tpLong:
          case ClassDescriptor.tpDate:
            Bytes.pack8(dst, BtreePage.firstKeyOffs + i*8,  key.lval);
            break;
          case ClassDescriptor.tpFloat:
            Bytes.pack4(dst, BtreePage.firstKeyOffs + i*4, Float.floatToIntBits((float)key.dval));
            break;
          case ClassDescriptor.tpDouble:
            Bytes.pack8(dst, BtreePage.firstKeyOffs + i*8, Double.doubleToLongBits(key.dval));
            break;
          default:
            Assert.failed("Invalid type");
        }
        Bytes.pack4(dst, BtreePage.firstKeyOffs + (BtreePage.maxItems - i - 1)*4, oid);
    }
}

⌨️ 快捷键说明

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