22
33import com .ugos .jiprolog .engine .*;
44import li .cil .oc .server .component .HandleValue ;
5+ import scala .collection .JavaConverters ;
56
7+ import java .util .Arrays ;
8+ import java .util .Map ;
9+ import java .util .Set ;
610import java .util .stream .Collectors ;
711
812public abstract class OcproBuiltIn extends BuiltIn {
913
14+ private ConsList entryToConsList (Map .Entry entry ) {
15+ return ConsList .create (Arrays .asList (rawToPrologObject (entry .getKey ()), rawToPrologObject (entry .getValue ())));
16+ }
17+ private boolean isMap (Object o ) {
18+ return o instanceof Map || o instanceof scala .collection .Map ;
19+ }
20+ private Map <Object , Object > toMap (Object o ) {
21+ if (o instanceof scala .collection .Map ) {
22+ return (Map <Object , Object >) JavaConverters .mapAsJavaMapConverter ((scala .collection .Map ) o ).asJava ();
23+ }
24+ return (Map <Object , Object >) o ;
25+ }
26+
27+ @ SuppressWarnings ("unchecked" )
1028 public PrologObject rawToPrologObject (Object raw ) {
1129 if (raw instanceof Boolean ) {
1230 Boolean b = (Boolean ) raw ;
@@ -27,6 +45,20 @@ public PrologObject rawToPrologObject(Object raw) {
2745 if (raw instanceof HandleValue ) {
2846 return Expression .createNumber (((HandleValue ) raw ).handle ());
2947 }
48+ if (isMap (raw )) {
49+ Map <Object , Object > map = toMap (raw );
50+ return ConsList .create (map .entrySet ().stream ().map (this ::entryToConsList ).collect (Collectors .toList ()));
51+ }
52+ if (raw instanceof Object []) {
53+ Object [] objects = (Object []) raw ;
54+ return ConsList .create (Arrays .stream (objects ).map (this ::rawToPrologObject ).collect (Collectors .toList ()));
55+ }
56+ if (raw instanceof double []) {
57+ return ConsList .create (Arrays .stream ((double []) raw ).boxed ().map (this ::rawToPrologObject ).collect (Collectors .toList ()));
58+ }
59+ if (raw instanceof int []) {
60+ return ConsList .create (Arrays .stream ((int []) raw ).boxed ().map (this ::rawToPrologObject ).collect (Collectors .toList ()));
61+ }
3062 if (raw == null ) {
3163 return Atom .createAtom ("null" );
3264 }
0 commit comments