001/*
002 * $Id: JLAdapter.java 4850 2014-06-28 18:26:08Z kredel $
003 */
004
005package edu.jas.jlinalg;
006
007
008import org.jlinalg.DivisionByZeroException;
009import org.jlinalg.IRingElement;
010import org.jlinalg.IRingElementFactory;
011import org.jlinalg.operator.MonadicOperator;
012
013import edu.jas.structure.RingElem;
014
015
016/**
017 * Class that wraps a JAS <code>RingElem</code> in an JLinALg
018 * <code>IRingElement</code>.
019 * @param <C> JAS ring element type
020 * @author Heinz Kredel
021 */
022
023public class JLAdapter<C extends RingElem<C>> implements IRingElement<JLAdapter<C>> {
024
025
026    public final C val;
027
028
029    public JLAdapter(C v) {
030        val = v;
031    }
032
033
034    /**
035     * Get the string representation.
036     * @see java.lang.Object#toString()
037     */
038    @Override
039    public String toString() {
040        StringBuffer s = new StringBuffer();
041        //s.append("JLAdapter(");
042        s.append(val.toString());
043        //s.append(")");
044        return s.toString();
045    }
046
047
048    /**
049     * @see java.lang.Object#equals(java.lang.Object)
050     */
051    @SuppressWarnings("unchecked")
052    @Override
053    public boolean equals(Object obj) {
054        if (!(obj instanceof JLAdapter)) {
055            return false;
056        }
057        JLAdapter<C> other = (JLAdapter<C>) obj;
058        return this.compareTo(other) == 0;
059    }
060
061
062    /**
063     * @see java.lang.Object#hashCode()
064     */
065    @Override
066    public int hashCode() {
067        return val.hashCode();
068    }
069
070
071    @Override
072    public JLAdapter<C> abs() {
073        return new JLAdapter<C>(val.abs());
074    }
075
076
077    @Override
078    public JLAdapter<C> norm() {
079        return new JLAdapter<C>(val.abs());
080    }
081
082
083    @Override
084    public JLAdapter<C> add(JLAdapter<C> other) {
085        return new JLAdapter<C>(val.sum(other.val));
086    }
087
088
089    @Override
090    public JLAdapter<C> apply(MonadicOperator<JLAdapter<C>> fun) {
091        return fun.apply(this);
092    }
093
094
095    @Override
096    public int compareTo(JLAdapter<C> other) {
097        return val.compareTo(other.val);
098    }
099
100
101    @Override
102    public JLAdapter<C> divide(JLAdapter<C> other) throws DivisionByZeroException {
103        return new JLAdapter<C>(val.divide(other.val));
104    }
105
106
107    @Override
108    public boolean ge(JLAdapter<C> val) {
109        return this.compareTo(val) >= 0;
110    }
111
112
113    @Override
114    public IRingElementFactory<JLAdapter<C>> getFactory() {
115        return new JLAdapterFactory<C>(val.factory());
116    }
117
118
119    @Override
120    public boolean gt(JLAdapter<C> val) {
121        return this.compareTo(val) > 0;
122    }
123
124
125    @Override
126    public JLAdapter<C> invert() throws DivisionByZeroException {
127        return new JLAdapter<C>(val.inverse());
128    }
129
130
131    @Override
132    public boolean isOne() {
133        return val.isONE();
134    }
135
136
137    @Override
138    public boolean isZero() {
139        return val.isZERO();
140    }
141
142
143    @Override
144    public boolean le(JLAdapter<C> val) {
145        return this.compareTo(val) <= 0;
146    }
147
148
149    @Override
150    public boolean lt(JLAdapter<C> val) {
151        return this.compareTo(val) < 0;
152    }
153
154
155    @Override
156    public JLAdapter<C> multiply(JLAdapter<C> other) {
157        return new JLAdapter<C>(val.multiply(other.val));
158    }
159
160
161    @Override
162    public JLAdapter<C> negate() {
163        return new JLAdapter<C>(val.negate());
164    }
165
166
167    @Override
168    public JLAdapter<C> subtract(JLAdapter<C> other) {
169        return new JLAdapter<C>(val.subtract(other.val));
170    }
171
172}