/*
 * $Id: SysStat.java,v 1.4 1999/09/14 18:00:20 yamauchi Exp $
 *     (M\pi)^2 : (M\pi)^2 Option
 *	Copyright 1999 By YAMAUCHI Hitoshi 山内 斉 
 *	@author YAMAUCHI Hitoshi 山内 斉
 *
 * 	SysStat  : 並列計算を行う際の system status : size, rank など
 *
 * original source Option.h
 * 
 * 1999年8月 1日(日)
 */

package jp.ac.tohoku.is.archi.mpi2.sysparam;

import jp.ac.tohoku.is.archi.mpi2.util.Assert;

/**
 * system stat
 */
public final class SysStat {
    /*
     * singleton pattern
     */
    private static SysStat mSingleSysStat;
    public  static SysStat getInstance() 
    {
	if(mSingleSysStat == null)
	{
	    mSingleSysStat = new SysStat();
	}
	return(mSingleSysStat);
    }

    private int mCommSize;		// このタスクの大きさ
    private int mMyRank;		// 自分のランク
    private int mHostRank;		// host のランク
    
    private SysStat()
    {
	this.mCommSize 	= -1;
	this.mMyRank	= -1;
	this.mHostRank	= -1;
    }

    /**
     * set size : initialize
     */
    public void setCommSize(int commSize)
    {
	Assert.out(commSize > 1, "Comm size must be > 0");
	this.mCommSize = commSize;
    }

    /**
     * get size
     */
    public int  getCommSize()  	
    {
	return(this.mCommSize);	
    }

    /**
     * set my rank : initialize once
     */
    public void setMyRank(int aMyRank)
    {
	Assert.out(aMyRank >= 0, "Myrank  must be >= 0");	
	this.mMyRank = aMyRank;
    }

    /**
     * get my rank
     */
    public int  getMyRank() 	
    {
	return(this.mMyRank);	
    }


    /**
     * set host rank
     */
    public void setHostRank(int aHostRank)
    {
	// host rank は最後の rankで PE数 > 0から 0 
	Assert.out(aHostRank > 0, "Hostrank must be > 0");
	this.mHostRank = aHostRank; // の hostrank はなくそれ以上になる
    }

    /**
     * get host rank
     */
    public int  getHostRank() 	
    {
	return(this.mHostRank);	
    }
}
