Method: Subnets::Net4.summarize

Defined in:
ext/subnets/ext.c

.summarize(nets) ⇒ Subnets::Net4

the subnets in nets

Parameters:

Returns:



830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
# File 'ext/subnets/ext.c', line 830

VALUE
method_net4_summarize(VALUE class, VALUE nets) {
  net4_t result;

  for (ssize_t i = 0; i < RARRAY_LEN(nets); i++) {
    const net4_t *net;
    VALUE rbnet = RARRAY_AREF(nets, i);

    assert_kind_of(rbnet, Net4);

    Data_Get_Struct(rbnet, net4_t, net);

    if (i == 0) {
      result.address = (net->address & net->mask);
      result.prefixlen = net->prefixlen;
      result.mask = net->mask;
    } else {
      while (result.prefixlen > net->prefixlen ||
             result.address != (net->address & result.mask)) {
        result.prefixlen = MIN(result.prefixlen-1, net->prefixlen);
        result.mask = mk_mask4(result.prefixlen);
        result.address &= result.mask;
      }
    }
  }

  return net4_new(class, result);
}