package org.wonderdb.file;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousFileChannel;
import java.util.concurrent.Future;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.wonderdb.cache.CacheDestinationWriter;
import org.wonderdb.types.BlockPtr;
public class FileCacheWriter implements CacheDestinationWriter<BlockPtr, ChannelBuffer> {
@Override
public ChannelBuffer copy(BlockPtr ptr, ChannelBuffer data) {
ChannelBuffer wrapped = ChannelBuffers.wrappedBuffer(data);
wrapped.clear();
wrapped.writerIndex(wrapped.capacity());
ChannelBuffer b = ChannelBuffers.copiedBuffer(wrapped);
return b;
// data.clear();
// data.writerIndex(data.capacity());
// ChannelBuffer b = ChannelBuffers.copiedBuffer(data);
// b.clear();
// b.writerIndex(b.capacity());
// buffer = b.toByteBuffer();
}
@Override
public Future<Integer> write(BlockPtr p, ChannelBuffer data) {
AsynchronousFileChannel channel = null;
data.clear();
data.writerIndex(data.capacity());
ByteBuffer buf = data.toByteBuffer();
channel = FilePointerFactory.getInstance().getAsyncChannel(p.getFileId());
return channel.write(buf, p.getBlockPosn());
}
}