package org.infinispan.server.core.transport; import io.netty.buffer.ByteBuf; /** * Reads and writes unsigned variable length long values. Even though it's deprecated, do not * remove from source code for the moment because it's a good scala example and could be used * as reference. * * @author Galder ZamarreƱo * @since 4.1 */ public class VLong { public static void write(ByteBuf out, long i) { if ((i & ~0x7F) == 0) out.writeByte((byte) i); else { out.writeByte((byte) ((i & 0x7f) | 0x80)); write(out, i >>> 7); } } public static long read(ByteBuf in) { byte b = in.readByte(); return read(in, b, 7, b & 0x7F, 1); } private static long read(ByteBuf in, byte b, int shift, long i, int count) { if ((b & 0x80) == 0) return i; else { if (count > 9) throw new IllegalStateException( "Stream corrupted. A variable length long cannot be longer than 9 bytes."); byte bb = in.readByte(); return read(in, bb, shift + 7, i | (bb & 0x7FL) << shift, count + 1); } } }