001 /**
002 * Copyright (C) 2007-2011, Jens Lehmann
003 *
004 * This file is part of DL-Learner.
005 *
006 * DL-Learner is free software; you can redistribute it and/or modify
007 * it under the terms of the GNU General Public License as published by
008 * the Free Software Foundation; either version 3 of the License, or
009 * (at your option) any later version.
010 *
011 * DL-Learner is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014 * GNU General Public License for more details.
015 *
016 * You should have received a copy of the GNU General Public License
017 * along with this program. If not, see <http://www.gnu.org/licenses/>.
018 */
019
020 package org.dllearner.prolog;
021
022 /**
023 *
024 * @author Sebastian Bader
025 *
026 */
027 public class FunctionDefinition {
028 public static int TYPE_USUAL = 0;
029 public static int TYPE_INFIX = 1;
030 public static int TYPE_POSTFIX = 2;
031 public static int TYPE_PREFIX = 3;
032
033 public static String[] TYPE_NAMES = new String[]{"usual", "infix", "postfix", "prefix"};
034
035 private String name;
036 private int arity;
037 private int type;
038
039 public FunctionDefinition(String name, int arity, int type) {
040 super();
041 this.name = name;
042 this.arity = arity;
043 }
044
045 public FunctionDefinition(Function function) {
046 this(function.getName(), function.getArity(), function.getType());
047 }
048
049 public int getArity() {
050 return arity;
051 }
052 public String getName() {
053 return name;
054 }
055 public int getType() {
056 return type;
057 }
058
059 @Override
060 public int hashCode() {
061 return name.hashCode() * (arity + 1);
062 }
063
064 @Override
065 public boolean equals(Object obj) {
066 if (obj == null)
067 return false;
068 try {
069 FunctionDefinition fd = (FunctionDefinition) obj;
070 if (fd.getArity() != getArity())
071 return false;
072 if (!fd.getName().equals(getName()))
073 return false;
074 if (fd.getType() != getType())
075 return false;
076 } catch (ClassCastException cce) {
077 return false;
078 }
079 return true;
080 }
081
082 @Override
083 public String toString() {
084 return name+TYPE_NAMES[type]+"/"+arity;
085 }
086 }