001 /* 002 * $Id: ModularNotInvertibleException.java 3472 2011-01-07 17:19:22Z kredel $ 003 */ 004 005 package edu.jas.arith; 006 007 008 import edu.jas.structure.NotInvertibleException; 009 import edu.jas.structure.GcdRingElem; 010 011 012 /** 013 * Modular integer NotInvertibleException class. 014 * Runtime Exception to be thrown for not invertible modular integers. 015 * Container for the non-trivial factors found by the inversion algorithm. 016 * <b>Note: </b> cannot be generic because of Throwable. 017 * @author Heinz Kredel 018 */ 019 public class ModularNotInvertibleException extends NotInvertibleException { 020 021 022 public final GcdRingElem f; // = f1 * f2 023 024 public final GcdRingElem f1; 025 026 public final GcdRingElem f2; 027 028 029 public ModularNotInvertibleException() { 030 this(null,null,null); 031 } 032 033 034 public ModularNotInvertibleException(String c) { 035 this(c,null,null,null); 036 } 037 038 039 public ModularNotInvertibleException(String c, Throwable t) { 040 this(c,t,null,null,null); 041 } 042 043 044 public ModularNotInvertibleException(Throwable t) { 045 this(t,null,null,null); 046 } 047 048 049 /** 050 * Constructor. 051 * @param f gcd ring element with f = f1 * f2. 052 * @param f1 gcd ring element. 053 * @param f2 gcd ring element. 054 */ 055 public ModularNotInvertibleException(GcdRingElem f, GcdRingElem f1, GcdRingElem f2) { 056 super("ModularNotInvertibleException"); 057 this.f = f; 058 this.f1 = f1; 059 this.f2 = f2; 060 } 061 062 063 /** 064 * Constructor. 065 * @param f gcd ring element with f = f1 * f2. 066 * @param f1 gcd ring element. 067 * @param f2 gcd ring element. 068 */ 069 public ModularNotInvertibleException(String c, GcdRingElem f, GcdRingElem f1, GcdRingElem f2) { 070 super(c); 071 this.f = f; 072 this.f1 = f1; 073 this.f2 = f2; 074 } 075 076 077 /** 078 * Constructor. 079 * @param f gcd ring element with f = f1 * f2. 080 * @param f1 gcd ring element. 081 * @param f2 gcd ring element. 082 */ 083 public ModularNotInvertibleException(String c, Throwable t, GcdRingElem f, GcdRingElem f1, GcdRingElem f2) { 084 super(c,t); 085 this.f = f; 086 this.f1 = f1; 087 this.f2 = f2; 088 } 089 090 091 /** 092 * Constructor. 093 * @param f gcd ring element with f = f1 * f2. 094 * @param f1 gcd ring element. 095 * @param f2 gcd ring element. 096 */ 097 public ModularNotInvertibleException(Throwable t, GcdRingElem f, GcdRingElem f1, GcdRingElem f2) { 098 super("ModularNotInvertibleException",t); 099 this.f = f; 100 this.f1 = f1; 101 this.f2 = f2; 102 } 103 104 105 /** 106 * Get the String representation. 107 * @see java.lang.Object#toString() 108 */ 109 @Override 110 public String toString() { 111 String s = super.toString(); 112 if ( f != null || f1 != null || f2 != null) { 113 s += ", f = " + f + ", f1 = " + f1 + ", f2 = " + f2; 114 } 115 return s; 116 } 117 118 }