View Javadoc

1   /*
2    * #%L
3    * prolobjectlink-jpi-tuprolog
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.tuprolog;
23  
24  import java.util.AbstractSet;
25  import java.util.HashSet;
26  import java.util.Iterator;
27  import java.util.List;
28  import java.util.Set;
29  
30  import alice.tuprolog.Operator;
31  import alice.tuprolog.Prolog;
32  import io.github.prolobjectlink.prolog.AbstractOperator;
33  import io.github.prolobjectlink.prolog.PrologOperator;
34  import io.github.prolobjectlink.prolog.PrologOperatorSet;
35  
36  /**
37   * 
38   * @author Jose Zalacain
39   * @since 1.0
40   */
41  final class TuPrologOperatorSet extends AbstractSet<PrologOperator> implements PrologOperatorSet {
42  
43  	private final Set<PrologOperator> operators;
44  	private final List<Operator> operatorsList;
45  
46  	public TuPrologOperatorSet() {
47  		Prolog engine = new Prolog();
48  		operatorsList = engine.getOperatorManager().getOperators();
49  		operators = new HashSet<PrologOperator>(operatorsList.size());
50  		for (Operator operator : operatorsList) {
51  			String name = operator.name;
52  			int priority = operator.prio;
53  			String specifier = operator.type;
54  			AbstractOperator op = new TuPrologOperator(priority, specifier, name);
55  			operators.add(op);
56  		}
57  	}
58  
59  	public boolean currentOp(String opreator) {
60  		for (Operator op : operatorsList) {
61  			if (op.name.equals(opreator)) {
62  				return true;
63  			}
64  		}
65  		return false;
66  	}
67  
68  	@Override
69  	public Iterator<PrologOperator> iterator() {
70  		return operators.iterator();
71  	}
72  
73  	@Override
74  	public int size() {
75  		return operators.size();
76  	}
77  
78  	@Override
79  	public int hashCode() {
80  		final int prime = 31;
81  		int result = super.hashCode();
82  		result = prime * result + operators.hashCode();
83  		return result;
84  	}
85  
86  	@Override
87  	public boolean equals(Object obj) {
88  		if (this == obj)
89  			return true;
90  		if (!super.equals(obj))
91  			return false;
92  		TuPrologOperatorSet other = (TuPrologOperatorSet) obj;
93  		return operators.equals(other.operators);
94  
95  	}
96  
97  }