/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: RecordSet.java,v 1.2 2005/09/07 13:38:06 rampil Exp $
 */
package org.logical_paradox.vsan.node.dbr;

import java.io.Serializable;

import org.logical_paradox.common.util.StringUtils;

/**
 * レコード範囲クラス
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public class RecordSet implements Serializable {
	/** 管理しているレコードの範囲(開始) */
	private final long recordBegin;
	/** 管理しているレコードの範囲(終了) */
	private final long recordEnd;
	/** 管理しているレコードのサイズ */
	private final int recordSize;

	public RecordSet(long recordBegin_, long recordEnd_, int recordSize_) {
		recordBegin = recordBegin_;
		recordEnd = recordEnd_;
		recordSize = recordSize_;
	}
	/**
	 * 指定されたレコード番号を、このレコードセットが含むかどうかを返す
	 * @param rno 検査対象レコード番号
	 * @return true:含む / false:含まない
	 */
	public boolean includes(long rno) {
		return getRecordBegin() <= rno && getRecordEnd() >= rno;
	}
	/**
	 * レコード範囲(開始)を返す
	 * @return レコード範囲(開始)
	 */
	public long getRecordBegin() {
		return recordBegin;
	}
	/**
	 * レコード範囲(終了)を返す
	 * @return レコード範囲(終了)
	 */
	public long getRecordEnd() {
		return recordEnd;
	}
	/**
	 * レコードサイズを返す
	 * @return レコードサイズ
	 */
	public int getRecordSize() {
		return recordSize;
	}
	/**
	 * このレコードセットが占有するデータサイズを返す．
	 * @return 占有データサイズ
	 */
	public long getSize() {
		return (recordEnd - recordBegin) * recordSize;
	}
	/**
	 * このレコードセットの文字列表現を返す。
	 * @return レコードの文字列表現
	 */
	public String toString() {
		return StringUtils.formatColumns(getRecordBegin(), 10) + "_" + StringUtils.formatColumns(getRecordEnd(), 10);
	}
}
