1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package io.github.prolobjectlink.prolog.jpl;
23
24 import static io.github.prolobjectlink.prolog.PrologTermType.OBJECT_TYPE;
25
26 import io.github.prolobjectlink.prolog.PrologProvider;
27 import io.github.prolobjectlink.prolog.PrologReference;
28 import io.github.prolobjectlink.prolog.PrologTerm;
29 import jpl.JPL;
30 import jpl.Term;
31
32 public final class JplReference extends JplTerm implements PrologReference {
33
34 JplReference(PrologProvider provider, Term reference) {
35 super(OBJECT_TYPE, provider, reference);
36 }
37
38 JplReference(PrologProvider provider, Object reference) {
39 super(OBJECT_TYPE, provider, JPL.newJRef(reference));
40 }
41
42 @Override
43 public Class<?> getReferenceType() {
44 Object object = getObject();
45 if (object != null) {
46 object.getClass();
47 }
48 return null;
49 }
50
51 @Override
52 public int getArity() {
53 return value.arity();
54 }
55
56 @Override
57 public String getFunctor() {
58 return value.name();
59 }
60
61 @Override
62 public PrologTerm[] getArguments() {
63 return toTermArray(value.args(), PrologTerm[].class);
64 }
65
66 public Object getObject() {
67 if (value.isJFalse()) {
68 return Boolean.FALSE;
69 } else if (value.isJTrue()) {
70 return Boolean.TRUE;
71 } else if (value.isJVoid()) {
72 return void.class;
73 } else if (value.isJRef()) {
74 return value.jrefToObject();
75 }
76 return null;
77 }
78
79 }