/** * @param hash Hash. * @param keyBytes Key bytes. * @return Value pointer. */ @Nullable IgniteBiTuple<Long, Integer> valuePointer(int hash, byte[] keyBytes) { long binAddr = readLock(hash); try { long addr = Bin.first(binAddr, mem); while (addr != 0) { if (Entry.keyEquals(addr, keyBytes, mem)) { if (lru != null) { long qAddr = Entry.queueAddress(addr, mem); if (qAddr != 0 && Entry.clearQueueAddress(addr, qAddr, mem)) lru.remove(qAddr); } int keyLen = Entry.readKeyLength(addr, mem); int valLen = Entry.readValueLength(addr, mem); return new IgniteBiTuple<>(addr + HEADER_SIZE + keyLen, valLen); } addr = Entry.nextAddress(addr, mem); } return null; } finally { readUnlock(); } }
Entry.queueAddress(addr, qAddr, mem);
qAddr = Entry.queueAddress(cur, mem); relSize = Entry.size(cur, mem); relAddr = cur;
qAddr = Entry.queueAddress(cur, mem); Entry.queueAddress(cur, qAddr, mem); first = next; qAddr = Entry.queueAddress(cur, mem); Entry.queueAddress(cur, qAddr, mem);
long qAddr0 = Entry.queueAddress(cur, mem); long a; assert qAddr == (a = Entry.queueAddress(cur, mem)) : "Queue node address mismatch " + "[qAddr=" + qAddr + ", entryQueueAddr=" + a + ']';
qAddr = Entry.queueAddress(cur, mem); relSize = Entry.size(cur, mem); relAddr = cur;
Entry.queueAddress(addr, qAddr, mem);
/** * @param hash Hash. * @param keyBytes Key bytes. * @return Value pointer. */ @Nullable IgniteBiTuple<Long, Integer> valuePointer(int hash, byte[] keyBytes) { long binAddr = readLock(hash); try { long addr = Bin.first(binAddr, mem); while (addr != 0) { if (Entry.keyEquals(addr, keyBytes, mem)) { if (lru != null) { long qAddr = Entry.queueAddress(addr, mem); if (qAddr != 0 && Entry.clearQueueAddress(addr, qAddr, mem)) lru.remove(qAddr); } int keyLen = Entry.readKeyLength(addr, mem); int valLen = Entry.readValueLength(addr, mem); return new IgniteBiTuple<>(addr + HEADER_SIZE + keyLen, valLen); } addr = Entry.nextAddress(addr, mem); } return null; } finally { readUnlock(); } }
/** * @param hash Hash. * @param keyBytes Key bytes. */ void enableEviction(int hash, byte[] keyBytes) { assert lru != null; long binAddr = writeLock(hash); try { long addr = Bin.first(binAddr, mem); while (addr != 0) { if (Entry.keyEquals(addr, keyBytes, mem)) { long qAddr = Entry.queueAddress(addr, mem); if (qAddr == 0) { qAddr = lru.offer(part, addr, hash); Entry.queueAddress(addr, qAddr, mem); } return; } addr = Entry.nextAddress(addr, mem); } } finally { writeUnlock(); } }
/** * Writes entry. * * @param ptr Pointer. * @param hash Hash. * @param keyBytes Key bytes. * @param valBytes Value bytes. * @param queueAddr Queue address. * @param next Next address. * @param mem Memory. */ static void write(long ptr, int hash, byte[] keyBytes, byte[] valBytes, long queueAddr, long next, GridUnsafeMemory mem) { hash(ptr, hash, mem); writeKeyLength(ptr, keyBytes.length, mem); writeValueLength(ptr, valBytes.length, mem); queueAddress(ptr, queueAddr, mem); nextAddress(ptr, next, mem); writeKeyBytes(ptr, keyBytes, mem); writeValueBytes(ptr, keyBytes.length, valBytes, mem); }
qAddr = Entry.queueAddress(cur, mem); Entry.queueAddress(cur, qAddr, mem); first = next; qAddr = Entry.queueAddress(cur, mem); Entry.queueAddress(cur, qAddr, mem);
long qAddr0 = Entry.queueAddress(cur, mem); long a; assert qAddr == (a = Entry.queueAddress(cur, mem)) : "Queue node address mismatch " + "[qAddr=" + qAddr + ", entryQueueAddr=" + a + ']';
/** * @param hash Hash. * @param keyBytes Key bytes. */ void enableEviction(int hash, byte[] keyBytes) { assert lru != null; long binAddr = writeLock(hash); try { long addr = Bin.first(binAddr, mem); while (addr != 0) { if (Entry.keyEquals(addr, keyBytes, mem)) { long qAddr = Entry.queueAddress(addr, mem); if (qAddr == 0) { qAddr = lru.offer(part, addr, hash); Entry.queueAddress(addr, qAddr, mem); } return; } addr = Entry.nextAddress(addr, mem); } } finally { writeUnlock(); } }
/** * Writes entry. * * @param ptr Pointer. * @param hash Hash. * @param keyBytes Key bytes. * @param valBytes Value bytes. * @param queueAddr Queue address. * @param next Next address. * @param mem Memory. */ static void write(long ptr, int hash, byte[] keyBytes, byte[] valBytes, long queueAddr, long next, GridUnsafeMemory mem) { hash(ptr, hash, mem); writeKeyLength(ptr, keyBytes.length, mem); writeValueLength(ptr, valBytes.length, mem); queueAddress(ptr, queueAddr, mem); nextAddress(ptr, next, mem); writeKeyBytes(ptr, keyBytes, mem); writeValueBytes(ptr, keyBytes.length, valBytes, mem); }