001 /* 002 * $Id: AbelianGroupElem.java 1708 2008-02-24 17:28:36Z kredel $ 003 */ 004 005 package edu.jas.structure; 006 007 008 /** 009 * Abelian group element interface. 010 * Defines the additive methods. 011 * @param <C> element type 012 * @author Heinz Kredel 013 */ 014 015 public interface AbelianGroupElem<C extends AbelianGroupElem<C>> 016 extends Element<C> { 017 018 019 /** 020 * Test if this is zero. 021 * @return true if this is 0, else false. 022 */ 023 public boolean isZERO(); 024 025 026 /** 027 * Signum. 028 * @return the sign of this. 029 */ 030 public int signum(); 031 032 033 /** 034 * Sum of this and S. 035 * @param S 036 * @return this + S. 037 */ 038 public C sum(C S); 039 //public <T extends C> T sum(T S); 040 041 042 /** 043 * Subtract S from this. 044 * @param S 045 * @return this - S. 046 */ 047 public C subtract(C S); 048 049 050 /** 051 * Negate this. 052 * @return - this. 053 */ 054 public C negate(); 055 056 057 /** 058 * Absolute value of this. 059 * @return |this|. 060 */ 061 public C abs(); 062 063 }