Package org.antlr.v4.runtime.misc
Class IntervalSet
- java.lang.Object
-
- org.antlr.v4.runtime.misc.IntervalSet
-
- All Implemented Interfaces:
IntSet
public class IntervalSet extends Object implements IntSet
This class implements theIntSet
backed by a sorted array of non-overlapping intervals. It is particularly efficient for representing large collections of numbers, where the majority of elements appear as part of a sequential range of numbers that are all part of the set. For example, the set { 1, 2, 3, 4, 7, 8 } may be represented as { [1, 4], [7, 8] }.This class is able to represent sets containing any combination of values in the range
Integer.MIN_VALUE
toInteger.MAX_VALUE
(inclusive).
-
-
Field Summary
Fields Modifier and Type Field Description static IntervalSet
COMPLETE_CHAR_SET
static IntervalSet
EMPTY_SET
protected List<Interval>
intervals
The list of sorted, disjoint intervals.protected boolean
readonly
-
Constructor Summary
Constructors Constructor Description IntervalSet(int... els)
IntervalSet(List<Interval> intervals)
IntervalSet(IntervalSet set)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
add(int el)
Add a single element to the set.void
add(int a, int b)
Add interval; i.e., add all integers from a to b to set.protected void
add(Interval addition)
IntervalSet
addAll(IntSet set)
Modify the currentIntSet
object to contain all elements that are present in itself, the specifiedset
, or both.IntervalSet
and(IntSet other)
Return a newIntSet
object containing all elements that are present in both the current set and the specified seta
.void
clear()
IntervalSet
complement(int minElement, int maxElement)
IntervalSet
complement(IntSet vocabulary)
Return a newIntSet
object containing all elements that are present inelements
but not present in the current set.boolean
contains(int el)
Returnstrue
if the set contains the specified element.protected String
elementName(String[] tokenNames, int a)
Deprecated.UseelementName(Vocabulary, int)
instead.protected String
elementName(Vocabulary vocabulary, int a)
boolean
equals(Object obj)
Are two IntervalSets equal? Because all intervals are sorted and disjoint, equals is a simple linear walk over both lists to make sure they are the same.int
get(int i)
Get the ith element of ordered set.List<Interval>
getIntervals()
Return a list of Interval objects.int
getMaxElement()
Returns the maximum value contained in the set if not isNil().int
getMinElement()
Returns the minimum value contained in the set if not isNil().int
hashCode()
boolean
isNil()
Returnstrue
if this set contains no elements.boolean
isReadonly()
static IntervalSet
of(int a)
Create a set with a single element, el.static IntervalSet
of(int a, int b)
Create a set with all ints within range [a..b] (inclusive)static IntervalSet
or(IntervalSet[] sets)
combine all sets in the array returned the or'd valueIntervalSet
or(IntSet a)
Return a newIntSet
object containing all elements that are present in the current set, the specified seta
, or both.void
remove(int el)
Removes the specified value from the current set.void
setReadonly(boolean readonly)
int
size()
Return the total number of elements represented by the current set.static IntervalSet
subtract(IntervalSet left, IntervalSet right)
Compute the set difference between two interval sets.IntervalSet
subtract(IntSet a)
Return a newIntSet
object containing all elements that are present in the current set but not present in the input seta
.int[]
toArray()
IntegerList
toIntegerList()
List<Integer>
toList()
Return a list containing the elements represented by the current set.Set<Integer>
toSet()
String
toString()
String
toString(boolean elemAreChar)
String
toString(String[] tokenNames)
Deprecated.UsetoString(Vocabulary)
instead.String
toString(Vocabulary vocabulary)
-
-
-
Field Detail
-
COMPLETE_CHAR_SET
public static final IntervalSet COMPLETE_CHAR_SET
-
EMPTY_SET
public static final IntervalSet EMPTY_SET
-
readonly
protected boolean readonly
-
-
Constructor Detail
-
IntervalSet
public IntervalSet(IntervalSet set)
-
IntervalSet
public IntervalSet(int... els)
-
-
Method Detail
-
of
public static IntervalSet of(int a)
Create a set with a single element, el.
-
of
public static IntervalSet of(int a, int b)
Create a set with all ints within range [a..b] (inclusive)
-
clear
public void clear()
-
add
public void add(int el)
Add a single element to the set. An isolated element is stored as a range el..el.
-
add
public void add(int a, int b)
Add interval; i.e., add all integers from a to b to set. If b<a, do nothing. Keep list in sorted order (by left range value). If overlap, combine ranges. For example, If this is {1..5, 10..20}, adding 6..7 yields {1..5, 6..7, 10..20}. Adding 4..8 yields {1..8, 10..20}.
-
add
protected void add(Interval addition)
-
or
public static IntervalSet or(IntervalSet[] sets)
combine all sets in the array returned the or'd value
-
addAll
public IntervalSet addAll(IntSet set)
Description copied from interface:IntSet
Modify the currentIntSet
object to contain all elements that are present in itself, the specifiedset
, or both.
-
complement
public IntervalSet complement(int minElement, int maxElement)
-
complement
public IntervalSet complement(IntSet vocabulary)
Return a newIntSet
object containing all elements that are present inelements
but not present in the current set. The following expressions are equivalent for input non-nullIntSet
instancesx
andy
.x.complement(y)
y.subtract(x)
- Specified by:
complement
in interfaceIntSet
- Parameters:
vocabulary
- The set to compare with the current set. Anull
argument is treated as though it were an empty set.- Returns:
- A new
IntSet
instance containing the elements present inelements
but not present in the current set. The valuenull
may be returned in place of an empty result set.
-
subtract
public IntervalSet subtract(IntSet a)
Description copied from interface:IntSet
Return a newIntSet
object containing all elements that are present in the current set but not present in the input seta
. The following expressions are equivalent for input non-nullIntSet
instancesx
andy
.y.subtract(x)
x.complement(y)
- Specified by:
subtract
in interfaceIntSet
- Parameters:
a
- The set to compare with the current set. Anull
argument is treated as though it were an empty set.- Returns:
- A new
IntSet
instance containing the elements present inelements
but not present in the current set. The valuenull
may be returned in place of an empty result set.
-
subtract
public static IntervalSet subtract(IntervalSet left, IntervalSet right)
Compute the set difference between two interval sets. The specific operation isleft - right
. If either of the input sets isnull
, it is treated as though it was an empty set.
-
or
public IntervalSet or(IntSet a)
Description copied from interface:IntSet
Return a newIntSet
object containing all elements that are present in the current set, the specified seta
, or both.This method is similar to
IntSet.addAll(IntSet)
, but returns a newIntSet
instance instead of modifying the current set.
-
and
public IntervalSet and(IntSet other)
Return a newIntSet
object containing all elements that are present in both the current set and the specified seta
.- Specified by:
and
in interfaceIntSet
- Parameters:
other
- The set to intersect with the current set. Anull
argument is treated as though it were an empty set.- Returns:
- A new
IntSet
instance containing the intersection of the current set anda
. The valuenull
may be returned in place of an empty result set.
-
contains
public boolean contains(int el)
Returnstrue
if the set contains the specified element.
-
isNil
public boolean isNil()
Returnstrue
if this set contains no elements.
-
getMaxElement
public int getMaxElement()
Returns the maximum value contained in the set if not isNil().- Returns:
- the maximum value contained in the set.
- Throws:
RuntimeException
- if set is empty
-
getMinElement
public int getMinElement()
Returns the minimum value contained in the set if not isNil().- Returns:
- the minimum value contained in the set.
- Throws:
RuntimeException
- if set is empty
-
equals
public boolean equals(Object obj)
Are two IntervalSets equal? Because all intervals are sorted and disjoint, equals is a simple linear walk over both lists to make sure they are the same. Interval.equals() is used by the List.equals() method to check the ranges.
-
toString
public String toString(boolean elemAreChar)
-
toString
@Deprecated public String toString(String[] tokenNames)
Deprecated.UsetoString(Vocabulary)
instead.
-
toString
public String toString(Vocabulary vocabulary)
-
elementName
@Deprecated protected String elementName(String[] tokenNames, int a)
Deprecated.UseelementName(Vocabulary, int)
instead.
-
elementName
protected String elementName(Vocabulary vocabulary, int a)
-
size
public int size()
Description copied from interface:IntSet
Return the total number of elements represented by the current set.
-
toIntegerList
public IntegerList toIntegerList()
-
toList
public List<Integer> toList()
Description copied from interface:IntSet
Return a list containing the elements represented by the current set. The list is returned in ascending numerical order.
-
get
public int get(int i)
Get the ith element of ordered set. Used only by RandomPhrase so don't bother to implement if you're not doing that for a new ANTLR code gen target.
-
toArray
public int[] toArray()
-
remove
public void remove(int el)
Description copied from interface:IntSet
Removes the specified value from the current set. If the current set does not contain the element, no changes are made.
-
isReadonly
public boolean isReadonly()
-
setReadonly
public void setReadonly(boolean readonly)
-
-