package edu.uci.ics.hyracks.dataflow.common.io;

import java.nio.ByteBuffer;

import edu.uci.ics.hyracks.api.comm.IFrameReader;
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
import edu.uci.ics.hyracks.api.io.FileReference;
import edu.uci.ics.hyracks.api.io.IFileHandle;
import edu.uci.ics.hyracks.api.io.IIOManager;

public class RunFileReader implements IFrameReader {
    private final FileReference file;
    private final IIOManager ioManager;
    private final long size;

    private IFileHandle handle;
    private long readPtr;

    public RunFileReader(FileReference file, IIOManager ioManager, long size) {
        this.file = file;
        this.ioManager = ioManager;
        this.size = size;
    }

    @Override
    public void open() throws HyracksDataException {
        handle = ioManager.open(file, IIOManager.FileReadWriteMode.READ_ONLY, null);
        readPtr = 0;
    }

    @Override
    public boolean nextFrame(ByteBuffer buffer) throws HyracksDataException {
        buffer.clear();
        if (readPtr >= size) {
            return false;
        }
        readPtr += ioManager.syncRead(handle, readPtr, buffer);
        return true;
    }

    @Override
    public void close() throws HyracksDataException {
        ioManager.close(handle);
    }

    public long getFileSize() {
        return size;
    }
}