You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by zo...@apache.org on 2002/09/17 23:08:37 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom BitArray.java

zongaro     2002/09/17 14:08:37

  Modified:    java/src/org/apache/xalan/xsltc/dom Tag: XSLTC_DTM
                        BitArray.java
  Log:
  Added assertions to check for out of range bit indices in getBit and setBit.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.3.10.3  +40 -27    xml-xalan/java/src/org/apache/xalan/xsltc/dom/BitArray.java
  
  Index: BitArray.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/BitArray.java,v
  retrieving revision 1.3.10.2
  retrieving revision 1.3.10.3
  diff -u -r1.3.10.2 -r1.3.10.3
  --- BitArray.java	29 Jul 2002 00:01:27 -0000	1.3.10.2
  +++ BitArray.java	17 Sep 2002 21:08:37 -0000	1.3.10.3
  @@ -91,6 +91,8 @@
   	0x00000080, 0x00000040, 0x00000020, 0x00000010,
   	0x00000008, 0x00000004, 0x00000002, 0x00000001 };
   
  +    private final static boolean DEBUG_ASSERTIONS = false;
  +    
       /**
        * Constructor. Defines the initial size of the bit array (in bits).
        */
  @@ -98,11 +100,11 @@
   	this(32);
       }
   
  -    public BitArray(int size) {
  -	if (size < 32) size = 32;
  -	_bitSize = size;
  -	_intSize = (_bitSize >>> 5) + 1;
  -	_bits = new int[_intSize + 1];
  +    public BitArray(int size) {        
  +        if (size < 32) size = 32;
  +        _bitSize = size;
  +        _intSize = (_bitSize >>> 5) + 1;
  +        _bits = new int[_intSize + 1];
       }
   
       public BitArray(int size, int[] bits) {
  @@ -138,25 +140,32 @@
        * Returns true if the given bit is set
        */
       public final boolean getBit(int bit) {
  -	return((_bits[bit>>>5] & _masks[bit%32]) != 0);
  +        if (DEBUG_ASSERTIONS) {
  +            if (bit >= _bitSize) {
  +                throw new Error(
  +                             "Programmer's assertion in  BitArray.getBit");
  +            }
  +        }
  +
  +        return((_bits[bit>>>5] & _masks[bit%32]) != 0);
       }
   
       /**
        * Returns the next set bit from a given position
        */
       public final int getNextBit(int startBit) {
  -	for (int i = (startBit >>> 5) ; i<=_intSize; i++) {
  -	    int bits = _bits[i];
  -	    if (bits != 0) {
  -		for (int b = (startBit % 32); b<32; b++) {
  -		    if ((bits & _masks[b]) != 0) {
  -			return((i << 5) + b);
  -		    }
  -		}
  -	    }
  -	    startBit = 0;
  -	}
  -	return(DTMAxisIterator.END);
  +        for (int i = (startBit >>> 5) ; i<=_intSize; i++) {
  +            int bits = _bits[i];
  +            if (bits != 0) {
  +                for (int b = (startBit % 32); b<32; b++) {
  +                    if ((bits & _masks[b]) != 0) {
  +                        return((i << 5) + b);
  +                    }
  +                }
  +            }
  +            startBit = 0;
  +        }
  +        return(DTMAxisIterator.END);
       }
   
       /**
  @@ -213,11 +222,18 @@
        * Sets a given bit
        */
       public final void setBit(int bit) {
  -	if (bit >= _bitSize) return;
  -	final int i = (bit >>> 5);
  -	if (i < _first) _first = i;
  -	if (i > _last) _last = i;
  -	_bits[i] |= _masks[bit % 32];
  +        if (DEBUG_ASSERTIONS) {
  +            if (bit >= _bitSize) {
  +                throw new Error(
  +                             "Programmer's assertion in  BitArray.getBit");
  +            }
  +        }
  +
  +        if (bit >= _bitSize) return;
  +        final int i = (bit >>> 5);
  +        if (i < _first) _first = i;
  +        if (i > _last) _last = i;
  +        _bits[i] |= _masks[bit % 32];
       }
   
       /**
  @@ -287,6 +303,3 @@
       }
   
   }
  -
  -
  -    
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org