001/* 002 * $Id$ 003 */ 004 005package edu.jas.commons.math; 006 007 008import org.apache.commons.math3.Field; 009import org.apache.commons.math3.FieldElement; 010 011import edu.jas.structure.RingElem; 012 013 014/** 015 * Class that wraps a JAS <code>RingElem</code> in a commons-math 016 * <code>FieldElement</code>. 017 * @param <C> JAS ring element type 018 * @author Heinz Kredel 019 */ 020public class CMFieldElement<C extends RingElem<C>> implements FieldElement<CMFieldElement<C>>, 021 Comparable<CMFieldElement<C>> { 022 023 024 public final C val; 025 026 027 public CMFieldElement(C v) { 028 val = v; 029 } 030 031 032 @Override 033 public CMFieldElement<C> add(CMFieldElement<C> other) { 034 return new CMFieldElement<C>(val.sum(other.val)); 035 } 036 037 038 @Override 039 public CMFieldElement<C> negate() { 040 return new CMFieldElement<C>(val.negate()); 041 } 042 043 044 @Override 045 public int compareTo(CMFieldElement<C> other) { 046 return val.compareTo(other.val); 047 } 048 049 050 @Override 051 public CMFieldElement<C> divide(CMFieldElement<C> other) throws ArithmeticException { 052 return new CMFieldElement<C>(val.divide(other.val)); 053 } 054 055 056 @SuppressWarnings("unchecked") 057 @Override 058 public boolean equals(Object obj) { 059 if (!(obj instanceof CMFieldElement)) { 060 return false; 061 } 062 CMFieldElement<C> other = (CMFieldElement<C>) obj; 063 return this.compareTo(other) == 0; 064 } 065 066 067 @Override 068 public Field<CMFieldElement<C>> getField() { 069 return new CMField<C>(val.factory()); 070 } 071 072 073 @Override 074 public int hashCode() { 075 return val.hashCode(); 076 } 077 078 079 @Override 080 public CMFieldElement<C> multiply(CMFieldElement<C> other) { 081 return new CMFieldElement<C>(val.multiply(other.val)); 082 } 083 084 085 @Override 086 public CMFieldElement<C> multiply(int n) { 087 return new CMFieldElement<C>(val.multiply(val.factory().fromInteger(n))); 088 } 089 090 091 @Override 092 public CMFieldElement<C> subtract(CMFieldElement<C> other) { 093 return new CMFieldElement<C>(val.subtract(other.val)); 094 } 095 096 097 @Override 098 public CMFieldElement<C> reciprocal() { 099 return new CMFieldElement<C>(val.inverse()); 100 } 101 102 103 /** 104 * Get the string representation. 105 * @see java.lang.Object#toString() 106 */ 107 @Override 108 public String toString() { 109 StringBuffer s = new StringBuffer(); 110 // s.append("JLAdapter("); 111 s.append(val.toString()); 112 // s.append(")"); 113 return s.toString(); 114 } 115 116 117 public boolean isOne() { 118 return val.isONE(); 119 } 120 121 122 public boolean isZero() { 123 return val.isZERO(); 124 } 125 126}