summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-10-04 18:56:32 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-10-04 18:56:32 +0000
commit2a3528a051347ef336e89576e945dc789aab3771 (patch)
tree6f27e43cbaa0e9d52fe2c1a6171e192b71358331 /lib
parent7a796ddefc977dabe6f1415bcbe3e5310191b0c6 (diff)
* 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
Diffstat (limited to 'lib')
-rw-r--r--lib/ipaddr.rb31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/ipaddr.rb b/lib/ipaddr.rb
index 336c5e1b21..56b906c805 100644
--- a/lib/ipaddr.rb
+++ b/lib/ipaddr.rb
@@ -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