From 2fdc3d313485a76b6acf12154b8f3bd3e1ceb2ca Mon Sep 17 00:00:00 2001 From: Dmitriy Kargapolov Date: Tue, 3 Feb 2015 16:39:39 -0500 Subject: jinterface: match/bind added to OtpErlangObject Adding these two methods to the OtpErlangObject abstract class makes possible implementing of pattern matching and variable binding for all types of Erlang terms. Particular implementations may vary and include additional classes to define Variable placeholder objects and Bindings objects. Also Parser class may be added to facilitate creating complex patterns and terms. The purpose of this commit is to provide low level interface base methods sufficient for variety of higher level pattern matching/variable binding implementations. OtpErlangMap class is re-designed for efficiency (it is based on HashMap now). All changes are backward-compatible. Detailed test cases implemented. --- .../com/ericsson/otp/erlang/OtpErlangObject.java | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java') diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java index 7ab160bcdd..9339d3749b 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java @@ -80,6 +80,32 @@ public abstract class OtpErlangObject implements Serializable, Cloneable { @Override public abstract boolean equals(Object o); + /** + * Perform match operation against given term. + * + * @param term + * the object to match + * @param binds + * variable bindings + * @return true if match succeeded + */ + public boolean match(final OtpErlangObject term, final T binds) { + return equals(term); + } + + /** + * Make new Erlang term replacing variables with the respective values from + * bindings argument(s). + * + * @param binds + * variable bindings + * @return new term + * @throws OtpErlangException + */ + public OtpErlangObject bind(final T binds) throws OtpErlangException { + return this; + } + @Override public int hashCode() { if (hashCodeValue == 0) { -- cgit v1.2.3