// (c) Copyright 1997 Peter Sandborn ALL RIGHTS RESERVED


//------------------------------------------------------------------------------
// dataCompMember.java:
//
//------------------------------------------------------------------------------


public class dataCompMember
{
	//private int rows = 50;  // maximum number of runs
	private int type;               // 1 = int, 2 = double, 3 = choice
	private double dvalue;			// double value
	private int ivalue;				// integer value
	private String svalue;			// String (choice) value
	private int dist;               // Distribution type
	private double dvalue_low;      // Low distribution value
	private double dvalue_high;     // High distribution value
	private double dvalue_sd;		// Standard deviation value

    // Constructors
    dataCompMember() {}

	public dataCompMember(int t)
	{
		type = t;
	}
	
	public dataCompMember(int t,double dv,int iv,String s,int d,double dvl,double dvh,double dvsd)
	{
		type = t;
		dvalue = dv;
		ivalue = iv;
		svalue = s;
		dist = d;
		dvalue_low = dvl;
		dvalue_high = dvh;
		dvalue_sd = dvsd;
	}
	
	public void setallvalues(int t,double dv,int iv,String s,int d,double dvl,double dvh,double dvsd)
	{
		type = t;
		dvalue = dv;
		ivalue = iv;
		svalue = s;
		dist = d;
		dvalue_low = dvl;
		dvalue_high = dvh;
		dvalue_sd = dvsd;
		
		return;
	}

	public boolean setivalue(int x)
	{
		ivalue = x;
		return(true);
	}

	public boolean setdvalue(double x)
	{
		dvalue = x;
		return(true);
	}

	public boolean setsvalue(String x)
	{
		svalue = x;
		return(true);
	}

	public boolean setdistvalue(int d,double low,double high)
	{
		dist = d;
		dvalue_low = low;
		dvalue_high = high;
		return(true);
	}

	public boolean setdistvalue(int d)
	{
		dist = d;
		return(true);
	}

	public boolean setlowvalue(double low)
	{
		dvalue_low = low;
		return(true);
	}

	public boolean sethighvalue(double high)
	{
		dvalue_high = high;
		return(true);
	}
	
	public boolean setsdvalue(double sd)
	{
		dvalue_sd = sd;
		return(true);
	}

	public boolean saveRun(int i)
	{
	    return(true);
	}

	public boolean restoreRun(int i)
	{
	    return(true);
	}

	// Accessors
	public double doublevalue() {return dvalue;}
	public int intvalue()  {return ivalue;}
	public String choicevalue()  {return svalue;}
	public int type() {return type;}
	public double doublevalue_low() {return dvalue_low;}
	public double doublevalue_high()  {return dvalue_high;}
	public int dist()  {return dist;}
	public double doublevalue_sd()  {return dvalue_sd;}

	// ---------------- Data access for distributions -------------------

    // Return a value from the distribution
    public double distribution_value(SetupButton parent)
    {
		if (!parent.monte_boolean)  // Monte Carlo is off
			return(this.doublevalue());
		
        distRandomNumbers drn = new distRandomNumbers(parent);

        // Sort distribution types
        switch(this.dist())  {
            case 0: return(this.doublevalue());      // Fixed value
            case 1: return(drn.triangleDist(this.doublevalue(),this.doublevalue_low(),this.doublevalue_high()));  // Triangular
            case 2: return(drn.normalDist(this.doublevalue(),this.doublevalue_sd()));    // Normal
            case 3: return(drn.uniformDist(this.doublevalue(),this.doublevalue_low()));  // Uniform
            case 4: return(drn.lognormalDist(this.doublevalue(),this.doublevalue_sd()));  // Lognormal
            default: return(this.doublevalue());     // Unknown
        }
    }

}

