Method: Subnets::Net4.random

Defined in:
ext/subnets/ext.c

.random(rng = Random.new) ⇒ Net4

Returns a random Net4 address.

Parameters:

  • rng (#rand) (defaults to: Random.new)

    (optional) a random number generator

Returns:

  • (Net4)

    a random Net4 address



209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# File 'ext/subnets/ext.c', line 209

VALUE
method_net4_random(int argc, VALUE *argv, VALUE class) {
  net4_t net;
  VALUE rng, rand;

  rb_scan_args(argc, argv, "01", &rng);
  if (Qnil == rng) {
    rng = rb_funcall(rb_cRandom, rb_intern("new"), 0);
  }

  rand = rb_intern("rand");
  net.address = FIX2INT(rb_funcall(rng, rand, 1, INT2FIX(0xffff+1)));
  net.address |= FIX2INT(rb_funcall(rng, rand, 1, INT2FIX(0xffff+1))) << 16;
  net.prefixlen = FIX2INT(rb_funcall(rng, rb_intern("rand"), 1, INT2FIX(32+1)));
  net.mask = mk_mask4(net.prefixlen);

  return net4_new(class, net);
}