/* * ------------------------------------------------------------------- * * Copyright (c) 2013 Dave Parfitt * * This file is provided to you under the Apache License, * Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain * a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * ------------------------------------------------------------------- */ package com.metadave.etp.rep; import com.ericsson.otp.erlang.OtpErlangObject; import java.util.ArrayList; import java.util.List; public class ETPBinary extends ETPTerm<List<ETPBinary.ETPBinaryValue>> { public ETPBinary(List<ETPBinaryValue> value) { super(value); } public ETPBinary(ETPBinaryValue ... values) { List<ETPBinaryValue> vs = new ArrayList<ETPBinaryValue>(); for(ETPBinaryValue v : values) { vs.add(v); } this.value = vs; } public ETPTerm getValue(int index) { // TODO: check for valid index ranges return value.get(index); } @Override public String toString() { StringBuilder b = new StringBuilder(); b.append("<<"); boolean isFirst = true; for(ETPBinaryValue v : value) { if(isFirst) { b.append(v.toString()); isFirst = false; } else { b.append(","); b.append(v.toString()); } } b.append(">>"); return b.toString(); } @Override public OtpErlangObject getOTP() { return null; } public static abstract class ETPBinaryValue<V> extends ETPTerm<V> { private Integer size = null; protected ETPBinaryValue(V value) { this.value = value; } protected ETPBinaryValue(V value, int size) { this.size = size; this.value = value; } protected ETPBinaryValue() { } public Integer getSize() { return size; } public void setSize(Integer size) { this.size = size; } } public static class BinInt extends ETPBinaryValue<Long> { public BinInt(Long value) { super(value); } public BinInt(Long value, int size) { super(value, size); } @Override public String toString() { if(this.getSize() != null) { return value.toString() + ":" + this.getSize().toString(); } else { return value.toString(); } } @Override public OtpErlangObject getOTP() { return null; } } public static class BinString extends ETPBinaryValue<String> { public BinString(String value) { super(value); } public BinString(String value, int size) { super(value, size); } @Override public String toString() { return "\"" + value + "\""; } @Override public OtpErlangObject getOTP() { return null; } } }