001/* 002 * $Id$ 003 */ 004 005package edu.jas.commons.math; 006 007 008import org.apache.commons.math3.Field; 009 010import edu.jas.structure.ElemFactory; 011import edu.jas.structure.Element; 012import edu.jas.structure.RingElem; 013import edu.jas.structure.RingFactory; 014 015 016/** 017 * Class that wraps a JAS <code>RingFactory</code> in a commons-math 018 * <code>Field</code>. 019 * @author Heinz Kredel 020 * @param <C> JAS ring element type 021 */ 022public class CMField<C extends RingElem<C>> implements Field<CMFieldElement<C>> { 023 024 025 public final RingFactory<C> fac; 026 027 028 /** 029 * @param f 030 */ 031 public CMField(ElemFactory<C> f) { 032 this((RingFactory<C>) f); 033 } 034 035 036 /** 037 * @param f 038 */ 039 public CMField(RingFactory<C> f) { 040 fac = f; 041 } 042 043 044 /** 045 * get runtime class 046 */ 047 @SuppressWarnings({"unchecked","cast"}) 048 @Override 049 public Class<CMFieldElement<C>> getRuntimeClass() { 050 return (Class<CMFieldElement<C>>) (Class) CMFieldElement.class; //getClass(); 051 } 052 053 054 /** 055 * @see java.lang.Object#equals(java.lang.Object) 056 */ 057 @SuppressWarnings("unchecked") 058 @Override 059 public boolean equals(Object obj) { 060 // System.out.println("factory equals, this = " + this + ", obj = " + obj); 061 if (!(obj instanceof Field)) { 062 return false; 063 } 064 Field other = (Field) obj; 065 CMField<C> fother = (CMField<C>) other; 066 RingFactory<C> ofac = fother.fac; 067 // System.out.println("factory equals, this = " + fac.getClass() + 068 // ", obj = " + ofac.getClass()); 069 if (!fac.getClass().getName().equals(ofac.getClass().getName())) { 070 return false; 071 } 072 RingFactory<C> ofac1 = null; 073 try { 074 ofac1 = (RingFactory<C>) ((RingElem<C>) ofac).factory(); 075 } catch (ClassCastException e) { 076 } 077 if ( /* fac */ofac.equals(ofac1)) { // case BigInteger etc 078 return true; 079 } 080 // System.out.println("factory equals, this = " + ofac + ", obj = " + 081 // ofac1); 082 // if (fac.characteristic().equals(ffac.characteristic())) { 083 // return true; 084 // } 085 return fac.equals(ofac); 086 } 087 088 089 public CMFieldElement<C> get(int i) { 090 return new CMFieldElement<C>(fac.fromInteger(i)); 091 } 092 093 094 public CMFieldElement<C> get(long i) { 095 return new CMFieldElement<C>(fac.fromInteger(i)); 096 } 097 098 099 public CMFieldElement<C> get(Object o) { 100 if (o == null) { 101 return null; 102 } 103 String s = o.toString(); 104 return new CMFieldElement<C>(fac.parse(s)); 105 } 106 107 108 @SuppressWarnings("unchecked") 109 public CMFieldElement<C>[] getArray(int size) { 110 CMFieldElement<C>[] arr = new CMFieldElement[size]; 111 for (int i = 0; i < arr.length; i++) { 112 arr[i] = getZero(); 113 } 114 return arr; 115 } 116 117 118 @SuppressWarnings("unchecked") 119 public CMFieldElement<C>[][] getArray(int rows, int columns) { 120 CMFieldElement<C>[][] arr = new CMFieldElement[rows][columns]; 121 for (int i = 0; i < arr.length; i++) { 122 arr[i] = getArray(columns); 123 } 124 return arr; 125 } 126 127 128 @Override 129 public CMFieldElement<C> getOne() { 130 return new CMFieldElement<C>(fac.getONE()); 131 } 132 133 134 @Override 135 public CMFieldElement<C> getZero() { 136 return new CMFieldElement<C>(fac.getZERO()); 137 } 138 139 140 /** 141 * @see java.lang.Object#hashCode() 142 */ 143 @SuppressWarnings("unchecked") 144 @Override 145 public int hashCode() { 146 RingFactory<C> fac1 = null; 147 try { 148 fac1 = (RingFactory<C>) ((RingElem<C>) fac).factory(); 149 } catch (ClassCastException e) { 150 } 151 if (fac.equals(fac1)) { // case BigInteger etc 152 // int h = fac.getClass().getSimpleName().hashCode(); 153 // h = h * 37 + fac.characteristic().hashCode(); 154 return fac.getClass().getName().hashCode(); 155 } 156 return fac.hashCode(); 157 } 158 159 160 /** 161 * Get the string representation. 162 * 163 * @see java.lang.Object#toString() 164 */ 165 @SuppressWarnings("unchecked") 166 @Override 167 public String toString() { 168 StringBuffer s = new StringBuffer(); 169 String f = null; 170 try { 171 f = ((Element<C>) fac).toScriptFactory(); 172 } catch (Exception ignored) { 173 f = fac.toScript(); 174 } 175 if (f != null) { 176 s.append(f); 177 } 178 return s.toString(); 179 } 180 181}