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}