View Javadoc

1   /*
2    * #%L
3    * prolobjectlink-jpi-jpl
4    * %%
5    * Copyright (C) 2019 Prolobjectlink Project
6    * %%
7    * This program is free software: you can redistribute it and/or modify
8    * it under the terms of the GNU Lesser General Public License as
9    * published by the Free Software Foundation, either version 2.1 of the
10   * License, or (at your option) any later version.
11   * 
12   * This program is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   * GNU General Lesser Public License for more details.
16   * 
17   * You should have received a copy of the GNU General Lesser Public
18   * License along with this program.  If not, see
19   * <http://www.gnu.org/licenses/lgpl-2.1.html>.
20   * #L%
21   */
22  package io.github.prolobjectlink.prolog.jpl;
23  
24  import io.github.prolobjectlink.prolog.AbstractClause;
25  import io.github.prolobjectlink.prolog.PrologClause;
26  import io.github.prolobjectlink.prolog.PrologIndicator;
27  import io.github.prolobjectlink.prolog.PrologProvider;
28  import io.github.prolobjectlink.prolog.PrologTerm;
29  
30  /**
31   * 
32   * @author Jose Zalacain
33   * @since 1.0
34   */
35  final class JplClause extends AbstractClause implements PrologClause {
36  
37  	private final PrologIndicator indicator;
38  
39  	JplClause(PrologProvider provider, PrologTerm head, boolean dynamic, boolean multifile, boolean discontiguous) {
40  		super(provider, head, dynamic, multifile, discontiguous);
41  		this.indicator = new JplIndicator(head.getFunctor(), head.getArity());
42  	}
43  
44  	JplClause(PrologProvider provider, PrologTerm head, PrologTerm body, boolean dynamic, boolean multifile,
45  			boolean discontiguous) {
46  		super(provider, head, body, dynamic, multifile, discontiguous);
47  		this.indicator = new JplIndicator(head.getFunctor(), head.getArity());
48  	}
49  
50  	public PrologIndicator getPrologIndicator() {
51  		return indicator;
52  	}
53  
54  	@Override
55  	public int hashCode() {
56  		final int prime = 31;
57  		int result = super.hashCode();
58  		result = prime * result + ((indicator == null) ? 0 : indicator.hashCode());
59  		return result;
60  	}
61  
62  	@Override
63  	public boolean equals(Object obj) {
64  		if (this == obj)
65  			return true;
66  		if (!super.equals(obj))
67  			return false;
68  		if (getClass() != obj.getClass())
69  			return false;
70  		JplClause other = (JplClause) obj;
71  		if (indicator == null) {
72  			if (other.indicator != null)
73  				return false;
74  		} else if (!indicator.equals(other.indicator)) {
75  			return false;
76  		}
77  		return true;
78  	}
79  }