Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/memoire/foo/FooReal.java


1   /**
2    * @modification $Date: 2002/12/16 18:56:26 $
3    * @statut       unstable
4    * @file         FooReal.java
5    * @version      0.08
6    * @author       Guillaume Desnoix
7    * @email        guillaume@desnoix.com
8    * @license      GNU General Public License 2 (GPL2)
9    * @copyright    1999-2001 Guillaume Desnoix
10   */
11  
12  package com.memoire.foo;
13  import com.memoire.foo.*;
14  
15  public class FooReal
16  {
17    private static FooCategory pkg_=null;
18  
19    public static final FooCategory init()
20    {
21      if(pkg_==null)
22      {
23        pkg_=FooCategory.create("&real");
24        FooCategory.create(Double.class).alias("&double").extend(pkg_);
25        FooCategory.create(Float.class ).alias("&float" ).extend(pkg_);
26  
27        pkg_.setMessage("+" ,FooReal.class,"addMsg");
28        pkg_.setMessage("-" ,FooReal.class,"subMsg");
29        pkg_.setMessage("*" ,FooReal.class,"mulMsg");
30        pkg_.setMessage("/" ,FooReal.class,"divMsg");
31        pkg_.setMessage("<" ,FooReal.class,"ltMsg");
32        pkg_.setMessage("<=",FooReal.class,"leMsg");
33        pkg_.setMessage(">" ,FooReal.class,"gtMsg");
34        pkg_.setMessage(">=",FooReal.class,"geMsg");
35        pkg_.setMessage("==",FooReal.class,"eqMsg");
36        pkg_.setMessage("!=",FooReal.class,"neMsg");
37        pkg_.setMessage("~" ,FooReal.class,"mtMsg");
38        pkg_.setMessage("!~",FooReal.class,"nmMsg");
39        pkg_.setMessage("²" ,FooReal.class,"sqrMsg");
40        pkg_.setMessage("**",Math.class   ,"pow(double,double)");
41      }
42  
43      return pkg_;
44    }
45  
46      private static final Double ZERO=new Double(0.);
47      private static final Double ONE =new Double(1.);
48      private static final Double TWO =new Double(2.);
49  
50      public static Double create(double _value)
51      {
52    Double r;
53         if(_value==0.) r=ZERO;
54    else if(_value==1.) r=ONE;
55    else if(_value==2.) r=TWO;
56    else r=new Double(_value);
57    return r;
58      }
59      
60      public static Number addMsg(Object[] _n)
61      {
62    return operation(_n,0);
63      }
64  
65      public static Number subMsg(Object[] _n)
66      {
67    return operation(_n,1);
68      }
69  
70      public static Number mulMsg(Object[] _n)
71      {
72    return operation(_n,2);
73      }
74  
75      public static Number divMsg(Object[] _n)
76      {
77    return operation(_n,3);
78      }
79  
80      private static Number operation(Object[] _n, int _op)
81      {
82    FooLib.checkClassArgument(Number.class,_n[0],0);
83    double r=((Number)_n[0]).doubleValue();
84    for(int i=1;i<_n.length;i++)
85    {
86        FooLib.checkClassArgument(Number.class,_n[i],i);
87        double a=((Number)_n[i]).doubleValue();
88        switch(_op)
89        {
90        case 0: r+=a; break;
91        case 1: r-=a; break;
92        case 2: r*=a; break;
93        case 3: r/=a; break;
94        }
95    }
96    return create(r);
97      }    
98  
99      public static Boolean ltMsg(Object[] _n)
100     {
101   return comparison(_n,0);
102     }
103 
104     public static Boolean leMsg(Object[] _n)
105     {
106   return comparison(_n,1);
107     }
108 
109     public static Boolean gtMsg(Object[] _n)
110     {
111   return comparison(_n,2);
112     }
113 
114     public static Boolean geMsg(Object[] _n)
115     {
116   return comparison(_n,3);
117     }
118 
119     public static Boolean eqMsg(Object[] _n)
120     {
121   return comparison(_n,4);
122     }
123 
124     public static Boolean neMsg(Object[] _n)
125     {
126   return comparison(_n,5);
127     }
128 
129     public static Boolean mtMsg(Object[] _n)
130     {
131   return comparison(_n,6);
132     }
133 
134     public static Boolean nmMsg(Object[] _n)
135     {
136   return comparison(_n,7);
137     }
138 
139     private static Boolean comparison(Object[] _n, int _op)
140     {
141   FooLib.checkClassArgument(Number.class,_n[0],0);
142   boolean r=true;
143   double v=((Number)_n[0]).doubleValue();
144   for(int i=1;i<_n.length;i++)
145   {
146       FooLib.checkClassArgument(Number.class,_n[i],i);
147       double a=((Number)_n[i]).doubleValue();
148       switch(_op)
149       {
150       case 0: r&=(v< a);  break;
151       case 1: r&=(v<=a);  break;
152       case 2: r&=(v> a); break;
153       case 3: r&=(v>=a); break;
154       case 4: r&=(v==a); break;
155       case 5: r&=(v!=a); break;
156       case 6: r&=(Math.round(v-a)==0.); break;
157       case 7: r&=(Math.round(v-a)!=0.); break;
158       }
159   }
160   return FooBoolean.create(r);
161     }    
162 
163     public static Number sqrMsg(Number _a)
164     {
165   double a=_a.doubleValue();
166   return create(a*a);
167     }
168 }