package it.cavallium.strangedb.database; import it.cavallium.strangedb.BlockInfo; import java.io.IOException; import java.nio.ByteBuffer; import static it.cavallium.strangedb.database.IBlocksMetadata.EMPTY_BLOCK_ID; public class DatabaseBlocksIO implements IBlocksIO { private final DatabaseFileIO fileIO; private final IBlocksMetadata blocksMetadata; public DatabaseBlocksIO(DatabaseFileIO fileIO, IBlocksMetadata blocksMetadata) { this.fileIO = fileIO; this.blocksMetadata = blocksMetadata; } @Override public long newBlock(int size, ByteBuffer data) throws IOException { if (size == 0) { return EMPTY_BLOCK_ID; } long index = fileIO.writeAtEnd(size, data); return blocksMetadata.newBlock(index, size); } @Override public ByteBuffer readBlock(long blockId) throws IOException { if (blockId == EMPTY_BLOCK_ID) { return ByteBuffer.wrap(new byte[0]); } BlockInfo blockInfo = blocksMetadata.getBlockInfo(blockId); return fileIO.readAt(blockInfo.getIndex(), blockInfo.getSize()); } @Override public void close() { } }