View Javadoc

1   /*
2    * #%L
3    * prolobjectlink-jpi-jpl7
4    * %%
5    * Copyright (C) 2019 Prolobjectlink Project
6    * %%
7    * Redistribution and use in source and binary forms, with or without
8    * modification, are permitted provided that the following conditions are met:
9    * 
10   * 1. Redistributions of source code must retain the above copyright notice,
11   *    this list of conditions and the following disclaimer.
12   * 2. Redistributions in binary form must reproduce the above copyright notice,
13   *    this list of conditions and the following disclaimer in the documentation
14   *    and/or other materials provided with the distribution.
15   * 
16   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26   * POSSIBILITY OF SUCH DAMAGE.
27   * #L%
28   */
29  package io.github.prolobjectlink.prolog.jpl7;
30  
31  import io.github.prolobjectlink.prolog.AbstractClause;
32  import io.github.prolobjectlink.prolog.PrologClause;
33  import io.github.prolobjectlink.prolog.PrologIndicator;
34  import io.github.prolobjectlink.prolog.PrologProvider;
35  import io.github.prolobjectlink.prolog.PrologTerm;
36  
37  /**
38   * 
39   * @author Jose Zalacain
40   * @since 1.0
41   */
42  final class JplClause extends AbstractClause implements PrologClause {
43  
44  	private final PrologIndicator indicator;
45  
46  	JplClause(PrologProvider provider, PrologTerm head, boolean dynamic, boolean multifile, boolean discontiguous) {
47  		super(provider, head, dynamic, multifile, discontiguous);
48  		this.indicator = new JplIndicator(head.getFunctor(), head.getArity());
49  	}
50  
51  	JplClause(PrologProvider provider, PrologTerm head, PrologTerm body, boolean dynamic, boolean multifile,
52  			boolean discontiguous) {
53  		super(provider, head, body, dynamic, multifile, discontiguous);
54  		this.indicator = new JplIndicator(head.getFunctor(), head.getArity());
55  	}
56  
57  	public PrologIndicator getPrologIndicator() {
58  		return indicator;
59  	}
60  
61  	@Override
62  	public int hashCode() {
63  		final int prime = 31;
64  		int result = super.hashCode();
65  		result = prime * result + ((indicator == null) ? 0 : indicator.hashCode());
66  		return result;
67  	}
68  
69  	@Override
70  	public boolean equals(Object obj) {
71  		if (this == obj)
72  			return true;
73  		if (!super.equals(obj))
74  			return false;
75  		if (getClass() != obj.getClass())
76  			return false;
77  		JplClause other = (JplClause) obj;
78  		if (indicator == null) {
79  			if (other.indicator != null)
80  				return false;
81  		} else if (!indicator.equals(other.indicator)) {
82  			return false;
83  		}
84  		return true;
85  	}
86  }