/*
 * $Id: ObjNumInASpc.java,v 1.4 1999/09/08 16:09:12 yamauchi Exp $
 *     (M\pi)^2 : number of objects in a space
 *	Copyright 1999 By YAMAUCHI Hitoshi 山内 斉 
 *	@author YAMAUCHI Hitoshi 山内 斉
 *	
 * original source objectInfoInASpace.h
 *
 *	ある空間中の物体の数を示す．
 * 
 * 1999年8月 9日(月)
 */

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

/**
 * ある一つの空間に存在する物体の情報
 * 	数を数えるもの(host で利用)
 */
public final class ObjNumInASpc implements ObjInASpc {
    private int mGeoNum;
    private int mVolNum;		// volumeReader.cc ではスライス数

    public ObjNumInASpc()
    {
	this.mGeoNum = 0;
	this.mVolNum = 0;
    }
    public ObjNumInASpc(ObjNumInASpc rhs)
    {
	this.mGeoNum = rhs.mGeoNum;
	this.mVolNum = rhs.mVolNum;
    }

    /**
     * 物体が存在すれば true
     */
    public boolean isObj()		
    {
	if((this.mGeoNum > 0) || (this.mVolNum > 0))
	{
	    return(true);
	}else
	{
	    return(false);
	}
    }

    public String toString()
    {
	return(this.mGeoNum + "\t" + this.mVolNum);
    }

    /**
     * pretty print 部分空間にどのように物体があるかを見るためのもの
     */
    public String getVisualOutDescription() 
    {
	return(" [P]olygon, [V]olume, [B]oth");
    }

    public String toVisualString() 
    {
	// ここでは Polygon があれば P, Volume なら V, 両方なら B を返す
	if((this.mGeoNum > 0) && (this.mVolNum > 0))
	{
	    return("B");
	}
	else if(this.mGeoNum > 0)
	{
	    return("P");
	}
	else if(this.mVolNum > 0)
	{
	    return("V");	    
	}
	else
	{
	    return(" ");	    	    
	}
    }

    public void incGeoNum()
    {
	this.mGeoNum++;
    }
    public void incVolNum()
    {
	this.mVolNum++;
    }

//      *----------------------------------------
//      * SerializableIF : double の表現が同じ計算機でないと上手くいかない    
//      *----------------------------------------
//     int getSerializedSize() 
//     {
// 	return(2);
//     }
//     double *newSerializedArray()
//     {
// 	double *r = new double[this.getSerializedSize()];
// 	r[0] = this.mGeoNum;
// 	r[1] = this.mVolNum;
// 	return(r);
//     }
//     void deserialize(double *pBuf)
//     {
// 	this.mGeoNum = (int)(pBuf[0]);
// 	this.mVolNum = (int)(pBuf[1]);
//     }

    /**
     * compare
     */
    public boolean equals(Object obj)
    {
	if(obj instanceof ObjNumInASpc)
	{
	    ObjNumInASpc rhs = (ObjNumInASpc)obj;
	    return((this.mGeoNum == rhs.mGeoNum) && 
		   (this.mVolNum == rhs.mVolNum));
	}else
	{
	    return(false);
	}
    }

    /**
     * translate to existance info
     */
    public ObjExistanceInASpc newObjExistanceInASpc()
    {
	ObjExistanceInASpc oeias = new ObjExistanceInASpc();
	oeias.set(this.mGeoNum, this.mVolNum);
	return(oeias);
    }

    /**
     * test 
     */
    public static void main(String [] args)
    {
	ObjNumInASpc onias = new ObjNumInASpc();
	System.out.println(onias);
    } 
}
