public abstract class Address extends java.lang.Object implements AddressSegmentSeries, java.lang.Comparable<Address>
Modifier and Type | Class and Description |
---|---|
static interface |
Address.AddressProvider |
static interface |
Address.SegmentValueProvider |
Modifier and Type | Field and Description |
---|---|
static char |
ALTERNATIVE_RANGE_SEPARATOR |
static java.lang.String |
ALTERNATIVE_RANGE_SEPARATOR_STR |
static java.lang.String |
ALTERNATIVE_SEGMENT_WILDCARD_STR |
static AddressComparator |
DEFAULT_ADDRESS_COMPARATOR |
static java.lang.String |
HEX_PREFIX |
static java.lang.String |
OCTAL_PREFIX |
static char |
RANGE_SEPARATOR |
static java.lang.String |
RANGE_SEPARATOR_STR |
static char |
SEGMENT_SQL_SINGLE_WILDCARD |
static java.lang.String |
SEGMENT_SQL_SINGLE_WILDCARD_STR |
static char |
SEGMENT_SQL_WILDCARD |
static java.lang.String |
SEGMENT_SQL_WILDCARD_STR |
static char |
SEGMENT_WILDCARD |
static java.lang.String |
SEGMENT_WILDCARD_STR |
Modifier and Type | Method and Description |
---|---|
abstract Address |
adjustPrefixBySegment(boolean nextSegment)
Increases or decreases prefix length to the next segment boundary.
|
abstract Address |
adjustPrefixBySegment(boolean nextSegment,
boolean zeroed)
Increases or decreases prefix length to the next segment boundary.
|
abstract Address |
adjustPrefixLength(int adjustment)
Increases or decreases prefix length by the given increment.
|
abstract Address |
adjustPrefixLength(int adjustment,
boolean zeroed)
Increases or decreases prefix length by the given increment.
|
abstract Address |
applyPrefixLength(int networkPrefixLength)
Applies the given prefix length to create a new segment series.
|
int |
compareTo(Address other) |
abstract boolean |
contains(Address other) |
boolean |
containsPrefixBlock(int prefixLength)
Returns whether the values of this series contains the prefix block for the given prefix length.
|
boolean |
containsSinglePrefixBlock(int prefixLength)
Returns whether the values of this series contains a single prefix block for the given prefix length.
|
static IPv4AddressNetwork |
defaultIpv4Network() |
static IPv6AddressNetwork |
defaultIpv6Network() |
static MACAddressNetwork |
defaultMACNetwork() |
boolean |
equals(java.lang.Object o)
Two Address objects are equal if they represent the same set of addresses.
|
int |
getBitCount() |
int |
getByteCount()
returns the number of bytes in each of the address components represented by this instance
|
byte[] |
getBytes() |
byte[] |
getBytes(byte[] bytes)
Copies the bytes of the smallest address item represented by this address item into the supplied array,
and returns that array.
|
java.math.BigInteger |
getCount()
Gets the count of addresses that this address may represent.
|
int |
getDivisionCount() |
java.lang.String[] |
getDivisionStrings()
Get standard-format strings for each of the divisions in the series.
|
abstract java.lang.Iterable<? extends Address> |
getIterable()
Useful for using an instance in a "for-each loop".
|
abstract Address |
getLower()
If this represents a series with ranging values, returns a series representing the lower values of the range.
|
abstract int |
getMaxSegmentValue() |
int |
getMinPrefixLengthForBlock()
Returns the smallest prefix length possible such that this includes the block of addresses for that prefix.
|
java.math.BigInteger |
getPrefixCount()
If this has a prefix length, the count of the range of values in the prefix.
|
java.lang.Integer |
getPrefixLength()
the largest number of high bits for which this address represents all addresses with the same set of high bits
|
java.lang.Integer |
getPrefixLengthForSingleBlock()
Returns a prefix length for which the range of this address subnet matches the the block of addresses for that prefix.
|
AddressSection |
getSection()
Gets the subsection from the series that comprises all segments
|
int |
getSegmentCount()
Returns the number of segments in this series.
|
void |
getSegments(AddressSegment[] segs)
Copies the existing segments into the given array.
|
void |
getSegments(int start,
int end,
AddressSegment[] segs,
int index)
get the segments from start to end and insert into the segs array at the the given index
|
java.lang.String[] |
getSegmentStrings()
Returns the an array with the values of each segment as they would appear in the normalized with wildcards string.
|
abstract Address |
getUpper()
If this represents a series with ranging values, returns a series representing the upper values of the range
If this represents a series with a single value in each segment, returns this.
|
byte[] |
getUpperBytes()
Gets the bytes for the highest address in the range of addresses represented by this address instance.
|
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.
|
java.math.BigInteger |
getUpperValue() |
java.math.BigInteger |
getValue() |
int |
hashCode() |
boolean |
includesMax() |
boolean |
includesZero() |
abstract Address |
increment(long increment)
Returns the series from the subnet that is the given increment upwards into the subnet range,
or if the given increment is negative the given increment downwards into the subnet range,
or if this is just an individual series, it simply adds the increment to this.
|
boolean |
isFullRange() |
abstract boolean |
isLocal()
Whether the address can be considered a local address (as opposed to a global one)
|
boolean |
isMax() |
int |
isMore(AddressDivisionSeries other)
Use this method to compare the counts of two address series.
|
abstract boolean |
isMulticast()
Whether the MAC address or IP address or other form of address is multicast.
|
boolean |
isMultiple()
Whether this represents multiple potential values (eg a prefixed address or a segment representing a range of values)
|
boolean |
isPrefixBlock()
Returns whether the address range has a prefix length and includes the block of values for its prefix length.
|
boolean |
isPrefixed()
Whether there exists a prefix.
|
boolean |
isSameAddress(Address other) |
boolean |
isSinglePrefixBlock()
Returns whether the address range the block of values for a single prefix identified by its prefix length.
|
boolean |
isZero() |
abstract java.util.Iterator<? extends Address> |
iterator()
Iterates through the individual segment series.
|
abstract java.util.Iterator<? extends Address> |
prefixBlockIterator()
Iterates through the individual prefix blocks.
|
abstract Address |
removePrefixLength()
Removes the prefix length.
|
abstract Address |
removePrefixLength(boolean zeroed)
Removes the prefix length.
|
abstract Address |
reverseBits(boolean perByte)
Returns a new segment series with the bits reversed.
|
abstract Address |
reverseBytes()
Returns a new segment series with the bytes reversed.
|
abstract Address |
reverseBytesPerSegment()
Returns a new segment series with the bytes reversed within each segment.
|
abstract Address |
reverseSegments()
Returns a new segment series with the segments reversed.
|
abstract Address |
setPrefixLength(int prefixLength)
Sets the prefix length.
|
abstract Address |
setPrefixLength(int prefixLength,
boolean zeroed)
Sets the prefix length.
|
HostIdentifierString |
toAddressString()
Returns a host identifier string representation for this address,
which will be already validated.
|
java.lang.String |
toCanonicalString()
This produces a canonical string.
|
java.lang.String |
toCompressedString()
Produce short strings for the address in the usual address format.
|
java.lang.String |
toHexString(boolean with0xPrefix)
Writes this address as a single hexadecimal value with always the exact same number of characters, with or without a preceding 0x prefix.
|
java.lang.String |
toNormalizedString()
The normalized string returned by this method is a common and consistent representation of the address.
|
abstract Address |
toPrefixBlock()
If this series has a prefix length, returns the block for that prefix.
|
java.lang.String |
toString() |
getBitsPerSegment, getBytesPerSegment, getNetwork, getSection, getSection, getSegment, getSegments, segmentsIterator
getDivision
public static final java.lang.String HEX_PREFIX
public static final java.lang.String OCTAL_PREFIX
public static final char RANGE_SEPARATOR
public static final java.lang.String RANGE_SEPARATOR_STR
public static final char ALTERNATIVE_RANGE_SEPARATOR
public static final java.lang.String ALTERNATIVE_RANGE_SEPARATOR_STR
public static final char SEGMENT_WILDCARD
public static final java.lang.String SEGMENT_WILDCARD_STR
public static final java.lang.String ALTERNATIVE_SEGMENT_WILDCARD_STR
public static final char SEGMENT_SQL_WILDCARD
public static final java.lang.String SEGMENT_SQL_WILDCARD_STR
public static final char SEGMENT_SQL_SINGLE_WILDCARD
public static final java.lang.String SEGMENT_SQL_SINGLE_WILDCARD_STR
public static final AddressComparator DEFAULT_ADDRESS_COMPARATOR
public static IPv6AddressNetwork defaultIpv6Network()
public static IPv4AddressNetwork defaultIpv4Network()
public static MACAddressNetwork defaultMACNetwork()
public int getSegmentCount()
AddressSegmentSeries
getSegmentCount
in interface AddressSegmentSeries
public int getDivisionCount()
getDivisionCount
in interface AddressStringDivisionSeries
public int getBitCount()
getBitCount
in interface AddressItem
public int getByteCount()
AddressComponent
getByteCount
in interface AddressComponent
public AddressSection getSection()
AddressSegmentSeries
getSection
in interface AddressSegmentSeries
public void getSegments(AddressSegment[] segs)
AddressSegmentSeries
AddressSegmentSeries.getSegmentCount()
getSegments
in interface AddressSegmentSeries
public void getSegments(int start, int end, AddressSegment[] segs, int index)
AddressSegmentSeries
getSegments
in interface AddressSegmentSeries
start
- the first segment index from this series to be includedend
- the first segment index to be excludedsegs
- the target arrayindex
- where to insert the segments in the segs arraypublic abstract int getMaxSegmentValue()
public abstract java.lang.Iterable<? extends Address> getIterable()
AddressComponent
AddressComponent.iterator()
directly.getIterable
in interface AddressComponent
getIterable
in interface AddressSegmentSeries
public abstract java.util.Iterator<? extends Address> iterator()
AddressSegmentSeries
iterator
in interface AddressComponent
iterator
in interface AddressSegmentSeries
public abstract java.util.Iterator<? extends Address> prefixBlockIterator()
AddressSegmentSeries
AddressSegmentSeries.iterator()
prefixBlockIterator
in interface AddressSegmentSeries
public abstract Address increment(long increment)
AddressSegmentSeries
If the subnet has multiple values and the increment exceeds the subnet size, then the amount by which is exceeds the size is added to the upper series of the range (the final iterator value) or is subtracted from the lower series of the range (the first iterator value) if negative.
If the subnet is just a single address values, the series is simply incremented by the given value, positive or negative.
If a subnet has multiple values, a positive increment value is equivalent to the same number of values from the iterator. For instance, a increment of 1 is value 1 from the iterator, an increment of 2 is the second value from the iterator, and so on. A negative increment is equivalent to the same number of values preceding the upper bound of the iterator. For instance, an increment of -1 is the last value from the iterator, and increment of -2 is the second last value, and so on.
Therefore, to get the series just above the highest series of the subnet, use an increment of size:count > 1 ? count + 1 : 1
where count is the subnet size.
To get the series just below the lowest series of the subnet, use an increment of size:-(count > 1 ? count + 1 : 1)
where count is the subnet size.
increment
in interface AddressSegmentSeries
public abstract Address getLower()
AddressSegmentSeries
getLower
in interface AddressComponent
getLower
in interface AddressSegmentSeries
public abstract Address getUpper()
AddressSegmentSeries
getUpper
in interface AddressComponent
getUpper
in interface AddressSegmentSeries
public boolean isMultiple()
AddressItem
isMultiple
in interface AddressItem
public boolean isPrefixed()
AddressDivisionSeries
isPrefixed
in interface AddressDivisionSeries
public java.lang.Integer getPrefixLength()
getPrefixLength
in interface AddressDivisionSeries
public int getMinPrefixLengthForBlock()
If the entire range can be dictated this way, then this method returns the same value as getPrefixLengthForSingleBlock()
.
Otherwise, this method will return the minimal possible prefix that can be paired with this address, while getPrefixLengthForSingleBlock()
will return null.
In cases where the final bit in this address division series is constant, this returns the bit length of this address division series.
getMinPrefixLengthForBlock
in interface AddressDivisionSeries
public java.lang.Integer getPrefixLengthForSingleBlock()
If the range can be dictated this way, then this method returns the same value as getMinPrefixLengthForBlock()
.
If no such prefix exists, returns null.
If this segment grouping represents a single value, returns the bit length of this address division series.
IP address examples: 1.2.3.4 returns 32 1.2.*.* returns 16 1.2.*.0/24 returns 16 in the case of PrefixConfiguration == ALL_PREFIXES_ARE_SUBNETS, 32 otherwise 1.2.*.4 returns null 1.2.252-255.* returns 22 1.2.3.4/x returns x in the case of PrefixConfiguration == ALL_PREFIXES_ARE_SUBNETS, 32 otherwise 1.2.0.0/16 returns 16 in the case of PrefixConfiguration == ALL_PREFIXES_ARE_SUBNETS or PREFIXED_ZERO_HOSTS_ARE_SUBNETS, 32 otherwise
getPrefixLengthForSingleBlock
in interface AddressDivisionSeries
public abstract boolean isMulticast()
InetAddress.isMulticastAddress()
public java.math.BigInteger getCount()
getCount
in interface AddressItem
public java.math.BigInteger getPrefixCount()
getCount()
getPrefixCount
in interface AddressDivisionSeries
public int isMore(AddressDivisionSeries other)
AddressDivisionSeries
isMore
in interface AddressDivisionSeries
public byte[] getBytes()
getBytes
in interface AddressItem
public byte[] getBytes(byte[] bytes)
AddressItem
getBytes
in interface AddressItem
public byte[] getUpperBytes()
getUpperBytes
in interface AddressItem
public byte[] getUpperBytes(byte[] bytes)
AddressItem
getUpperBytes
in interface AddressItem
public java.math.BigInteger getValue()
getValue
in interface AddressDivisionSeries
public java.math.BigInteger getUpperValue()
getUpperValue
in interface AddressDivisionSeries
public boolean isZero()
isZero
in interface AddressItem
public boolean includesZero()
includesZero
in interface AddressItem
public boolean isMax()
isMax
in interface AddressItem
public boolean includesMax()
includesMax
in interface AddressItem
public boolean isFullRange()
isFullRange
in interface AddressItem
public abstract boolean isLocal()
public int hashCode()
hashCode
in class java.lang.Object
public int compareTo(Address other)
compareTo
in interface java.lang.Comparable<Address>
public boolean isSameAddress(Address other)
public boolean equals(java.lang.Object o)
equals
in class java.lang.Object
public abstract boolean contains(Address other)
public HostIdentifierString toAddressString()
public java.lang.String toHexString(boolean with0xPrefix)
toHexString
in interface AddressComponent
public java.lang.String toNormalizedString()
toNormalizedString
in interface AddressComponent
public java.lang.String toCanonicalString()
toCanonicalString
in interface AddressSegmentSeries
public java.lang.String toCompressedString()
toCompressedString
in interface AddressSegmentSeries
public java.lang.String toString()
toString
in class java.lang.Object
public java.lang.String[] getDivisionStrings()
AddressDivisionSeries
getDivisionStrings
in interface AddressDivisionSeries
public java.lang.String[] getSegmentStrings()
AddressSegmentSeries
getSegmentStrings
in interface AddressSegmentSeries
public abstract Address reverseSegments()
AddressSegmentSeries
IncompatibleAddressException
since all address series can reverse their segments.reverseSegments
in interface AddressSegmentSeries
public abstract Address reverseBits(boolean perByte)
AddressSegmentSeries
reverseBits
in interface AddressComponent
reverseBits
in interface AddressSegmentSeries
perByte
- if true, only the bits in each byte are reversed, if false, then all bits in the component are reversedpublic abstract Address reverseBytes()
AddressSegmentSeries
reverseBytes
in interface AddressComponent
reverseBytes
in interface AddressSegmentSeries
public abstract Address reverseBytesPerSegment()
AddressSegmentSeries
reverseBytesPerSegment
in interface AddressSegmentSeries
public boolean isPrefixBlock()
isPrefixBlock
in interface AddressDivisionSeries
public boolean containsPrefixBlock(int prefixLength)
AddressDivisionSeries
AddressDivisionSeries.isPrefixBlock()
is that AddressDivisionSeries.isPrefixBlock()
returns
false if the series does not have a prefix length assigned to it,
even if there exists one or more prefix lengths for which AddressDivisionSeries.containsPrefixBlock(int)
returns true. This method simply returns whether it contains all the values for the given prefix length block
regardless of whether that prefix length has been assigned to this series.
Use AddressDivisionSeries.getMinPrefixLengthForBlock()
to determine the smallest prefix length for which this method returns true.
containsPrefixBlock
in interface AddressDivisionSeries
public boolean isSinglePrefixBlock()
isPrefixBlock()
except that it returns false when
the subnet has multiple prefixes.
For instance, 1.*.*.* /16 return false for this method and returns true for isPrefixBlock()
isSinglePrefixBlock
in interface AddressDivisionSeries
public boolean containsSinglePrefixBlock(int prefixLength)
AddressDivisionSeries
AddressDivisionSeries.isSinglePrefixBlock()
is that AddressDivisionSeries.isSinglePrefixBlock()
returns
false if the series does not have a prefix length assigned to it,
even if there exists a prefix length for which AddressDivisionSeries.containsSinglePrefixBlock(int)
returns true. This method simply returns whether it contains exactly the values for the given prefix length block
regardless of whether that prefix length has been assigned to this series.
Use AddressDivisionSeries.getPrefixLengthForSingleBlock()
to determine whether there is a prefix length for which this method returns true.
containsSinglePrefixBlock
in interface AddressDivisionSeries
public abstract Address toPrefixBlock()
AddressSegmentSeries
toPrefixBlock
in interface AddressSegmentSeries
public abstract Address removePrefixLength()
AddressSegmentSeries
If the series already has a prefix length, the bits outside the prefix become zero.
removePrefixLength
in interface AddressSegmentSeries
public abstract Address removePrefixLength(boolean zeroed)
AddressSegmentSeries
removePrefixLength
in interface AddressSegmentSeries
zeroed
- whether the bits outside the prefix become zeropublic abstract Address adjustPrefixBySegment(boolean nextSegment)
AddressSegmentSeries
Follows the same rules as AddressSegmentSeries.adjustPrefixLength(int)
:
When prefix length is increased, the bits moved within the prefix become zero.
When a prefix length is decreased, the bits moved outside the prefix become zero.
adjustPrefixBySegment
in interface AddressSegmentSeries
nextSegment
- whether to move prefix to previous or following segment coundarypublic abstract Address adjustPrefixBySegment(boolean nextSegment, boolean zeroed)
AddressSegmentSeries
adjustPrefixBySegment
in interface AddressSegmentSeries
nextSegment
- whether to move prefix to previous or following segment coundaryzeroed
- whether the bits that move from one side of the prefix to the other become zero or retain their original valuespublic abstract Address adjustPrefixLength(int adjustment)
AddressSegmentSeries
When prefix length is increased, the bits moved within the prefix become zero. When the prefix is extended beyond the segment series boundary, it is removed. When a prefix length is decreased, the bits moved outside the prefix become zero.
adjustPrefixLength
in interface AddressSegmentSeries
public abstract Address adjustPrefixLength(int adjustment, boolean zeroed)
AddressSegmentSeries
adjustPrefixLength
in interface AddressSegmentSeries
adjustment
- the incrementzeroed
- whether the bits that move from one side of the prefix to the other become zero or retain their original valuespublic abstract Address setPrefixLength(int prefixLength)
AddressSegmentSeries
If this series has a prefix length, and the prefix length is increased, the bits moved within the prefix become zero.
When the prefix is extended beyond the segment series boundary, it is removed.
The bits that move from one side of the prefix length to the other (ie bits moved into the prefix or outside the prefix) are zeroed.
setPrefixLength
in interface AddressSegmentSeries
AddressSegmentSeries.applyPrefixLength(int)
public abstract Address setPrefixLength(int prefixLength, boolean zeroed)
AddressSegmentSeries
When the prefix is extended beyond the segment series boundary, it is removed.
setPrefixLength
in interface AddressSegmentSeries
zeroed
- whether the bits that move from one side of the prefix length to the other (ie bits moved into the prefix or outside the prefix) are zeroed.public abstract Address applyPrefixLength(int networkPrefixLength)
AddressSegmentSeries
Similar to AddressSegmentSeries.setPrefixLength(int)
except that prefix lengths are never increased.
When this series already has a prefix length that is less than or equal to the requested prefix length, this series is returned.
Otherwise the returned series has the given prefix length.
The bits moved outside the prefix will become zero in the returned series.
applyPrefixLength
in interface AddressSegmentSeries
AddressSegmentSeries.setPrefixLength(int)