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

ruby-changes:12462

From: nobu <ko1@a...>
Date: Fri, 17 Jul 2009 13:56:34 +0900 (JST)
Subject: [ruby-changes:12462] Ruby:r24162 (trunk): * random.c (random_equal): new method Random#==.

nobu	2009-07-17 13:56:12 +0900 (Fri, 17 Jul 2009)

  New Revision: 24162

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24162

  Log:
    * random.c (random_equal): new method Random#==.

  Modified files:
    trunk/ChangeLog
    trunk/random.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24161)
+++ ChangeLog	(revision 24162)
@@ -1,3 +1,7 @@
+Fri Jul 17 13:55:53 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* random.c (random_equal): new method Random#==.
+
 Fri Jul 17 13:35:47 2009  Tanaka Akira  <akr@f...>
 
 	* ext/socket/init.c (rsock_getfamily): return AF_UNSPEC if getsockname
Index: random.c
===================================================================
--- random.c	(revision 24161)
+++ random.c	(revision 24162)
@@ -911,6 +911,26 @@
 }
 
 /*
+ * call-seq:
+ *     prng1 == prng2 -> true or false
+ *
+ * Returns true if the generators' states equal.
+ */
+static VALUE
+random_equal(VALUE self, VALUE other)
+{
+    rb_random_t *r1, *r2;
+    if (rb_obj_class(self) != rb_obj_class(other)) return Qfalse;
+    r1 = get_rnd(self);
+    r2 = get_rnd(other);
+    if (!RTEST(rb_funcall2(r1->seed, rb_intern("=="), 1, &r2->seed))) return Qfalse;
+    if (memcmp(r1->mt.state, r2->mt.state, sizeof(r1->mt.state))) return Qfalse;
+    if ((r1->mt.next - r1->mt.state) != (r2->mt.next - r2->mt.state)) return Qfalse;
+    if (r1->mt.left != r2->mt.left) return Qfalse;
+    return Qtrue;
+}
+
+/*
  *  call-seq:
  *     rand(max=0)    => number
  *
@@ -991,6 +1011,7 @@
     rb_define_method(rb_cRandom, "marshal_load", random_load, 1);
     rb_define_method(rb_cRandom, "state", random_state, 0);
     rb_define_method(rb_cRandom, "left", random_left, 0);
+    rb_define_method(rb_cRandom, "==", random_equal, 1);
 
     rb_define_singleton_method(rb_cRandom, "srand", rb_f_srand, -1);
     rb_define_singleton_method(rb_cRandom, "rand", rb_f_rand, -1);

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

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