@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."); } }
public OtpErlangObject getHead() { if (arity() > 0) { return elems[0]; } return null; }
@Override public int arity() { return parent.arity() - start; }
/** * Get the specified element from the list. * * @param i * the index of the requested element. List elements are numbered * as array elements, starting at 0. * * @return the requested element, of null if i is not a valid element index. */ public OtpErlangObject elementAt(final int i) { if (i >= arity() || i < 0) { return null; } return elems[i]; }
/** * Get all the elements from the list as an array. * * @return an array containing all of the list's elements. */ public OtpErlangObject[] elements() { if (arity() == 0) { return NO_ELEMENTS; } final OtpErlangObject[] res = new OtpErlangObject[arity()]; System.arraycopy(elems, 0, res, 0, res.length); return res; }
@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; }
public OtpErlangObject getNthTail(final int n) { final int arity = arity(); if (arity >= n) { if (arity == n && lastTail != null) { return lastTail; } return new SubList(this, n); } return null; }
protected String toString(final int start) { final StringBuffer s = new StringBuffer(); s.append("["); for (int i = start; i < arity(); i++) { if (i > start) { s.append(","); } s.append(elems[i].toString()); } if (lastTail != null) { s.append("|").append(lastTail.toString()); } s.append("]"); return s.toString(); }
protected void encode(final OtpOutputStream buf, final int start) { final int arity = arity() - start; if (arity > 0) { buf.write_list_head(arity); for (int i = start; i < arity + start; i++) { buf.write_any(elems[i]); } } if (lastTail == null) { buf.write_nil(); } else { buf.write_any(lastTail); } }
@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); }
throw new OtpErlangException("Non-proper list: " + this); final int[] values = new int[arity()]; for (int i = 0; i < values.length; ++i) { final OtpErlangObject o = elementAt(i);
assert (l.arity() == 0); return null;
@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(); }