/**
* JEBML - Java library to read/write EBML/Matroska elements.
* Copyright (C) 2004 Jory Stone <jebml@jory.info>
* Based on Javatroska (C) 2002 John Cannon <spyder@matroska.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.jcodec.containers.mkv.ebml;
/*
* UnsignedIntegerElement.java
*
* Created on February 15, 2003, 6:27 PM
*/
/**
* Basic class for the Unsigned Integer data type in EBML.
*
* @author John Cannon
*/
public class UnsignedIntegerElement extends BinaryElement {
public UnsignedIntegerElement(byte[] typeID) {
super(typeID);
}
public UnsignedIntegerElement(byte[] typeID, long value) {
super(typeID);
set(value);
}
public void set(long value) {
setData(longToBytes(value));
}
public static byte[] longToBytes(long value) {
byte[] b = new byte[getMinByteSizeUnsigned(value)];
for (int i = b.length - 1; i >= 0; i--) {
b[i] = (byte) (value >>> (8 * (b.length - i - 1)));
}
return b;
}
public static int getMinByteSizeUnsigned(long value) {
int size = 8;
long mask = 0xFF00000000000000L;
for (int i = 0; i < 8; i++) {
if ((value & mask) == 0) {
mask = mask >>> 8;
size--;
} else {
return size;
}
}
return 1;
}
public long get() {
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;
}
}