hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lars Hofhansl (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (HBASE-6919) Remove unnecessary cast from Bytes.readVLong
Date Thu, 25 Oct 2012 16:49:12 GMT

     [ https://issues.apache.org/jira/browse/HBASE-6919?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Lars Hofhansl updated HBASE-6919:
---------------------------------

    Description: 
Remove the throws IOException so that caller doesn't have to catch and ignore.

  public static long readVLong(final byte [] buffer, final int offset)
  throws IOException

Also, add

  public static int readVInt(final byte [] buffer, final int offset)
  throws IOException {
    return (int)readVLong(buffer,offset);
  }

and these are useful too:
{code}
    /**
     * Put long as variable length encoded number at the offset in
     * the result byte array.
     * @param vint Integer to make a vint of.
     * @param result buffer to put vint into
     * @return Vint length in bytes of vint
     */
    public static int vintToBytes(byte[] result, int offset, final long vint) {
      long i = vint;
      if (i >= -112 && i <= 127) {
        result[offset] = (byte) i;
        return 1;
      }

      int len = -112;
      if (i < 0) {
        i ^= -1L; // take one's complement'
        len = -120;
      }

      long tmp = i;
      while (tmp != 0) {
        tmp = tmp >> 8;
        len--;
      }

      result[offset++] = (byte) len;

      len = (len < -120) ? -(len + 120) : -(len + 112);

      for (int idx = len; idx != 0; idx--) {
        int shiftbits = (idx - 1) * 8;
        long mask = 0xFFL << shiftbits;
        result[offset++] = (byte)((i & mask) >> shiftbits);
      }
      return len + 1;
    }

    /**
     * Decode a vint from the buffer pointed at to by ptr and
     * increment the offset of the ptr by the length of the
     * vint.
     * @param ptr a pointer to a byte array buffer
     * @return the decoded vint value as an int
     */
    public static int vintFromBytes(ImmutableBytesWritable ptr) {
        return (int) vlongFromBytes(ptr);
    }
    
    /**
     * Decode a vint from the buffer pointed at to by ptr and
     * increment the offset of the ptr by the length of the
     * vint.
     * @param ptr a pointer to a byte array buffer
     * @return the decoded vint value as a long
     */
    public static long vlongFromBytes(ImmutableBytesWritable ptr) {
        final byte [] buffer = ptr.get();
        final int offset = ptr.getOffset();
        byte firstByte = buffer[offset];
        int len = WritableUtils.decodeVIntSize(firstByte);
        if (len == 1) {
            ptr.set(buffer, offset+1, ptr.getLength());
            return firstByte;
        }
        long i = 0;
        for (int idx = 0; idx < len-1; idx++) {
            byte b = buffer[offset + 1 + idx];
            i = i << 8;
            i = i | (b & 0xFF);
        }
        ptr.set(buffer, offset+len, ptr.getLength());
        return (WritableUtils.isNegativeVInt(firstByte) ? ~i : i);
    }


{code}


  was:
Remove the throws IOException so that caller doesn't have to catch and ignore.

  public static long readVLong(final byte [] buffer, final int offset)
  throws IOException

Also, add

  public static int readVInt(final byte [] buffer, final int offset)
  throws IOException {
    return (int)readVLong(buffer,offset);
  }

and these are useful too:

    /**
     * Put long as variable length encoded number at the offset in
     * the result byte array.
     * @param vint Integer to make a vint of.
     * @param result buffer to put vint into
     * @return Vint length in bytes of vint
     */
    public static int vintToBytes(byte[] result, int offset, final long vint) {
      long i = vint;
      if (i >= -112 && i <= 127) {
        result[offset] = (byte) i;
        return 1;
      }

      int len = -112;
      if (i < 0) {
        i ^= -1L; // take one's complement'
        len = -120;
      }

      long tmp = i;
      while (tmp != 0) {
        tmp = tmp >> 8;
        len--;
      }

      result[offset++] = (byte) len;

      len = (len < -120) ? -(len + 120) : -(len + 112);

      for (int idx = len; idx != 0; idx--) {
        int shiftbits = (idx - 1) * 8;
        long mask = 0xFFL << shiftbits;
        result[offset++] = (byte)((i & mask) >> shiftbits);
      }
      return len + 1;
    }

    /**
     * Decode a vint from the buffer pointed at to by ptr and
     * increment the offset of the ptr by the length of the
     * vint.
     * @param ptr a pointer to a byte array buffer
     * @return the decoded vint value as an int
     */
    public static int vintFromBytes(ImmutableBytesWritable ptr) {
        return (int) vlongFromBytes(ptr);
    }
    
    /**
     * Decode a vint from the buffer pointed at to by ptr and
     * increment the offset of the ptr by the length of the
     * vint.
     * @param ptr a pointer to a byte array buffer
     * @return the decoded vint value as a long
     */
    public static long vlongFromBytes(ImmutableBytesWritable ptr) {
        final byte [] buffer = ptr.get();
        final int offset = ptr.getOffset();
        byte firstByte = buffer[offset];
        int len = WritableUtils.decodeVIntSize(firstByte);
        if (len == 1) {
            ptr.set(buffer, offset+1, ptr.getLength());
            return firstByte;
        }
        long i = 0;
        for (int idx = 0; idx < len-1; idx++) {
            byte b = buffer[offset + 1 + idx];
            i = i << 8;
            i = i | (b & 0xFF);
        }
        ptr.set(buffer, offset+len, ptr.getLength());
        return (WritableUtils.isNegativeVInt(firstByte) ? ~i : i);
    }




    
> Remove unnecessary cast from Bytes.readVLong
> --------------------------------------------
>
>                 Key: HBASE-6919
>                 URL: https://issues.apache.org/jira/browse/HBASE-6919
>             Project: HBase
>          Issue Type: Bug
>            Reporter: James Taylor
>            Priority: Minor
>             Fix For: 0.94.3, 0.96.0
>
>
> Remove the throws IOException so that caller doesn't have to catch and ignore.
>   public static long readVLong(final byte [] buffer, final int offset)
>   throws IOException
> Also, add
>   public static int readVInt(final byte [] buffer, final int offset)
>   throws IOException {
>     return (int)readVLong(buffer,offset);
>   }
> and these are useful too:
> {code}
>     /**
>      * Put long as variable length encoded number at the offset in
>      * the result byte array.
>      * @param vint Integer to make a vint of.
>      * @param result buffer to put vint into
>      * @return Vint length in bytes of vint
>      */
>     public static int vintToBytes(byte[] result, int offset, final long vint) {
>       long i = vint;
>       if (i >= -112 && i <= 127) {
>         result[offset] = (byte) i;
>         return 1;
>       }
>       int len = -112;
>       if (i < 0) {
>         i ^= -1L; // take one's complement'
>         len = -120;
>       }
>       long tmp = i;
>       while (tmp != 0) {
>         tmp = tmp >> 8;
>         len--;
>       }
>       result[offset++] = (byte) len;
>       len = (len < -120) ? -(len + 120) : -(len + 112);
>       for (int idx = len; idx != 0; idx--) {
>         int shiftbits = (idx - 1) * 8;
>         long mask = 0xFFL << shiftbits;
>         result[offset++] = (byte)((i & mask) >> shiftbits);
>       }
>       return len + 1;
>     }
>     /**
>      * Decode a vint from the buffer pointed at to by ptr and
>      * increment the offset of the ptr by the length of the
>      * vint.
>      * @param ptr a pointer to a byte array buffer
>      * @return the decoded vint value as an int
>      */
>     public static int vintFromBytes(ImmutableBytesWritable ptr) {
>         return (int) vlongFromBytes(ptr);
>     }
>     
>     /**
>      * Decode a vint from the buffer pointed at to by ptr and
>      * increment the offset of the ptr by the length of the
>      * vint.
>      * @param ptr a pointer to a byte array buffer
>      * @return the decoded vint value as a long
>      */
>     public static long vlongFromBytes(ImmutableBytesWritable ptr) {
>         final byte [] buffer = ptr.get();
>         final int offset = ptr.getOffset();
>         byte firstByte = buffer[offset];
>         int len = WritableUtils.decodeVIntSize(firstByte);
>         if (len == 1) {
>             ptr.set(buffer, offset+1, ptr.getLength());
>             return firstByte;
>         }
>         long i = 0;
>         for (int idx = 0; idx < len-1; idx++) {
>             byte b = buffer[offset + 1 + idx];
>             i = i << 8;
>             i = i | (b & 0xFF);
>         }
>         ptr.set(buffer, offset+len, ptr.getLength());
>         return (WritableUtils.isNegativeVInt(firstByte) ? ~i : i);
>     }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message