Revision: 4115
          http://vexi.svn.sourceforge.net/vexi/?rev=4115&view=rev
Author:   mkpg2
Date:     2011-05-09 17:17:58 +0000 (Mon, 09 May 2011)

Log Message:
-----------
Fix Decimal.
  - implement equals
  - cast method

Modified Paths:
--------------
    trunk/org.vexi-library.js/src/main/jpp/org/ibex/js/JSDecimal.jpp
    trunk/org.vexi-library.js/src/test/java/test/js/exec/decimal/methods.js

Modified: trunk/org.vexi-library.js/src/main/jpp/org/ibex/js/JSDecimal.jpp
===================================================================
--- trunk/org.vexi-library.js/src/main/jpp/org/ibex/js/JSDecimal.jpp    
2011-05-09 02:44:41 UTC (rev 4114)
+++ trunk/org.vexi-library.js/src/main/jpp/org/ibex/js/JSDecimal.jpp    
2011-05-09 17:17:58 UTC (rev 4115)
@@ -54,22 +54,25 @@
                 return null;
             }
         }
-        private BigDecimal cast(JS[] args, int index) throws JSExn{
-            JS arg = (args.length<=index)?null:args[index];
+        
+        private BigDecimal cast(JS arg) throws JSExn{
             if(arg instanceof JSDecimal) {
                 return ((JSDecimal)arg).decimal;
-            }else if(arg instanceof JSNumber) {
+            }else if(arg instanceof JSNumber){
                 if(JSU.isInt(arg)){
                     return new BigDecimal(JSU.toLong(arg));
                 }else{
                     return new BigDecimal(JSU.toDouble(arg));
                 }
             }else{
-                BigDecimal r = tryParseString(arg);
-                if(r!=null) return r;
+                return tryParseString(arg);
             }
+        }
+        private BigDecimal cast(JS[] args, int index) throws JSExn{
+            JS arg = (args.length<=index)?null:args[index];
+            BigDecimal r = cast(arg);
+            if(r!=null) return r;
             throw new JSExn("Expected argument "+index+" to be valid decimal, 
got: "+JSU.toString(arg));
-            
         }
         
         public JS new_(JS[] args) throws JSExn {
@@ -90,6 +93,7 @@
             case "remainder": return METHOD;
             case "subtract": return METHOD;
             
+            case "cast": return METHOD;
             case "tryParseString": return METHOD;
             //#end
             return super.get(key);
@@ -98,11 +102,18 @@
         public JS callMethod(JS this_, JS method, JS[] args) throws JSExn {
             String methodStr = JSU.toString(method);
             if(args.length==1){
-                if("tryParseString".equals(methodStr)){ 
+                JS arg = args[0];
+                //#switch(methodStr)
+                case "cast":
+                    if(arg instanceof JSDecimal) return arg;
+                    BigDecimal r = cast(arg);
+                    if(r==null) return null;
+                    return new JSDecimal(r);
+                case "tryParseString":
                     BigDecimal r = tryParseString(args[0]);
                     if(r==null) return null;
                     return new JSDecimal(r);
-                }
+                //#end
             }
                 
             if(args.length>=2){
@@ -172,6 +183,14 @@
         return super.callMethod(this_, method, args);
     }
     
+    public int hashCode(){ return decimal.hashCode(); }
+    
+    public boolean equals(Object obj) {
+        if(!(obj instanceof JSDecimal)) return false;
+        JSDecimal b = (JSDecimal)obj;
+        return decimal.equals(b.decimal);
+    }
+    
     // REMARK may implement JSNumber
 //    int toInt() { return decimal.intValue(); }
 //    long toLong(){ return decimal.longValue(); }

Modified: 
trunk/org.vexi-library.js/src/test/java/test/js/exec/decimal/methods.js
===================================================================
--- trunk/org.vexi-library.js/src/test/java/test/js/exec/decimal/methods.js     
2011-05-09 02:44:41 UTC (rev 4114)
+++ trunk/org.vexi-library.js/src/test/java/test/js/exec/decimal/methods.js     
2011-05-09 17:17:58 UTC (rev 4115)
@@ -22,6 +22,12 @@
 
 assertEquals(null, Decimal.tryParseString("abc"));
 assertEquals("-0.1", Decimal.tryParseString("-.1")+"");
+
+
+
+assertEquals(d123, Decimal.cast("123"));
+assertEquals(d123, Decimal.cast(123));
+assertEquals(d123, Decimal.cast(d123));
 //assertEquals("-0.1", Decimal.tryParseString("-.")+"");
 
 //assertEquals("102.5000", Decimal.remainder(d123.round(4),d1_23.round(1))+"");


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Vexi-svn mailing list
Vexi-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vexi-svn

Reply via email to