aboutsummaryrefslogtreecommitdiffstats
path: root/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java
diff options
context:
space:
mode:
authorZandra Hird <[email protected]>2015-04-29 14:41:39 +0200
committerZandra Hird <[email protected]>2015-04-29 14:41:39 +0200
commitde6ef63b143557558436b5c0213030a27d78da0d (patch)
treed84847fe669fd707d1e3039507906908834f6513 /lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java
parent65cd6574a37af1dfcc01fc4cc9681b4b758f1284 (diff)
parent2fdc3d313485a76b6acf12154b8f3bd3e1ceb2ca (diff)
downloadotp-de6ef63b143557558436b5c0213030a27d78da0d.tar.gz
otp-de6ef63b143557558436b5c0213030a27d78da0d.tar.bz2
otp-de6ef63b143557558436b5c0213030a27d78da0d.zip
Merge branch 'x0id/jinterface_generic_match'
* x0id/jinterface_generic_match: jinterface: match/bind added to OtpErlangObject fix typo error from recent merge OTP-12691
Diffstat (limited to 'lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java')
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java48
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java
index 990e50ddcd..268261ec10 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java
@@ -297,6 +297,54 @@ public class OtpErlangList extends OtpErlangObject implements
return getLastTail().equals(l.getLastTail());
}
+ @Override
+ public <T> boolean match(final OtpErlangObject term, final T bindings) {
+ if (!(term instanceof OtpErlangList)) {
+ return false;
+ }
+ final OtpErlangList that = (OtpErlangList) term;
+
+ final int thisArity = this.arity();
+ final int thatArity = that.arity();
+ final OtpErlangObject thisTail = this.getLastTail();
+ final OtpErlangObject thatTail = that.getLastTail();
+
+ if (thisTail == null) {
+ if (thisArity != thatArity || thatTail != null) {
+ return false;
+ }
+ } else {
+ if (thisArity > thatArity) {
+ return false;
+ }
+ }
+ for (int i = 0; i < thisArity; i++) {
+ if (!elementAt(i).match(that.elementAt(i), bindings)) {
+ return false;
+ }
+ }
+ if (thisTail == null) {
+ return true;
+ }
+ return thisTail.match(that.getNthTail(thisArity), bindings);
+ }
+
+ @Override
+ public <T> OtpErlangObject bind(final T binds) throws OtpErlangException {
+ final OtpErlangList list = (OtpErlangList) this.clone();
+
+ final int a = list.elems.length;
+ for (int i = 0; i < a; i++) {
+ list.elems[i] = list.elems[i].bind(binds);
+ }
+
+ if (list.lastTail != null) {
+ list.lastTail = list.lastTail.bind(binds);
+ }
+
+ return list;
+ }
+
public OtpErlangObject getLastTail() {
return lastTail;
}