mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/ipaddr.rb (<=>): Implement IPAddr#<=> and make IPAddr
comparable. * lib/ipaddr.rb (succ): Implement IPAddr#succ. You can now create a range between two IPAddr's, which (Range) object is enumeratable. * lib/ipaddr.rb (to_range): A new method to create a Range object for the (network) address. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7a796ddefc
commit
2a3528a051
2 changed files with 43 additions and 0 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
Fri Oct 5 03:25:51 2007 Akinori MUSHA <knu@iDaemons.org>
|
||||||
|
|
||||||
|
* lib/ipaddr.rb (<=>): Implement IPAddr#<=> and make IPAddr
|
||||||
|
comparable.
|
||||||
|
|
||||||
|
* lib/ipaddr.rb (succ): Implement IPAddr#succ. You can now create
|
||||||
|
a range between two IPAddr's, which (Range) object is
|
||||||
|
enumeratable.
|
||||||
|
|
||||||
|
* lib/ipaddr.rb (to_range): A new method to create a Range object
|
||||||
|
for the (network) address.
|
||||||
|
|
||||||
Fri Oct 5 03:14:45 2007 Akinori MUSHA <knu@iDaemons.org>
|
Fri Oct 5 03:14:45 2007 Akinori MUSHA <knu@iDaemons.org>
|
||||||
|
|
||||||
* lib/ipaddr.rb (coerce_other): Support type coercion and make &,
|
* lib/ipaddr.rb (coerce_other): Support type coercion and make &,
|
||||||
|
|
|
@ -312,6 +312,37 @@ class IPAddr
|
||||||
return _reverse + ".ip6.int"
|
return _reverse + ".ip6.int"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns the successor to the ipaddr.
|
||||||
|
def succ
|
||||||
|
return self.clone.set(@addr + 1, @family)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Compares the ipaddr with another.
|
||||||
|
def <=>(other)
|
||||||
|
other = coerce_other(other)
|
||||||
|
|
||||||
|
return nil if other.family != @family
|
||||||
|
|
||||||
|
return @addr <=> other.to_i
|
||||||
|
end
|
||||||
|
include Comparable
|
||||||
|
|
||||||
|
# Creates a Range object for the network address.
|
||||||
|
def to_range
|
||||||
|
begin_addr = (@addr & @mask_addr)
|
||||||
|
|
||||||
|
case @family
|
||||||
|
when Socket::AF_INET
|
||||||
|
end_addr = (@addr | (IN4MASK ^ @mask_addr))
|
||||||
|
when Socket::AF_INET6
|
||||||
|
end_addr = (@addr | (IN6MASK ^ @mask_addr))
|
||||||
|
else
|
||||||
|
raise "unsupported address family"
|
||||||
|
end
|
||||||
|
|
||||||
|
return clone.set(begin_addr, @family)..clone.set(end_addr, @family)
|
||||||
|
end
|
||||||
|
|
||||||
# Returns a string containing a human-readable representation of the
|
# Returns a string containing a human-readable representation of the
|
||||||
# ipaddr. ("#<IPAddr: family:address/mask>")
|
# ipaddr. ("#<IPAddr: family:address/mask>")
|
||||||
def inspect
|
def inspect
|
||||||
|
|
Loading…
Reference in a new issue