[前][次][番号順一覧][スレッド一覧]

ruby-changes:2137

From: ko1@a...
Date: 5 Oct 2007 03:56:49 +0900
Subject: [ruby-changes:2137] knu - Ruby:r13628 (trunk): * lib/ipaddr.rb (<=>): Implement IPAddr#<=> and make IPAddr

knu	2007-10-05 03:56:32 +0900 (Fri, 05 Oct 2007)

  New Revision: 13628

  Modified files:
    trunk/ChangeLog
    trunk/lib/ipaddr.rb

  Log:
    * 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.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/ipaddr.rb?r1=13628&r2=13627
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13628&r2=13627

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 13627)
+++ ChangeLog	(revision 13628)
@@ -1,3 +1,15 @@
+Fri Oct  5 03:25:51 2007  Akinori MUSHA  <knu@i...>
+
+	* 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@i...>
 
 	* lib/ipaddr.rb (coerce_other): Support type coercion and make &,
Index: lib/ipaddr.rb
===================================================================
--- lib/ipaddr.rb	(revision 13627)
+++ lib/ipaddr.rb	(revision 13628)
@@ -312,6 +312,37 @@
     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

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧]