private static long objectToAddress(@Unretained Object v) { if (v instanceof Chunk) return ((Chunk) v).getMemoryAddress(); if (v instanceof DataAsAddress) return ((DataAsAddress) v).getEncodedAddress(); if (v == null) return NULL_ADDRESS; if (v == Token.TOMBSTONE) return TOMBSTONE_ADDRESS; if (v == Token.INVALID) return INVALID_ADDRESS; if (v == Token.LOCAL_INVALID) return LOCAL_INVALID_ADDRESS; if (v == Token.DESTROYED) return DESTROYED_ADDRESS; if (v == Token.REMOVED_PHASE1) return REMOVED_PHASE1_ADDRESS; if (v == Token.REMOVED_PHASE2) return REMOVED_PHASE2_ADDRESS; if (v == Token.END_OF_STREAM) return END_OF_STREAM_ADDRESS; if (v == Token.NOT_AVAILABLE) return NOT_AVAILABLE_ADDRESS; throw new IllegalStateException("Can not convert " + v + " to an off heap address."); }
/** * Get the value bytes that can be used in {@link CompactCompositeIndexKey} * from an existing table row value. */ public final Object getLocalIndexKeyValueBytes(Object value) { final Class<?> cls = value.getClass(); if (cls == byte[].class) { return value; } else if (cls == byte[][].class) { return ((byte[][])value)[0]; } else if (OffHeapByteSource.isOffHeapBytesClass(cls)) { return value; } else if (cls == DataAsAddress.class) { return OffHeapRegionEntryHelper.encodedAddressToObject( ((DataAsAddress)value).getEncodedAddress(), false, true); } return null; }
/** * Get the value bytes that can be used in {@link CompactCompositeIndexKey} * from an existing table row value. */ public final Object getLocalIndexKeyValueBytes(Object value) { final Class<?> cls = value.getClass(); if (cls == byte[].class) { return value; } else if (cls == byte[][].class) { return ((byte[][])value)[0]; } else if (OffHeapByteSource.isOffHeapBytesClass(cls)) { return value; } else if (cls == DataAsAddress.class) { return OffHeapRegionEntryHelper.encodedAddressToObject( ((DataAsAddress)value).getEncodedAddress(), false, true); } return null; }
address = ((DataAsAddress) storedObject).getEncodedAddress(); } else { address = ((OffHeapRow) storedObject).getMemoryAddress();
address = ((DataAsAddress) storedObject).getEncodedAddress(); } else { address = ((OffHeapRow) storedObject).getMemoryAddress();
address = ((DataAsAddress) storedObject).getEncodedAddress(); } else { address = ((OffHeapRow) storedObject).getMemoryAddress();
((DataAsAddress)oldValue).getEncodedAddress()); final ExtraTableInfo rowInfo = tableInfo.getExtraTableInfo(rowBytes); return rowInfo.getRowFormatter().generateColumns(rowBytes,
((DataAsAddress)oldValue).getEncodedAddress()); final ExtraTableInfo rowInfo = tableInfo.getExtraTableInfo(rowBytes); return rowInfo.getRowFormatter().generateColumns(rowBytes,
address = ((DataAsAddress) storedObject).getEncodedAddress(); } else { address = ((OffHeapRow) storedObject).getMemoryAddress();
address = ((DataAsAddress) storedObject).getEncodedAddress(); } else { address = ((OffHeapRow) storedObject).getMemoryAddress();
address = ((DataAsAddress) storedObject).getEncodedAddress(); } else { address = ((OffHeapRow) storedObject).getMemoryAddress();
address = ((DataAsAddress) storedObject).getEncodedAddress(); } else { address = ((OffHeapRow) storedObject).getMemoryAddress();
/** * @return possible OFF_HEAP_OBJECT (caller must release) */ @Retained public static Object convertOffHeapEntrytoByteSourceRetain( RegionEntry offheap, LocalRegion rgn, boolean faultIn, boolean useValueInVMOnly) { @Retained Object obj = null; if (useValueInVMOnly) { obj = offheap.getValueInVM(null); } else { if (faultIn) { obj = offheap.getValue(rgn); } else { obj = offheap.getValueOffHeapOrDiskWithoutFaultIn(rgn); } } if (!isValueToken(obj)) { if (!(obj instanceof DataAsAddress)) { return obj; } else { return encodedAddressToObject(((DataAsAddress)obj).getEncodedAddress()); } } return null; }
/** * @return possible OFF_HEAP_OBJECT (caller must release) */ @Retained public static Object convertOffHeapEntrytoByteSourceRetain( RegionEntry offheap, LocalRegion rgn, boolean faultIn, boolean useValueInVMOnly) { @Retained Object obj = null; if (useValueInVMOnly) { obj = offheap.getValueInVM(null); } else { if (faultIn) { obj = offheap.getValue(rgn); } else { obj = offheap.getValueOffHeapOrDiskWithoutFaultIn(rgn); } } if (!isValueToken(obj)) { if (!(obj instanceof DataAsAddress)) { return obj; } else { return encodedAddressToObject(((DataAsAddress)obj).getEncodedAddress()); } } return null; }
address = ((DataAsAddress) storedObject).getEncodedAddress(); } else { address = ((OffHeapRow) storedObject).getMemoryAddress();
/** * @return possible OFF_HEAP_OBJECT (caller must release) */ @Retained public static Object convertOffHeapEntrytoByteSourceRetain( RegionEntry offheap, LocalRegion rgn, boolean faultIn, boolean useValueInVMOnly) { @Retained Object obj = null; if (useValueInVMOnly) { obj = offheap.getValueInVM(null); } else { if (faultIn) { obj = offheap.getValue(rgn); } else { obj = offheap.getValueOffHeapOrDiskWithoutFaultIn(rgn); } } if (!isValueToken(obj)) { if (!(obj instanceof DataAsAddress)) { return obj; } else { return encodedAddressToObject(((DataAsAddress)obj).getEncodedAddress()); } } return null; }
/** * Get the value bytes that can be used in {@link CompactCompositeIndexKey} * from an existing table row value. */ public final Object getLocalIndexKeyValueBytes(Object value) { final Class<?> cls = value.getClass(); if (cls == byte[].class) { return value; } else if (cls == byte[][].class) { return ((byte[][])value)[0]; } else if (OffHeapByteSource.isOffHeapBytesClass(cls)) { return value; } else if (cls == DataAsAddress.class) { return OffHeapRegionEntryHelper.encodedAddressToObject( ((DataAsAddress)value).getEncodedAddress(), false, true); } return null; }
public static int getSerializedLengthFromDataAsAddress(DataAsAddress dataAsAddress) { final long ohAddress = dataAsAddress.getEncodedAddress(); if ((ohAddress & ENCODED_BIT) != 0) { boolean isLong = (ohAddress & LONG_BIT) != 0; if (isLong) { return 9; } else { return (int) ((ohAddress & SIZE_MASK) >> SIZE_SHIFT); } } else { return 0; } }
@Override public boolean equals(Object o) { if (o instanceof DataAsAddress) { return getEncodedAddress() == ((DataAsAddress) o).getEncodedAddress(); } return false; }
@Override public int hashCode() { long value = getEncodedAddress(); return (int)(value ^ (value >>> 32)); }