1064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver/* 2064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * Copyright 2012, Google Inc. 3064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * All rights reserved. 4064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * 5064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * Redistribution and use in source and binary forms, with or without 6064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * modification, are permitted provided that the following conditions are 7064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * met: 8064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * 9064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * * Redistributions of source code must retain the above copyright 10064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * notice, this list of conditions and the following disclaimer. 11064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * * Redistributions in binary form must reproduce the above 12064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * copyright notice, this list of conditions and the following disclaimer 13064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * in the documentation and/or other materials provided with the 14064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * distribution. 15064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * * Neither the name of Google Inc. nor the names of its 16064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * contributors may be used to endorse or promote products derived from 17064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * this software without specific prior written permission. 18064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * 19064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver */ 31064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver 32064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruverpackage org.jf.util; 33064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver 34064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruverpublic abstract class NibbleUtils { 35064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver /** 36064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * Extracts the high signed 4-bit nibble from the least significant 37064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * byte of the given value 38064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * @param value the value to extract the nibble from 39064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * @return the extracted signed nibble value 40064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver */ 41064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver public static int extractHighSignedNibble(int value) { 42064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver return (value << 24) >> 28; 43064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver } 44064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver 45064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver /** 46064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * Extracts the low signed 4-bit nibble from the least significant 47064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * byte of the given value 48064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * @param value the value to extract the nibble from 49064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * @return the extracted signed nibble value 50064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver */ 51064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver public static int extractLowSignedNibble(int value) { 52064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver return (value << 28) >> 28; 53064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver } 54064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver 55064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver /** 56064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * Extracts the high unsigned 4-bit nibble from the least significant 57064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * byte of the given value 58064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * @param value the value to extract the nibble from 59064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * @return the extracted unsigned nibble value 60064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver */ 61064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver public static int extractHighUnsignedNibble(int value) { 62064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver return (value & 0xF0) >>> 4; 63064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver } 64064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver 65064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver /** 66064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * Extracts the low unsigned 4-bit nibble from the least significant 67064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * byte of the given value 68064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * @param value the value to extract the nibble from 69064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver * @return the extracted unsigned nibble value 70064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver */ 71064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver public static int extractLowUnsignedNibble(int value) { 72064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver return value & 0x0F; 73064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver } 74064d77c3ad2869aeb34f012f997e054e779e0a29Ben Gruver} 75