@NotNull private static String toString(@NotNull OtpErlangList quoted) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("["); for (int i = 0; i < quoted.arity(); i++) { if (i > 0) { stringBuilder.append(","); } stringBuilder.append(toString(quoted.elementAt(i))); } stringBuilder.append("]"); return stringBuilder.toString(); }
public String name() { OtpErlangTuple quotedDefmodule = (OtpErlangTuple) defmodule.quote(); OtpErlangList callArguments = Macro.INSTANCE.callArguments(quotedDefmodule); // Alias + block assert callArguments.arity() == 2; OtpErlangObject quotedName = callArguments.elementAt(0); // TODO handle other forms for module names assert Macro.INSTANCE.isAliases(quotedName); return Macro.INSTANCE.toString(quotedName); }
private static void renderList(OtpErlangList list, XValueTextRenderer renderer) { int i; renderer.renderSpecialSymbol("["); for (i = 0; i < list.arity(); i++) { if (i > 0) { renderer.renderSpecialSymbol(", "); } renderObject(list.elementAt(i), renderer); } // Improper lists have a lastTail OtpErlangObject lastTail = list.getLastTail(); if (lastTail != null) { // Improper lists need to render the head tail joiner, `|`, explicitly renderer.renderSpecialSymbol(" | "); renderObject(lastTail, renderer); } renderer.renderSpecialSymbol("]"); }
private BigCouchUpdateSequence(final String encodedVector, final String packedSeqs) { this.since = encodedVector; final byte[] bytes = new Base64(true).decode(packedSeqs); final OtpInputStream stream = new OtpInputStream(bytes); try { final OtpErlangList list = (OtpErlangList) stream.read_any(); for (int i = 0, arity = list.arity(); i < arity; i++) { final OtpErlangTuple tuple = (OtpErlangTuple) list.elementAt(i); final OtpErlangObject node = tuple.elementAt(0); final OtpErlangObject range = tuple.elementAt(1); final OtpErlangObject seq_obj = tuple.elementAt(2); final OtpErlangLong node_seq; if (seq_obj instanceof OtpErlangLong) { node_seq = (OtpErlangLong) seq_obj; } else if (seq_obj instanceof OtpErlangTuple) { node_seq = (OtpErlangLong) ((OtpErlangTuple)seq_obj).elementAt(0); } else { throw new IllegalArgumentException("could not decode seq"); } vector.put(node + "-" + range, node_seq.longValue()); } } catch (final OtpErlangDecodeException e) { throw new IllegalArgumentException(encodedVector + " not valid."); } }
@Override public OtpErlangObject elementAt(final int i) { return parent.elementAt(i + start); }
@Override public OtpErlangObject getHead() { return parent.elementAt(start); }
@Override public OtpErlangObject[] elements() { final int n = parent.arity() - start; final OtpErlangObject[] res = new OtpErlangObject[n]; for (int i = 0; i < res.length; i++) { res[i] = parent.elementAt(i + start); } return res; }
@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); }
final OtpErlangObject o = elementAt(i); if (!(o instanceof OtpErlangLong)) { throw new OtpErlangException("Non-integer term: " + o);
@Override protected int doHashCode() { final OtpErlangObject.Hash hash = new OtpErlangObject.Hash(4); final int a = arity(); if (a == 0) { return (int) 3468870702L; } for (int i = 0; i < a; i++) { hash.combine(elementAt(i).hashCode()); } final OtpErlangObject t = getLastTail(); if (t != null) { final int h = t.hashCode(); hash.combine(h, h); } return hash.valueOf(); }