001: /*
002: * Copyright (C) 1999-2004 <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</a>
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: */
018: package org.mandarax.kernel;
019:
020: /**
021: * Abstract super class for simple predicates.
022: * @author <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</A>
023: * @version 3.4 <7 March 05>
024: * @since 1.3
025: */
026: abstract class SimpleConstructor {
027:
028: private Class[] structure = null;
029: private String name = null;
030:
031: /**
032: * Constructor.
033: */
034: public SimpleConstructor() {
035: super ();
036: }
037:
038: /**
039: * Constructor.
040: * @param aName the name of the predicate
041: * @param types the structure of the predicate (the types of the terms)
042: */
043: public SimpleConstructor(String aName, Class[] types) {
044: super ();
045:
046: name = aName;
047: structure = types;
048: }
049:
050: /**
051: * Indicates whether the two objects are equal.
052: * @return true if the objects are equal, false otherwise
053: * @param obj the object to compare
054: */
055: public boolean equals(Object obj) {
056: if (obj instanceof SimpleConstructor) {
057: SimpleConstructor sc = (SimpleConstructor) obj;
058:
059: if (sc.name.equals(name)
060: && (structure.length == sc.structure.length)) {
061: for (int i = 0; i < structure.length; i++) {
062: if (structure[i] != sc.structure[i]) {
063: return false;
064: }
065: }
066:
067: return true;
068: }
069: }
070:
071: return false;
072: }
073:
074: /**
075: * Get the name of the predicate or function.
076: * @return the name of the predicate or function
077: */
078: public String getName() {
079: return name;
080: }
081:
082: /**
083: * Set the name of the predicate or function.
084: * @param the name of the predicate or function
085: */
086: public void setName(String aName) {
087: name = aName;
088: }
089:
090: /**
091: * Get the structure of the predicate or function.
092: * @return the structure of the predicate or function
093: */
094: public Class[] getStructure() {
095: return structure;
096: }
097:
098: /**
099: * Set the structure of the predicate or function.
100: * @param struct the structure of the predicate or function
101: */
102: public void setStructure(Class[] struct) {
103: structure = struct;
104: }
105:
106: /**
107: * Get the hashcode of the object.
108: * @return the hash code value
109: */
110: public int hashCode() {
111: int h = (name == null) ? 0 : name.hashCode();
112:
113: for (int i = 0; i < structure.length; i++) {
114: h = h ^ structure[i].hashCode();
115: }
116:
117: return h;
118: }
119:
120: /**
121: * Perform the function or predicate using an array of terms as parameters.
122: * @return the result of the perform operation
123: * @param parameter an array of terms
124: * @param session a session object
125: * @throws java.lang.UnsupportedOperationException - thrown if this constructor does not have a sematics and this operation cannot be supported
126: * @throws java.lang.IllegalArgumentException
127: *
128: */
129: public Object perform(Term[] parameter, Session session)
130: throws IllegalArgumentException,
131: UnsupportedOperationException {
132: throw new UnsupportedOperationException(
133: "Simple predicates / simple functions do not suppot perform");
134: }
135:
136: /**
137: * Convert the object to a string.
138: * @return the string representation of this object
139: */
140: public String toString() {
141: return getName();
142: }
143: }
|