Java ByteBuffer Write writeSignedVarint(ByteBuffer buffer, int val)

Here you can find the source of writeSignedVarint(ByteBuffer buffer, int val)

Description

Write an signed integer using a variable-length encoding.

License

Open Source License

Parameter

Parameter Description
buffer Buffer to write to
val number to write

Declaration

public static void writeSignedVarint(ByteBuffer buffer, int val) 

Method Source Code

//package com.java2s;
/*/*from  ww  w  .  ja va2  s  .  c  o m*/
 This file is part of ELKI:
 Environment for Developing KDD-Applications Supported by Index-Structures

 Copyright (C) 2013
 Ludwig-Maximilians-Universit?t M?nchen
 Lehr- und Forschungseinheit f?r Datenbanksysteme
 ELKI Development Team

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU Affero General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program 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 Affero General Public License for more details.

 You should have received a copy of the GNU Affero General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

import java.nio.ByteBuffer;

public class Main {
    /**
     * Write an signed integer using a variable-length encoding.
     * 
     * The sign bit is moved to bit 0.
     * 
     * Data is always written in 7-bit little-endian, where the 8th bit is the
     * continuation flag.
     * 
     * @param buffer Buffer to write to
     * @param val number to write
     */
    public static void writeSignedVarint(ByteBuffer buffer, int val) {
        // Move sign to lowest bit
        writeUnsignedVarint(buffer, (val << 1) ^ (val >> 31));
    }

    /**
     * Write an unsigned integer using a variable-length encoding.
     * 
     * Data is always written in 7-bit little-endian, where the 8th bit is the
     * continuation flag.
     * 
     * @param buffer Buffer to write to
     * @param val number to write
     */
    public static void writeUnsignedVarint(ByteBuffer buffer, int val) {
        // Extra bytes have the high bit set
        while ((val & 0x7F) != val) {
            buffer.put((byte) ((val & 0x7F) | 0x80));
            val >>>= 7;
        }
        // Last byte doesn't have high bit set
        buffer.put((byte) (val & 0x7F));
    }
}

Related

  1. writePackageName(ByteBuffer buffer, String packageName)
  2. writeRemaining(WritableByteChannel channel, ByteBuffer buffer)
  3. writeResBit15(int value, ByteBuffer toBuffer)
  4. writeShortString(ByteBuffer buffer, String s)
  5. writeSign(ByteBuffer bb)
  6. writeSize(final int s, ByteBuffer buffer)
  7. writeSlice(ByteBuffer src, int number, ByteBuffer dst)
  8. writeString(ByteBuffer buf, String s)
  9. writeString(ByteBuffer buf, String str)