/**
 * LOGICAL-PARADOX.ORG variable record manager library
 * Copyright (C)2004 satoshi akabane(akabane@logical-paradox.org)
 *
 * Release 1.0
 * ・初期パージョン
 */
package org.logical_paradox.common.vrm;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.logical_paradox.common.io.MemoryMappedRandomAccessFile;
import org.logical_paradox.common.vrm.VRMAvailableList;

/**
 * メモリ上で実行可能なVRMAvailableList
 * テスト用の実装
 * 
 * @author satoshi akabane@logical-paradox.org
 * @version 1.0
 */
public class VRMAvailableListMoc extends VRMAvailableList {
	private MemoryMappedRandomAccessFile file = new MemoryMappedRandomAccessFile();

	public VRMAvailableListMoc(String filename) {
		super(filename);
	}
	public VRMAvailableListMoc(String filename, int size) {
		super(filename, size);
	}
	// 出力ストリームを返す
	protected OutputStream getOutputStream() throws IOException {
		// 出力ストリームを開くごとに，いちいち新しいファイルを用意する
		// 上書きをエミュレーションするため
		file = new MemoryMappedRandomAccessFile();
		return file.getOutputStream();
	}
	// 入力ストリームを返す
	protected InputStream getInputStream() throws IOException {
		if(file == null) {
			file = new MemoryMappedRandomAccessFile();
		}
		file.seek(0);
		return file.getInputStream();
	}
	/**
	 * 断片化ファイルのファイルサイズを返す
	 * @return ファイルサイズ
	 * @throws IOException 断片化ファイルにアクセスできなかった
	 */
	protected long getFileSize() throws IOException {
		return file == null ? 0 : file.length();
	}
}
