View Javadoc

1   /*-
2    * #%L
3    * prolobjectlink-jpi-jpl7
4    * %%
5    * Copyright (C) 2020 - 2021 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 java.util.AbstractList;
32  import java.util.ArrayList;
33  import java.util.List;
34  
35  import io.github.prolobjectlink.prolog.PrologClause;
36  import io.github.prolobjectlink.prolog.PrologClauses;
37  
38  class JplClauses extends AbstractList<PrologClause> implements PrologClauses {
39  
40  	private final int arity;
41  	private final String functor;
42  	private final List<PrologClause> list;
43  
44  	JplClauses(String functor, int arity) {
45  		list = new ArrayList<PrologClause>();
46  		this.functor = functor;
47  		this.arity = arity;
48  	}
49  
50  	public void add(int index, PrologClause element) {
51  		list.add(index, element);
52  	}
53  
54  	public PrologClause remove(int index) {
55  		return list.remove(index);
56  	}
57  
58  	public PrologClause get(int index) {
59  		return list.get(index);
60  	}
61  
62  	public int size() {
63  		return list.size();
64  	}
65  
66  	public boolean isDynamic() {
67  		for (PrologClause prologClause : list) {
68  			if (!prologClause.isDynamic()) {
69  				return false;
70  			}
71  		}
72  		return true;
73  	}
74  
75  	public boolean isMultifile() {
76  		for (PrologClause prologClause : list) {
77  			if (!prologClause.isMultifile()) {
78  				return false;
79  			}
80  		}
81  		return true;
82  	}
83  
84  	public boolean isDiscontiguous() {
85  		for (PrologClause prologClause : list) {
86  			if (!prologClause.isDiscontiguous()) {
87  				return false;
88  			}
89  		}
90  		return true;
91  	}
92  
93  	public String getIndicator() {
94  		return functor + "/" + arity;
95  	}
96  
97  	@Override
98  	public int hashCode() {
99  		final int prime = 31;
100 		int result = super.hashCode();
101 		result = prime * result + ((list == null) ? 0 : list.hashCode());
102 		return result;
103 	}
104 
105 	@Override
106 	public boolean equals(Object obj) {
107 		if (this == obj)
108 			return true;
109 		if (!super.equals(obj))
110 			return false;
111 		if (getClass() != obj.getClass())
112 			return false;
113 		JplClauses other = (JplClauses) obj;
114 		if (list == null) {
115 			if (other.list != null)
116 				return false;
117 		} else if (!list.equals(other.list)) {
118 			return false;
119 		}
120 		return true;
121 	}
122 
123 }