Frames | No Frames |
1: /* Copyright (C) 2000, 2002 Free Software Foundation 2: 3: This file is part of GNU Classpath. 4: 5: GNU Classpath is free software; you can redistribute it and/or modify 6: it under the terms of the GNU General Public License as published by 7: the Free Software Foundation; either version 2, or (at your option) 8: any later version. 9: 10: GNU Classpath is distributed in the hope that it will be useful, but 11: WITHOUT ANY WARRANTY; without even the implied warranty of 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13: General Public License for more details. 14: 15: You should have received a copy of the GNU General Public License 16: along with GNU Classpath; see the file COPYING. If not, write to the 17: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18: 02110-1301 USA. 19: 20: Linking this library statically or dynamically with other modules is 21: making a combined work based on this library. Thus, the terms and 22: conditions of the GNU General Public License cover the whole 23: combination. 24: 25: As a special exception, the copyright holders of this library give you 26: permission to link this library with independent modules to produce an 27: executable, regardless of the license terms of these independent 28: modules, and to copy and distribute the resulting executable under 29: terms of your choice, provided that you also meet, for each linked 30: independent module, the terms and conditions of the license of that 31: module. An independent module is a module which is not derived from 32: or based on this library. If you modify this library, you may extend 33: this exception to your version of the library, but you are not 34: obligated to do so. If you do not wish to do so, delete this 35: exception statement from your version. */ 36: 37: package gnu.java.awt; 38: 39: /** 40: * Simple transparent utility class that can be used to perform bit 41: * mask extent calculations. 42: */ 43: public final class BitMaskExtent 44: { 45: /** The number of the least significant bit of the bit mask extent. */ 46: public byte leastSignificantBit; 47: 48: /** The number of bits in the bit mask extent. */ 49: public byte bitWidth; 50: 51: /** 52: * Set the bit mask. This will calculate and set the leastSignificantBit 53: * and bitWidth fields. 54: * 55: * @see #leastSignificantBit 56: * @see #bitWidth 57: */ 58: public void setMask(long mask) 59: { 60: leastSignificantBit = 0; 61: bitWidth = 0; 62: if (mask == 0) return; 63: long shiftMask = mask; 64: for (; (shiftMask&1) == 0; shiftMask >>>=1) leastSignificantBit++; 65: for (; (shiftMask&1) != 0; shiftMask >>>=1) bitWidth++; 66: 67: if (shiftMask != 0) 68: throw new IllegalArgumentException("mask must be continuous"); 69: } 70: 71: /** 72: * Calculate the bit mask based on the values of the 73: * leastSignificantBit and bitWidth fields. 74: */ 75: public long toMask() 76: { 77: return ((1<<bitWidth)-1) << leastSignificantBit; 78: } 79: }