001    /*
002     * $Id: ElemFactory.java 3193 2010-06-26 20:10:37Z kredel $
003     */
004    
005    package edu.jas.structure;
006    
007    import java.math.BigInteger;
008    import java.io.Reader;
009    import java.io.Serializable;
010    import java.util.Random;
011    import java.util.List;
012    
013    /**
014     * Element factory interface.
015     * Defines embedding of integers, parsing and random element construction.
016     * @author Heinz Kredel
017     */
018    
019    public interface ElemFactory<C extends Element<C>> extends Serializable {
020    
021    
022        /**
023         * Get a list of the generating elements.
024         * @return list of generators for the algebraic structure.
025         */
026        public List<C> generators();
027    
028    
029        /**
030         * Is this structure finite or infinite.
031         * @return true if this structure is finite, else false.
032         */
033        public boolean isFinite();
034    
035    
036        /**
037         * Get the Element for a.
038         * @param a long
039         * @return element corresponding to a.
040         */
041        public C fromInteger(long a);
042    
043    
044        /**
045         * Get the Element for a.
046         * @param a java.math.BigInteger.
047         * @return element corresponding to a.
048         */
049        public C fromInteger(BigInteger a);
050    
051    
052        /**
053         * Generate a random Element with size less equal to n.
054         * @param n
055         * @return a random element.
056         */
057        public C random(int n);
058    
059    
060        /**
061         * Generate a random Element with size less equal to n.
062         * @param n
063         * @param random is a source for random bits.
064         * @return a random element.
065         */
066        public C random(int n, Random random);
067    
068    
069        /**
070         * Create a copy of Element c.
071         * @param c
072         * @return a copy of c.
073         */
074        public C copy(C c);
075    
076    
077        /**
078         * Parse from String.
079         * @param s String.
080         * @return a Element corresponding to s.
081         */
082        public C parse(String s);
083    
084    
085        /**
086         * Parse from Reader.
087         * @param r Reader.
088         * @return the next Element found on r.
089         */
090        public C parse(Reader r);
091    
092    
093        /** Get a scripting compatible string representation.
094         * @return script compatible representation for this ElemFactory.
095         */
096        public String toScript();
097    
098    }