public boolean isFixedLength() { return binarySerializer.isFixedLength(); }
public <K, V> int length(Map<K, V> map, OBinarySerializer<K> keySerializer, OBinarySerializer<V> valueSerializer) { final int mapSize = map.size(); int length = OIntegerSerializer.INT_SIZE; assert keySerializer.isFixedLength(); length += mapSize * keySerializer.getFixedLength(); assert valueSerializer.isFixedLength(); length += mapSize * valueSerializer.getFixedLength(); return length; }
public <K, V> int length(Map<K, V> map, OBinarySerializer<K> keySerializer, OBinarySerializer<V> valueSerializer) { int mapSize = map.size(); int length = OIntegerSerializer.INT_SIZE; assert keySerializer.isFixedLength(); length += mapSize * keySerializer.getFixedLength(); assert valueSerializer.isFixedLength(); length += mapSize * valueSerializer.getFixedLength(); return length; } }
public int updateValue(int index, V value) throws IOException { assert valueSerializer.isFixedLength(); int entryPosition = getIntValue(offset + index * OIntegerSerializer.INT_SIZE + POSITIONS_ARRAY_OFFSET); entryPosition += getObjectSizeInDirectMemory(keySerializer, offset + entryPosition); final int size = valueSerializer.getFixedLength(); byte[] serializedValue = new byte[size]; valueSerializer.serializeNativeObject(value, serializedValue, 0); byte[] oldSerializedValue = getBinaryValue(offset + entryPosition, size); if (ODefaultComparator.INSTANCE.compare(oldSerializedValue, serializedValue) == 0) return 0; setBinaryValue(offset + entryPosition, serializedValue); return 1; }
public void remove(int entryIndex) throws IOException { int entryPosition = getIntValue(offset + POSITIONS_ARRAY_OFFSET + entryIndex * OIntegerSerializer.INT_SIZE); int entrySize = getObjectSizeInDirectMemory(keySerializer, offset + entryPosition); if (isLeaf) { assert valueSerializer.isFixedLength(); entrySize += valueSerializer.getFixedLength(); } else { throw new IllegalStateException("Remove is applies to leaf buckets only"); } int size = size(); if (entryIndex < size - 1) { moveData(offset + POSITIONS_ARRAY_OFFSET + (entryIndex + 1) * OIntegerSerializer.INT_SIZE, offset + POSITIONS_ARRAY_OFFSET + entryIndex * OIntegerSerializer.INT_SIZE, (size - entryIndex - 1) * OIntegerSerializer.INT_SIZE); } size--; setIntValue(offset + SIZE_OFFSET, size); int freePointer = getIntValue(offset + FREE_POINTER_OFFSET); if (size > 0 && entryPosition > freePointer) { moveData(offset + freePointer, offset + freePointer + entrySize, entryPosition - freePointer); } setIntValue(offset + FREE_POINTER_OFFSET, freePointer + entrySize); int currentPositionOffset = offset + POSITIONS_ARRAY_OFFSET; for (int i = 0; i < size; i++) { int currentEntryPosition = getIntValue(currentPositionOffset); if (currentEntryPosition < entryPosition) setIntValue(currentPositionOffset, currentEntryPosition + entrySize); currentPositionOffset += OIntegerSerializer.INT_SIZE; } }
if (valueSerializer.isFixedLength()) { entrySize = keySize + valueSerializer.getFixedLength() + OByteSerializer.BYTE_SIZE; } else {
if (valueSerializer.isFixedLength()) { entrySize = keySize + valueSerializer.getFixedLength() + OByteSerializer.BYTE_SIZE; } else {
if (valueSerializer.isFixedLength()) { valueSize = valueSerializer.getFixedLength(); } else {
assert valueSerializer.isFixedLength(); valueSize = valueSerializer.getFixedLength();
if (valueSerializer.isFixedLength()) valueSize = valueSerializer.getFixedLength(); else {