* 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:
knu 2007-10-04 18:56:32 +00:00
Родитель 7a796ddefc
Коммит 2a3528a051
2 изменённых файлов: 43 добавлений и 0 удалений

Просмотреть файл

@ -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