diff options
author | Zandra Hird <[email protected]> | 2015-04-29 14:41:39 +0200 |
---|---|---|
committer | Zandra Hird <[email protected]> | 2015-04-29 14:41:39 +0200 |
commit | de6ef63b143557558436b5c0213030a27d78da0d (patch) | |
tree | d84847fe669fd707d1e3039507906908834f6513 /lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java | |
parent | 65cd6574a37af1dfcc01fc4cc9681b4b758f1284 (diff) | |
parent | 2fdc3d313485a76b6acf12154b8f3bd3e1ceb2ca (diff) | |
download | otp-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.java | 48 |
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; } |