001    /*
002     * $Id: AlgebraElem.java 1708 2008-02-24 17:28:36Z kredel $
003     */
004    
005    package edu.jas.structure;
006    
007    
008    /**
009     * Algabra element interface.
010     * @param <A> algebra type
011     * @param <C> scalar type
012     * @author Heinz Kredel
013     */
014    public interface AlgebraElem<A extends AlgebraElem<A,C>,
015                                 C extends RingElem<C>> 
016                     extends RingElem< A > {
017    
018        /**
019         * Scalar multiplication. Multiply this by a scalar.
020         * @param s scalar
021         * @return this * s.
022         */
023        public A scalarMultiply(C s);
024    
025    
026        /**
027         * Linear combination.
028         * @param a scalar
029         * @param b algebra element
030         * @param s scalar
031         * @return a * b + this * s.
032         */
033        public A linearCombination(C a, A b, C s);
034    
035    
036        /**
037         * Linear combination.
038         * @param b algebra element
039         * @param s scalar
040         * @return b + this * s.
041         */
042        public A linearCombination(A b, C s);
043    
044    }