edu.jas.ufd
Class GCDFactory

java.lang.Object
  extended by edu.jas.ufd.GCDFactory

public class GCDFactory
extends java.lang.Object

Greatest common divisor algorithms factory. Select appropriate GCD engine based on the coefficient types.

Author:
Heinz Kredel
See Also:
GreatestCommonDivisor.gcd( edu.jas.poly.GenPolynomial P, edu.jas.poly.GenPolynomial S)
To do
Base decision also an degree vectors and number of variables of polynomials. Incorporate also number of CPUs / threads available (done with GCDProxy).
Usage
To create classes that implement this interface use the GreatestCommonDivisorFactory. It will select an appropriate implementation based on the types of polynomial coefficients CT. There are two methods to obtain an implementation: getProxy() and getImplementation(). getImplementation() returns an object of a class which implements the GreatestCommonDivisor interface. getProxy() returns a proxy object of a class which implements the GreatestCommonDivisor interface. The proxy will run two implementations in parallel, return the first computed result and cancel the second running task. On systems with one CPU the computing time will be two times the time of the fastest algorithm implmentation. On systems with more than two CPUs the computing time will be the time of the fastest algorithm implmentation.
 GreatestCommonDivisor<CT> engine;
     engine = GCDFactory.<CT>getImplementation( cofac );
 or  engine = GCDFactory.<CT>getProxy( cofac );
 c = engine.gcd(a,b);
 
For example, if the coefficient type is BigInteger, the usage looks like
 BigInteger cofac = new BigInteger();
 GreatestCommonDivisor<BigInteger> engine; 
     engine = GCDFactory.<BigInteger>getImplementation( cofac );
 or  engine = GCDFactory.<BigInteger>getProxy( cofac );
 c = engine.gcd(a,b);
 

Constructor Summary
protected GCDFactory()
          Protected factory constructor.
 
Method Summary
static GreatestCommonDivisor<BigInteger> getImplementation(BigInteger fac)
          Determine suitable implementation of gcd algorithms, case BigInteger.
static GreatestCommonDivisor<BigRational> getImplementation(BigRational fac)
          Determine suitable implementation of gcd algorithms, case BigRational.
static GreatestCommonDivisor<ModInteger> getImplementation(ModIntegerRing fac)
          Determine suitable implementation of gcd algorithms, case ModInteger.
static
<C extends GcdRingElem<C>>
GreatestCommonDivisor<C>
getImplementation(RingFactory<C> fac)
          Determine suitable implementation of gcd algorithms, other cases.
static GreatestCommonDivisor<BigInteger> getProxy(BigInteger fac)
          Determine suitable procy for gcd algorithms, case BigInteger.
static GreatestCommonDivisor<BigRational> getProxy(BigRational fac)
          Determine suitable proxy for gcd algorithms, case BigRational.
static GreatestCommonDivisor<ModInteger> getProxy(ModIntegerRing fac)
          Determine suitable proxy for gcd algorithms, case ModInteger.
static
<C extends GcdRingElem<C>>
GreatestCommonDivisor<C>
getProxy(RingFactory<C> fac)
          Determine suitable proxy for gcd algorithms, other cases.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

GCDFactory

protected GCDFactory()
Protected factory constructor.

Method Detail

getImplementation

public static GreatestCommonDivisor<ModInteger> getImplementation(ModIntegerRing fac)
Determine suitable implementation of gcd algorithms, case ModInteger.

Parameters:
fac - ModInteger.
Returns:
gcd algorithm implementation.

getProxy

public static GreatestCommonDivisor<ModInteger> getProxy(ModIntegerRing fac)
Determine suitable proxy for gcd algorithms, case ModInteger.

Parameters:
fac - ModInteger.
Returns:
gcd algorithm implementation.

getImplementation

public static GreatestCommonDivisor<BigInteger> getImplementation(BigInteger fac)
Determine suitable implementation of gcd algorithms, case BigInteger.

Parameters:
fac - BigInteger.
Returns:
gcd algorithm implementation.

getProxy

public static GreatestCommonDivisor<BigInteger> getProxy(BigInteger fac)
Determine suitable procy for gcd algorithms, case BigInteger.

Parameters:
fac - BigInteger.
Returns:
gcd algorithm implementation.

getImplementation

public static GreatestCommonDivisor<BigRational> getImplementation(BigRational fac)
Determine suitable implementation of gcd algorithms, case BigRational.

Parameters:
fac - BigRational.
Returns:
gcd algorithm implementation.

getProxy

public static GreatestCommonDivisor<BigRational> getProxy(BigRational fac)
Determine suitable proxy for gcd algorithms, case BigRational.

Parameters:
fac - BigRational.
Returns:
gcd algorithm implementation.

getImplementation

public static <C extends GcdRingElem<C>> GreatestCommonDivisor<C> getImplementation(RingFactory<C> fac)
Determine suitable implementation of gcd algorithms, other cases.

Parameters:
fac - RingFactory.
Returns:
gcd algorithm implementation.

getProxy

public static <C extends GcdRingElem<C>> GreatestCommonDivisor<C> getProxy(RingFactory<C> fac)
Determine suitable proxy for gcd algorithms, other cases.

Parameters:
fac - RingFactory.
Returns:
gcd algorithm implementation.