Home | History | Annotate | Download | only in misc
      1 /*
      2  * [The "BSD license"]
      3  *  Copyright (c) 2010 Terence Parr
      4  *  All rights reserved.
      5  *
      6  *  Redistribution and use in source and binary forms, with or without
      7  *  modification, are permitted provided that the following conditions
      8  *  are met:
      9  *  1. Redistributions of source code must retain the above copyright
     10  *      notice, this list of conditions and the following disclaimer.
     11  *  2. Redistributions in binary form must reproduce the above copyright
     12  *      notice, this list of conditions and the following disclaimer in the
     13  *      documentation and/or other materials provided with the distribution.
     14  *  3. The name of the author may not be used to endorse or promote products
     15  *      derived from this software without specific prior written permission.
     16  *
     17  *  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     18  *  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     19  *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     20  *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     21  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     22  *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26  *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 package org.antlr.misc;
     29 
     30 import org.antlr.tool.Grammar;
     31 
     32 import java.util.List;
     33 
     34 /** A generic set of ints that has an efficient implementation, BitSet,
     35  *  which is a compressed bitset and is useful for ints that
     36  *  are small, for example less than 500 or so, and w/o many ranges.  For
     37  *  ranges with large values like unicode char sets, this is not very efficient.
     38  *  Consider using IntervalSet.  Not all methods in IntervalSet are implemented.
     39  *
     40  *  @see org.antlr.misc.BitSet
     41  *  @see org.antlr.misc.IntervalSet
     42  */
     43 public interface IntSet {
     44     /** Add an element to the set */
     45     void add(int el);
     46 
     47     /** Add all elements from incoming set to this set.  Can limit
     48      *  to set of its own type.
     49      */
     50     void addAll(IntSet set);
     51 
     52     /** Return the intersection of this set with the argument, creating
     53      *  a new set.
     54      */
     55     IntSet and(IntSet a);
     56 
     57     IntSet complement(IntSet elements);
     58 
     59     IntSet or(IntSet a);
     60 
     61     IntSet subtract(IntSet a);
     62 
     63     /** Return the size of this set (not the underlying implementation's
     64      *  allocated memory size, for example).
     65      */
     66     int size();
     67 
     68     boolean isNil();
     69 
     70     boolean equals(Object obj);
     71 
     72     int getSingleElement();
     73 
     74     boolean member(int el);
     75 
     76     /** remove this element from this set */
     77     void remove(int el);
     78 
     79     List toList();
     80 
     81     String toString();
     82 
     83     String toString(Grammar g);
     84 }
     85