001    /*
002     * $Id: ModulElem.java 1708 2008-02-24 17:28:36Z kredel $
003     */
004    
005    package edu.jas.structure;
006    
007    
008    import java.util.List;
009    
010    
011    /**
012     * Module element interface.
013     * Defines scalar operations.
014     * @param <M> module type
015     * @param <C> scalar type
016     * @author Heinz Kredel
017     */
018    public interface ModulElem<M extends ModulElem<M,C>,
019                               C extends RingElem<C>> 
020                     extends AbelianGroupElem< M > {
021    
022        /**
023         * Scalar multiplication. Multiply this by a scalar.
024         * @param s scalar
025         * @return this * s.
026         */
027        public M scalarMultiply(C s);
028    
029    
030        /**
031         * Linear combination.
032         * @param a scalar
033         * @param b module element
034         * @param s scalar
035         * @return a * b + this * s.
036         */
037        public M linearCombination(C a, M b, C s);
038    
039    
040        /**
041         * Linear combination.
042         * @param b module element
043         * @param s scalar
044         * @return b + this * s.
045         */
046        public M linearCombination(M b, C s);
047    
048    
049        /**
050         * Scalar product. Multiply two vectors to become a scalar.
051         * @param b module element
052         * @return this * b, a scalar.
053         */
054        public C scalarProduct(M b);
055    
056    
057        /**
058         * Scalar product. Multiply this vectors by list of vectors to become a vector.
059         * @param b list of module elements
060         * @return this * b, a list of scalars, a module element.
061         */
062        public M scalarProduct(List<M> b);
063    
064    }