⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rate.java

📁 PEPA模型性能分析工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package semantic;

import java.util.Hashtable;


public class Rate {

	protected int type;
	private static Hashtable ratedef;
	public static boolean iseval;
	
	public static void initialize()
	{
		ratedef=new Hashtable();
	}
	public static Double def(String s)
	{
		return (Double)ratedef.get((Object)s);
	}
	public static void adddef(String s,Double d)
	{
		ratedef.put((Object)s,(Object)d);
	}
	public static void rem(String s)
	{
		ratedef.remove((Object)s);
	}
	
	public static Rate Spec(String rate)
	{
	  return new Spec(rate);
	}
	public static Rate Unspec(Double elem) 
	{
	   return new Unspec(elem);
	}
	public static Rate Strung(String elem) 
	{
	   return new Strung(elem);
	}
	public static Rate Number(Double elem)
	{
	   return new Number(elem);
	}
	public static Rate Sub(Rate r1, Rate r2) 
	{
	   return new Sub(r1, r2);
	}
	public static Rate Div(Rate r1, Rate r2) 
	{
	  return new Div(r1, r2);
	}
	public static Rate Mult(Rate r1, Rate r2) 
	{
	   return new Mult(r1, r2);
	}
	public static Rate Plus(Rate r1, Rate r2) 
	{
	   return new Plus(r1, r2);
	}
	public static Rate Min(Rate r1, Rate r2) 
	{
	   return new Min(r1, r2);
	}
	public Rate min(Rate r)
	{
		switch(this.type)
		{
		case RateType.Spec_tag:
		{
			Double d1=((Spec)this).getRate();
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				Double d2=((Spec)r).getRate();
				if(d1.doubleValue()<d2.doubleValue()) return this;
				else return r;
			}
			case RateType.Unspec_tag:
			{
				return this;
			}
			case RateType.Number_tag:
			{
				Double d2=((Number)r).getRate();
				if(d1.doubleValue()<d2.doubleValue()) return this;
				else return r;
			}
			}
			return Min(this,r);
		}
		case RateType.Unspec_tag:
		{
			Double d1=((Unspec)this).item;
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				return r;
			}
			case RateType.Unspec_tag:
			{
				Double d2=((Unspec)r).item;
				if(d1.doubleValue()<d2.doubleValue()) return this;
				else return r;
			}
			case RateType.Strung_tag:
			{
				return r;
			}
			}
			return Min(this,r);
		}
		case RateType.Strung_tag:
		{
			switch(r.type)
			{
			case RateType.Unspec_tag:
			{
				return this;
			}
			}
			return Min(this,r);
		}
		case RateType.Number_tag:
		{
			Double d1=((Number)this).getRate();
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				Double d2=((Spec)r).getRate();
				if(d1.doubleValue()<d2.doubleValue()) return this;
				else return r;
			}
			case RateType.Unspec_tag:
			{
				return this;
			}
			case RateType.Number_tag:
			{
				Double d2=((Number)r).getRate();
				if(d1.doubleValue()<d2.doubleValue()) return this;
				else return r;
			}
			}
			return Min(this,r);
		}
		}
		return Min(this,r);
	}
	public Rate div(Rate r) throws RateException
	{
		switch(this.type)
		{
		case RateType.Spec_tag:
		{
			Double d1=((Spec)this).getRate();
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				Double d2=((Spec)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()/d2.doubleValue()));
			}
			case RateType.Number_tag:
			{
				Double d2=((Number)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()/d2.doubleValue()));
			}
			case RateType.Unspec_tag:
			{
				throw new RateException("Tried to divide Spec & Unspec");
			}
			}
			return Rate.Div(this,r);
		}
		case RateType.Unspec_tag:
		{
			Double d1=((Unspec)this).item;
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				Double d2=((Spec)r).getRate();
				return Rate.Unspec(new Double(d1.doubleValue()/d2.doubleValue()));
			}
			case RateType.Unspec_tag:
			{
				Double d2=((Unspec)r).item;
				return Rate.Number(new Double(d1.doubleValue()/d2.doubleValue()));
			}
			case RateType.Strung_tag:
			{
				return Rate.Div(Rate.Number(d1),r);
			}
			}
			return Rate.Div(this,r);
		}
		case RateType.Strung_tag:
		{
			String s1=((Strung)this).item;
			switch(r.type)
			{
			case RateType.Strung_tag:
			{
				String s2=((Strung)r).item;
				if(s1.equals(s2)) return Rate.Number(new Double(1.0));
				return Rate.Div(this,r);
			}
			case RateType.Unspec_tag:
			{
				throw new RateException("Tried to divide Strung & Unspec");
			}
			}
			return Rate.Div(this,r);
		}
		case RateType.Number_tag:
		{
			Double d1=((Number)this).getRate();
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				Double d2=((Spec)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()/d2.doubleValue()));
			}
			case RateType.Number_tag:
			{
				Double d2=((Number)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()/d2.doubleValue()));
			}
			case RateType.Unspec_tag:
			{
				throw new RateException("Tried to divide Number & Unspec");
			}
			}
			return Rate.Div(this,r);
		}
		}
		return Rate.Div(this,r);
	}
	public Rate mult(Rate r) throws RateException
	{
		switch(this.type)
		{
		case RateType.Spec_tag:
		{
			Double d1=((Spec)this).getRate();
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				Double d2=((Spec)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()*d2.doubleValue()));
			}
			case RateType.Number_tag:
			{
				Double d2=((Number)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()*d2.doubleValue()));
			}
			case RateType.Unspec_tag:
			{
				Double d2=((Unspec)r).item;
				return Rate.Unspec(new Double(d1.doubleValue()*d2.doubleValue()));
			}
			}
			return Rate.Mult(this,r);
		}
		case RateType.Unspec_tag:
		{
			Double d1=((Unspec)this).item;
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				Double d2=((Spec)r).getRate();
				return Rate.Unspec(new Double(d1.doubleValue()*d2.doubleValue()));
			}
			case RateType.Number_tag:
			{
				Double d2=((Number)r).getRate();
				return Rate.Unspec(new Double(d1.doubleValue()*d2.doubleValue()));
			}
			case RateType.Unspec_tag:
			{
				throw new RateException("Tried to multiply two unspecified rates");
			}
			}
			return Rate.Mult(this,r);
		}
		case RateType.Number_tag:
		{
			Double d1=((Number)this).getRate();
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				Double d2=((Spec)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()*d2.doubleValue()));
			}
			case RateType.Number_tag:
			{
				Double d2=((Number)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()*d2.doubleValue()));
			}
			case RateType.Unspec_tag:
			{
				Double d2=((Unspec)r).item;
				return Rate.Unspec(new Double(d1.doubleValue()*d2.doubleValue()));
			}
			}
			return Rate.Mult(this,r);
		}
		}
		return Rate.Mult(this,r);
	}
	public Rate minus(Rate r) throws RateException
	{
		switch(this.type)
		{
		case RateType.Spec_tag:
		{
			Double d1=((Spec)this).getRate();
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				Double d2=((Spec)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()-d2.doubleValue()));
			}
			case RateType.Number_tag:
			{
				Double d2=((Number)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()-d2.doubleValue()));
			}
			case RateType.Unspec_tag:
			{
				throw new RateException("Tried to subtract Spec - Unspec");
			}
			}
			return Rate.Sub(this,r);
		}
		case RateType.Unspec_tag:
		{
			Double d1=((Unspec)this).item;
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				 throw new RateException("Tried to subtract Specified rate from a String");
			}
			case RateType.Unspec_tag:
			{
				Double d2=((Unspec)r).item;
				return Rate.Unspec(new Double(d1.doubleValue()-d2.doubleValue()));
			}
			case RateType.Strung_tag:
			{
				 throw new RateException("Tried to subtract Specified rate from a String");
			}
			}
			return Rate.Sub(this,r);
		}
		case RateType.Strung_tag:
		{
			String s1=((Strung)this).item;
			switch(r.type)
			{
			case RateType.Strung_tag:
			{
				String s2=((Strung)r).item;
				if(s1.equals(s2)) return Rate.Number(new Double(1.0));
				return Rate.Sub(this,r);
			}
			case RateType.Unspec_tag:
			{
				throw new RateException("Tried to subtract String and Unspec");
			}
			}
			return Rate.Sub(this,r);
		}
		}
		return Rate.Sub(this,r);
	}
	public Rate plus(Rate r) throws RateException
	{
		switch(this.type)
		{
		case RateType.Spec_tag:
		{
			Double d1=((Spec)this).getRate();
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				Double d2=((Spec)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()+d2.doubleValue()));
			}
			case RateType.Number_tag:
			{
				Double d2=((Number)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()+d2.doubleValue()));
			}
			case RateType.Unspec_tag:
			{
				throw new RateException("Attempting to add specified and unspecified rates");
			}
			}
			return Rate.Plus(this,r);
		}
		case RateType.Unspec_tag:
		{
			Double d1=((Unspec)this).item;
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				 throw new RateException("Tried to add Unspec & Spec bingle 2");
			}
			case RateType.Unspec_tag:
			{
				Double d2=((Unspec)r).item;
				return Rate.Unspec(new Double(d1.doubleValue()+d2.doubleValue()));
			}
			}
			return Rate.Plus(this,r);
		}

		case RateType.Number_tag:
		{
			Double d1=((Number)this).getRate();
			switch(r.type)
			{
			case RateType.Spec_tag:
			{
				Double d2=((Spec)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()+d2.doubleValue()));
			}
			case RateType.Number_tag:
			{
				Double d2=((Number)r).getRate();
				return Rate.Number(new Double(d1.doubleValue()+d2.doubleValue()));
			}
			case RateType.Unspec_tag:
			{
				throw new RateException("Tried to add Spec & Unspec bingle 3");
			}
			}
			return Rate.Plus(this,r);
		}
		}
		return Rate.Plus(this,r);
	}
	public int compare(Rate r)
	{
		 switch (this.type) {
         case RateType.Spec_tag:
         {
               Double w = ((Spec)this).getRate();
               {
                  switch (r.type) 
                  {
                  case RateType.Spec_tag:
                  {
                        Double ra = ((Spec)r).getRate();
                        if (ra.doubleValue() > w.doubleValue()) return 1;
                        if (w.doubleValue() > ra.doubleValue()) return - 1;
                        return 0;
                  }
                  case RateType.Number_tag:
                    {
                        Double ra = ((Rate.Number)r).getRate();
                        if (ra.doubleValue() > w.doubleValue()) return 1;
                        if (w.doubleValue() > ra.doubleValue()) return - 1;
                        return 0;
                    }
                  }
                  return - 1;
               }
         }
         case RateType.Unspec_tag:
         {
            Double w = ((Rate.Unspec)this).item;
            {
                  switch (r.type) 
                  {
                  case RateType.Unspec_tag:
                  {
                        Double ra = ((Rate.Unspec)r).item;
                        if (ra.doubleValue() > w.doubleValue()) return 1;
                        if (w.doubleValue() > ra.doubleValue()) return - 1;
                        return 0;
                  }
                  case RateType.Spec_tag:
                  {
                      return 1;
                  }
              }
              return - 1;
            }
         }
         case RateType.Strung_tag:
         {
            String alpha = ((Strung)this).item;
            {
                switch (r.type) 
                {
                case RateType.Strung_tag:
                {
                  String beta = ((Rate.Strung)r).item;
                  return beta.compareTo(alpha);
                }
                case RateType.Spec_tag:
                {
                  return 1;
                }
               case RateType.Unspec_tag:
                {
                  return 1;
                }
             }
            return - 1;
            }
         }
         case RateType.Number_tag:
          {
             Double w = ((Rate.Number)this).getRate();
             {
                switch (r.type) 
                {
                case RateType.Spec_tag:
                {
                   Double ra = ((Rate.Spec)r).getRate();
                   if (ra.doubleValue() > w.doubleValue()) return 1;
                   if (w.doubleValue() > ra.doubleValue()) return - 1;
                   return 0;
                 }
                 case RateType.Number_tag:
                 {
                    Double ra = ((Rate.Number)r).getRate();
                    if (ra.doubleValue() > w.doubleValue()) return 1;
                    if (w.doubleValue() > ra.doubleValue()) return - 1;
                    return 0;
                 }
               }
               return - 1;
             }
         }
         case RateType.Plus_tag:
        {
            Rate.Plus case11 = (Rate.Plus)this;
            Rate out2 = case11.r2;
            Rate out1 = case11.r1;
            {
               switch (r.type) 
               {
               case RateType.Plus_tag:
               {
                    Rate.Plus case21 = (Rate.Plus)r;
                    Rate in2 = case21.r2;
                    Rate in1 = case21.r1;
                    int temp = out1.compare(in1);
                    if (temp != 0) return temp;
                    return out2.compare(in2);
                }
               	case RateType.Spec_tag:
                {
                     return 1;
                }
                case RateType.Unspec_tag:
                {
                     return 1;
                }
                case RateType.Strung_tag:
                {
                     return 1;
                }
               }
               return - 1;
             }
         }
         case RateType.Sub_tag:
         {
             Rate.Sub case11 = (Rate.Sub)this;
             Rate out2 = case11.r2;
             Rate out1 = case11.r1;
             {
                switch (r.type) 
                {
                case RateType.Sub_tag:
                {
                    Rate.Sub case21 = (Rate.Sub)r;
                    Rate in2 = case21.r2;
                    Rate in1 = case21.r1;
                    int temp = out1.compare(in1);
                    if (temp != 0) return temp;
                    return out2.compare(in2);
                 }
                case RateType.Spec_tag:
                {
                     return 1;
                }
                case RateType.Unspec_tag:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -