1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 }