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 static io.github.prolobjectlink.prolog.PrologTermType.STRUCTURE_TYPE;
32
33 import org.jpl7.Compound;
34 import org.jpl7.Term;
35
36 import io.github.prolobjectlink.prolog.PrologProvider;
37 import io.github.prolobjectlink.prolog.PrologStructure;
38 import io.github.prolobjectlink.prolog.PrologTerm;
39
40
41
42
43
44
45 class JplStructure extends JplTerm implements PrologStructure {
46
47 JplStructure(PrologProvider provider, String functor, PrologTerm... arguments) {
48 super(STRUCTURE_TYPE, provider);
49 Term[] terms = new Term[arguments.length];
50 for (int i = 0; i < arguments.length; i++) {
51 terms[i] = ((JplTerm) arguments[i]).value;
52 }
53 value = new Compound(removeQuoted(functor), terms);
54 }
55
56 JplStructure(PrologProvider provider, String functor, Term... arguments) {
57 super(STRUCTURE_TYPE, provider);
58 value = new Compound(removeQuoted(functor), arguments);
59 }
60
61 JplStructure(PrologProvider provider, PrologTerm left, String operator, PrologTerm right) {
62 super(STRUCTURE_TYPE, provider);
63 Term leftOperand = ((JplTerm) left).value;
64 Term rightOperand = ((JplTerm) right).value;
65 value = new Compound(operator, new Term[] { leftOperand, rightOperand });
66 }
67
68 JplStructure(PrologProvider provider, Term left, String functor, Term right) {
69 super(STRUCTURE_TYPE, provider, new Compound(functor, new Term[] { left, right }));
70 }
71
72 JplStructure(int objectType, PrologProvider provider, Term newJRef) {
73 super(objectType, provider, newJRef);
74 }
75
76 public PrologTerm getArgument(int index) {
77 checkIndex(index, getArity());
78 return getArguments()[index];
79 }
80
81 public PrologTerm[] getArguments() {
82 Compound structure = (Compound) value;
83 int arity = structure.arity();
84 PrologTerm[] arguments = new PrologTerm[arity];
85 for (int i = 0; i < arity; i++) {
86 arguments[i] = toTerm(structure.arg(i + 1), PrologTerm.class);
87 }
88 return arguments;
89 }
90
91 public int getArity() {
92 Compound structure = (Compound) value;
93 return structure.arity();
94 }
95
96 public String getFunctor() {
97 Compound structure = (Compound) value;
98 return structure.name();
99 }
100
101 public final PrologTerm getRight() {
102 return getArgument(1);
103 }
104
105 public final PrologTerm getLeft() {
106 return getArgument(0);
107 }
108
109 public final String getOperator() {
110 return getFunctor();
111 }
112
113 }