From f802e004aeef756377f2efe1b4442b156e23c7f7 Mon Sep 17 00:00:00 2001 From: Luc Maisonobe Date: Sun, 19 Apr 2009 16:31:59 +0000 Subject: [PATCH] added Field and FieldElement interfaces to allow algorithms operate on any type of field. This change is related to the discussion on dev list http://markmail.org/message/h2rmq6wo7nwqzx4w git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@766482 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/commons/math/Field.java | 53 ++++++++++++++++ .../org/apache/commons/math/FieldElement.java | 61 +++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 src/java/org/apache/commons/math/Field.java create mode 100644 src/java/org/apache/commons/math/FieldElement.java diff --git a/src/java/org/apache/commons/math/Field.java b/src/java/org/apache/commons/math/Field.java new file mode 100644 index 000000000..c238df37d --- /dev/null +++ b/src/java/org/apache/commons/math/Field.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.math; + +import java.io.Serializable; + +/** + * Interface representing a field. + *

+ * Classes implementing this interface will often be singletons. + *

+ * @param the type of the field elements + * @see FieldElement + * @version $Revision$ $Date$ + * @since 2.0 + */ +public interface Field extends Serializable { + + /** Get the additive identity of the field. + *

+ * The additive identity is the element e0 of the field such that + * for all elements a of the field, the equalities a + e0 = + * e0 + a = a hold. + *

+ * @return additive identity of the field + */ + T getZero(); + + /** Get the multiplicative identity of the field. + *

+ * The multiplicative identity is the element e1 of the field such that + * for all elements a of the field, the equalities a × e1 = + * e1 × a = a hold. + *

+ * @return multiplicative identity of the field + */ + T getOne(); + +} \ No newline at end of file diff --git a/src/java/org/apache/commons/math/FieldElement.java b/src/java/org/apache/commons/math/FieldElement.java new file mode 100644 index 000000000..e00ce114e --- /dev/null +++ b/src/java/org/apache/commons/math/FieldElement.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.math; + +import java.io.Serializable; + +/** + * Interface representing field elements. + * @param the type of the field elements + * @see Field + * @version $Revision$ $Date$ + * @since 2.0 + */ +public interface FieldElement extends Serializable { + + /** Compute this + a. + * @param a element to add + * @return a new element representing this + a + */ + T add(T a); + + /** Compute this - a. + * @param a element to subtract + * @return a new element representing this - a + */ + T subtract(T a); + + /** Compute this × a. + * @param a element to multiply + * @return a new element representing this × a + */ + T multiply(T a); + + /** Compute this ÷ a. + * @param a element to add + * @return a new element representing this ÷ a + * @exception ArithmeticException if a is the zero of the + * additive operation (i.e. additive identity) + */ + T divide(T a) throws ArithmeticException; + + /** Get the {@link Field} to which the instance belongs. + * @return {@link Field} to which the instance belongs + */ + Field getField(); + +} \ No newline at end of file