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    }