/** * @param pageAddr Page address. * @return Stored items count. */ private int getCount(long pageAddr) { return PageUtils.getShort(pageAddr, CNT_OFF); }
/** * @param pageAddr Page address. * @return Items count in the page. */ public final int getCount(long pageAddr) { int cnt = PageUtils.getShort(pageAddr, CNT_OFF) & 0xFFFF; assert cnt >= 0: cnt; return cnt; }
/** * @param pageAddr Page address. * @return Entry data offset. */ private int getFirstEntryOffset(long pageAddr) { return PageUtils.getShort(pageAddr, FIRST_ENTRY_OFF) & 0xFFFF; }
/** * @param pageAddr Page address. * @param dataOff Data offset. * @return {@code true} If the data row is fragmented across multiple pages. */ protected boolean isFragmented(long pageAddr, int dataOff) { return (PageUtils.getShort(pageAddr, dataOff) & FRAGMENTED_FLAG) != 0; }
/** * @param pageAddr Page address. * @return Stored items count. */ private int getCount(long pageAddr) { return PageUtils.getShort(pageAddr, CNT_OFF); }
/** * Gets total count of entries in this page. Does not change the buffer state. * * @param pageAddr Page address to get count from. * @return Total number of entries. */ public int getCount(long pageAddr) { return PageUtils.getShort(pageAddr, CNT_OFF); }
/** * @param pageAddr Page address. * @return Page type. */ public static int getType(long pageAddr) { return PageUtils.getShort(pageAddr, TYPE_OFF) & 0xFFFF; }
/** * Equivalent for {@link #actualFreeSpace(long, int)} but reads saved value. * * @param pageAddr Page address. * @return Free space. */ public int getRealFreeSpace(long pageAddr) { return PageUtils.getShort(pageAddr, FREE_SPACE_OFF); }
/** * @param pageAddr Page address. * @return Version. */ public static int getVersion(long pageAddr) { return PageUtils.getShort(pageAddr, VER_OFF) & 0xFFFF; }
/** * @param pageAddr Page address. * @param off Offset. * @return {@code True} if string is not truncated on save. */ protected boolean isValueFull(long pageAddr, int off) { switch (type) { case Value.BOOLEAN: case Value.BYTE: case Value.INT: case Value.SHORT: case Value.LONG: return true; case Value.STRING: case Value.STRING_FIXED: case Value.STRING_IGNORECASE: case Value.BYTES: case Value.JAVA_OBJECT: return (PageUtils.getShort(pageAddr, off + 1) & 0x8000) == 0; default: throw new UnsupportedOperationException("no get operation for fast index type " + type); } }
/** * @param pageAddr Page address. * @param idx Item index. * @return Item. */ private short getItem(long pageAddr, int idx) { return PageUtils.getShort(pageAddr, itemOffset(idx)); }
/** * @param pageAddr Page address. */ public int getInlineSize(long pageAddr) { return getVersion() > 1 ? PageUtils.getShort(pageAddr, inlineSizeOff) : 0; }
/** {@inheritDoc} */ @Override public short getKeySize(long pageAddr, int idx) { return PageUtils.getShort(pageAddr, offset(idx) + 8); }
/** Read variable length bytearray */ private static byte[] readBytes(long pageAddr, int off) { int size = PageUtils.getShort(pageAddr, off + 1) & 0x7FFF; return PageUtils.getBytes(pageAddr, off + 3, size); }
/** {@inheritDoc} */ @Override public short getKeySize(long pageAddr, int idx) { return PageUtils.getShort(pageAddr, offset(idx) + 8); }
/** * @param pageAddr Page address. * @param off Offset. * @return Full size in page. */ public int fullSize(long pageAddr, int off) { int type = PageUtils.getByte(pageAddr, off); if (type == Value.NULL) return 1; if (size > 0) return size + 1; else return PageUtils.getShort(pageAddr, off + 1) + 3; }
/** * @param pageAddr Page address. * @param dataOff Data offset. * @param show What elements of data page entry to show in the result. * @return Data page entry size. */ private int getPageEntrySize(long pageAddr, int dataOff, int show) { int payloadLen = PageUtils.getShort(pageAddr, dataOff) & 0xFFFF; if ((payloadLen & FRAGMENTED_FLAG) != 0) payloadLen &= ~FRAGMENTED_FLAG; // We are fragmented and have a link. else show &= ~SHOW_LINK; // We are not fragmented, never have a link. return getPageEntrySize(payloadLen, show); }
/** {@inheritDoc} */ @Override public String getKey(long pageAddr, int idx) { int len = PageUtils.getShort(pageAddr, offset(idx) + 8); byte[] bytes = PageUtils.getBytes(pageAddr, offset(idx) + 10, len); return new String(bytes); } }
/** {@inheritDoc} */ @Override public String getKey(long pageAddr, int idx) { int len = PageUtils.getShort(pageAddr, offset(idx) + 8); byte[] bytes = PageUtils.getBytes(pageAddr, offset(idx) + 10, len); return new String(bytes); } }
/** * @param pageAddr Page address. * @param res Results map. */ public void getBucketsData(long pageAddr, Map<Integer, GridLongList> res) { int cnt = getCount(pageAddr); assert cnt >= 0 && cnt <= Short.MAX_VALUE : cnt; if (cnt == 0) return; int off = offset(0); for (int i = 0; i < cnt; i++) { int bucket = (int)PageUtils.getShort(pageAddr, off); assert bucket >= 0 && bucket <= Short.MAX_VALUE : bucket; long tailId = PageUtils.getLong(pageAddr, off + 2); assert tailId != 0; GridLongList list = res.get(bucket); if (list == null) res.put(bucket, list = new GridLongList()); list.add(tailId); off += ITEM_SIZE; } }