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>
|
||||
|
||||
* lib/ipaddr.rb (coerce_other): Support type coercion and make &,
|
||||
|
|
|
@ -312,6 +312,37 @@ class IPAddr
|
|||
return _reverse + ".ip6.int"
|
||||
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
|
||||
# ipaddr. ("#<IPAddr: family:address/mask>")
|
||||
def inspect
|
||||
|
|
Loading…
Reference in a new issue