public abstract class IPAddressSeqRange extends java.lang.Object implements IPAddressRange
Note that the IPAddress and IPAddressString classes allow you to specify a range of values for each segment.
That allows you to represent single addresses, any address prefix subnet (eg 1.2.0.0/16 or 1:2:3:4::/64) or any subnet that can be represented with segment ranges (1.2.0-255.* or 1:2:3:4:*), see
IPAddressString
for details.
IPAddressString and IPAddress cover all potential subnets and addresses that can be represented by a single address string of 4 or less segments for IPv4, and 8 or less segments for IPv6.
This class allows the representation of any sequential address range, including those that cannot be represented by IPAddress.
String representations include the full address for both the lower and upper bounds of the range.
Modifier and Type | Method and Description |
---|---|
boolean |
contains(IPAddress other)
Returns whether this range contains all addresses in the given address or subnet
|
boolean |
contains(IPAddressSeqRange other)
Returns whether this range contains all addresses in the given sequential range
|
boolean |
containsPrefixBlock(int prefixLen)
Returns whether the values of this series contains the prefix block for the given prefix length.
|
boolean |
containsSinglePrefixBlock(int prefixLen)
Returns whether the values of this series contains a single prefix block for the given prefix length.
|
abstract IPAddress |
coverWithPrefixBlock()
Returns the minimal-size prefix block that covers all the addresses in this range.
|
boolean |
equals(java.lang.Object o) |
int |
getBitCount()
Provides the number of bits comprising this address item
|
byte[] |
getBytes() |
byte[] |
getBytes(byte[] bytes)
Copies the bytes of the lowest address item represented by this address item into the supplied array,
and returns that array.
|
byte[] |
getBytes(byte[] bytes,
int index)
Copies the bytes of the lowest address item represented by this address item into the supplied array starting at the given index,
and returns that array.
|
java.math.BigInteger |
getCount()
The count of possible distinct values for this AddressComponent.
|
abstract java.lang.Iterable<? extends IPAddress> |
getIterable()
Useful for using an instance in a "for-each loop", as in
for(addr : address.getIterable()) { ... |
IPAddress |
getLower()
Returns the address in the range with the lowest numeric value.
|
IPAddress |
getUpper()
Returns the address in the range with the highest numeric value.
|
byte[] |
getUpperBytes() |
byte[] |
getUpperBytes(byte[] bytes)
Copies the bytes of the largest address item represented by this address item into the supplied array,
and returns that array.
|
byte[] |
getUpperBytes(byte[] bytes,
int index)
Copies the bytes of the largest address item represented by this address item into the supplied array at the given index,
and returns that array.
|
java.math.BigInteger |
getUpperValue()
Returns the highest value represented by this address item, the highest value included in the range of values
|
java.math.BigInteger |
getValue()
Returns the lowest value represented by this address item, the lowest value included in the range of values
|
int |
hashCode() |
boolean |
includesMax()
Returns whether this item includes the maximum possible value for the address type or version within its range
|
boolean |
includesZero()
Returns whether this item includes the value of zero within its range
|
IPAddressSeqRange |
intersect(IPAddressSeqRange other)
Returns the intersection of this range with the given range, a range which includes those addresses in both this and the given rqnge.
|
boolean |
isMax()
Returns whether this item matches the maximum possible value for the address type or version
|
boolean |
isMore(IPAddressSeqRange other) |
boolean |
isMultiple()
Whether this represents multiple potential values (eg a prefixed address or a segment representing a range of values)
|
boolean |
isZero()
Returns whether this item matches the value of zero
|
abstract java.util.Iterator<? extends IPAddress> |
iterator()
Iterates through the individual addresses of this address or subnet.
|
static IPAddressSeqRange[] |
join(IPAddressSeqRange... ranges)
Joins the given ranges into the fewest number of ranges.
|
IPAddressSeqRange |
join(IPAddressSeqRange other)
If this range overlaps with the given range,
or if the highest value of the lower range is one below the lowest value of the higher range,
then the two are joined into a new larger range that is returned.
|
boolean |
overlaps(IPAddressSeqRange other) |
abstract java.util.Iterator<? extends IPAddress> |
prefixBlockIterator(int prefLength)
Iterates through the range of prefix blocks in this range instance using the given prefix length.
|
abstract AddressComponentRangeSpliterator<? extends IPAddressSeqRange,? extends IPAddress> |
prefixBlockSpliterator(int prefLength)
Partitions and traverses through the individual prefix blocks for the given prefix length.
|
abstract java.util.stream.Stream<? extends IPAddress> |
prefixBlockStream(int prefLength)
Returns a sequential stream of the prefix blocks for the given prefix length.
|
java.util.Iterator<? extends IPAddressSeqRange> |
prefixIterator(int prefixLength)
Iterates through the range of prefixes in this range instance using the given prefix length.
|
abstract AddressComponentSpliterator<? extends IPAddressSeqRange> |
prefixSpliterator(int prefLength)
Partitions and traverses through the individual prefixes for the given prefix length.
|
abstract java.util.stream.Stream<? extends IPAddressSeqRange> |
prefixStream(int prefLength)
Returns a sequential stream of the individual prefixes for the given prefix length.
|
abstract IPAddress[] |
spanWithPrefixBlocks()
Produces an array of prefix blocks that spans the same set of addresses.
|
abstract IPAddress[] |
spanWithSequentialBlocks()
Produces an array of blocks that are sequential that cover the same set of addresses.
|
abstract AddressComponentRangeSpliterator<? extends IPAddressSeqRange,? extends IPAddress> |
spliterator()
Partitions and traverses through the individual addresses.
|
abstract java.util.stream.Stream<? extends IPAddress> |
stream()
Returns a sequential stream of the individual address components.
|
IPAddressSeqRange[] |
subtract(IPAddressSeqRange other)
Subtracts the given range from this range, to produce either zero, one, or two address ranges that contain the addresses in this range and not in the given range.
|
java.lang.String |
toCanonicalString()
Produces a string that is unique and uses the canonical representation for all instances.
|
java.lang.String |
toCanonicalString(java.lang.String separator) |
java.lang.String |
toNormalizedString()
Produces a string that is unique and consistent for all instances.
|
java.lang.String |
toNormalizedString(java.lang.String separator) |
java.lang.String |
toString() |
java.lang.String |
toString(java.util.function.Function<? super IPAddress,java.lang.String> lowerStringer,
java.lang.String separator,
java.util.function.Function<? super IPAddress,java.lang.String> upperStringer) |
stream, stream
compareTo, getByteCount, getMinPrefixLengthForBlock, getPrefixCount, getPrefixLengthForSingleBlock, isFullRange, testRange, testRange
public java.math.BigInteger getCount()
AddressItem
getCount
in interface AddressItem
public boolean isMultiple()
AddressItem
isMultiple
in interface AddressItem
public boolean isMore(IPAddressSeqRange other)
other
- the range to compare, which does not need to range across the same address spacepublic abstract java.lang.Iterable<? extends IPAddress> getIterable()
IPAddressRange
for(addr : address.getIterable()) { ... }
Otherwise just call IPAddressRange.iterator()
directly.
getIterable
in interface AddressComponentRange
getIterable
in interface IPAddressRange
public abstract java.util.Iterator<? extends IPAddress> prefixBlockIterator(int prefLength)
prefixBlockIterator
in interface IPAddressRange
prefLength
- public abstract AddressComponentRangeSpliterator<? extends IPAddressSeqRange,? extends IPAddress> prefixBlockSpliterator(int prefLength)
IPAddressRange
prefixBlockSpliterator
in interface IPAddressRange
public abstract java.util.stream.Stream<? extends IPAddress> prefixBlockStream(int prefLength)
IPAddressRange
BaseStream.parallel()
on the returned stream.prefixBlockStream
in interface IPAddressRange
public java.util.Iterator<? extends IPAddressSeqRange> prefixIterator(int prefixLength)
Since a range between two arbitrary addresses cannot always be represented with a single IPAddress instance, the returned iterator iterates through IPAddressRange instances.
For instance, if iterating from 1.2.3.4 to 1.2.4.5 with prefix 8, the range shares the same prefix 1, but the range cannot be represented by the address 1.2.3-4.4-5 which does not include 1.2.3.255 or 1.2.4.0 both of which are in the original range. Nor can the range be represented by 1.2.3-4.0-255 which includes 1.2.4.6 and 1.2.3.3, both of which were not in the original range. An IPAddressSeqRange is thus required to represent that prefixed range.
prefixIterator
in interface IPAddressRange
prefixLength
- public abstract AddressComponentSpliterator<? extends IPAddressSeqRange> prefixSpliterator(int prefLength)
IPAddressRange
prefixSpliterator
in interface IPAddressRange
public abstract java.util.stream.Stream<? extends IPAddressSeqRange> prefixStream(int prefLength)
IPAddressRange
BaseStream.parallel()
on the returned stream.prefixStream
in interface IPAddressRange
public abstract java.util.Iterator<? extends IPAddress> iterator()
IPAddressRange
Call AddressItem.isMultiple()
to determine if this instance represents multiple, or AddressItem.getCount()
for the count.
iterator
in interface AddressComponentRange
iterator
in interface IPAddressRange
public abstract AddressComponentRangeSpliterator<? extends IPAddressSeqRange,? extends IPAddress> spliterator()
IPAddressRange
spliterator
in interface AddressComponentRange
spliterator
in interface IPAddressRange
public abstract java.util.stream.Stream<? extends IPAddress> stream()
AddressComponentRange
BaseStream.parallel()
on the returned stream.stream
in interface AddressComponentRange
public IPAddress getLower()
IPAddressRange
getLower
in interface AddressComponentRange
getLower
in interface IPAddressRange
public IPAddress getUpper()
IPAddressRange
getUpper
in interface AddressComponentRange
getUpper
in interface IPAddressRange
public java.lang.String toNormalizedString(java.lang.String separator)
public java.lang.String toNormalizedString()
IPAddressRange
toNormalizedString
in interface IPAddressRange
public java.lang.String toCanonicalString(java.lang.String separator)
public java.lang.String toCanonicalString()
IPAddressRange
toCanonicalString
in interface IPAddressRange
public java.lang.String toString(java.util.function.Function<? super IPAddress,java.lang.String> lowerStringer, java.lang.String separator, java.util.function.Function<? super IPAddress,java.lang.String> upperStringer)
public java.lang.String toString()
toString
in class java.lang.Object
public abstract IPAddress coverWithPrefixBlock()
IPAddressRange
coverWithPrefixBlock
in interface IPAddressRange
public abstract IPAddress[] spanWithPrefixBlocks()
IPAddressRange
spanWithPrefixBlocks
in interface IPAddressRange
public abstract IPAddress[] spanWithSequentialBlocks()
IPAddressRange
IPAddressRange.spanWithPrefixBlocks()
and is never longer.spanWithSequentialBlocks
in interface IPAddressRange
public static IPAddressSeqRange[] join(IPAddressSeqRange... ranges)
ranges
- public boolean overlaps(IPAddressSeqRange other)
public boolean contains(IPAddress other)
IPAddressRange
contains
in interface IPAddressRange
public boolean contains(IPAddressSeqRange other)
IPAddressRange
contains
in interface IPAddressRange
public int hashCode()
hashCode
in class java.lang.Object
public boolean equals(java.lang.Object o)
equals
in class java.lang.Object
public IPAddressSeqRange intersect(IPAddressSeqRange other)
other
- public IPAddressSeqRange join(IPAddressSeqRange other)
Otherwise null is returned.
other
- public IPAddressSeqRange[] subtract(IPAddressSeqRange other)
other
- public boolean containsPrefixBlock(int prefixLen)
AddressItem
Use AddressItem.getMinPrefixLengthForBlock()
to determine the smallest prefix length for which this method returns true.
containsPrefixBlock
in interface AddressItem
public boolean containsSinglePrefixBlock(int prefixLen)
AddressItem
Use AddressItem.getPrefixLengthForSingleBlock()
to determine whether there is a prefix length for which this method returns true.
containsSinglePrefixBlock
in interface AddressItem
public int getBitCount()
AddressItem
getBitCount
in interface AddressItem
public byte[] getBytes()
getBytes
in interface AddressItem
public byte[] getBytes(byte[] bytes)
AddressItem
getBytes
in interface AddressItem
public byte[] getBytes(byte[] bytes, int index)
AddressItem
getBytes
in interface AddressItem
public byte[] getUpperBytes()
getUpperBytes
in interface AddressItem
public byte[] getUpperBytes(byte[] bytes)
AddressItem
getUpperBytes
in interface AddressItem
public byte[] getUpperBytes(byte[] bytes, int index)
AddressItem
getUpperBytes
in interface AddressItem
public java.math.BigInteger getValue()
AddressItem
getValue
in interface AddressItem
public java.math.BigInteger getUpperValue()
AddressItem
getUpperValue
in interface AddressItem
public boolean isZero()
AddressItem
isZero
in interface AddressItem
public boolean includesZero()
AddressItem
includesZero
in interface AddressItem
public boolean isMax()
AddressItem
isMax
in interface AddressItem
public boolean includesMax()
AddressItem
includesMax
in interface AddressItem