package org.jcodec.containers.mkv.boxes; import java.nio.ByteBuffer; /** * This class is part of JCodec ( www.jcodec.org ) This software is distributed under FreeBSD License * * EBML IO implementation * * @author The JCodec project * */ public class EbmlUint extends EbmlBin { public EbmlUint(byte[] id) { super(id); } public static EbmlUint createEbmlUint(byte[] id, long value) { EbmlUint e = new EbmlUint(id); e.setUint(value); return e; } public void setUint(long value){ this.data = ByteBuffer.wrap(longToBytes(value)); this.dataLen = this.data.limit(); } public long getUint() { long l = 0; long tmp = 0; for (int i = 0; i < data.limit(); i++) { tmp = ((long) data.get(data.limit() - 1 - i)) << 56; tmp >>>= (56 - (i * 8)); l |= tmp; } return l; } public static byte[] longToBytes(long value) { byte[] b = new byte[calculatePayloadSize(value)]; for (int i = b.length - 1; i >= 0; i--) { b[i] = (byte) (value >>> (8 * (b.length - i - 1))); } return b; } public static int calculatePayloadSize(long value) { if (value == 0) return 1; long mask = 0xFF00000000000000L; int i = 0; while ((value & (mask>>>8*i)) == 0 && i < 8) i++; return 8 - i; } }