Method: Subnets::Net4.summarize
- Defined in:
- ext/subnets/ext.c
.summarize(nets) ⇒ Subnets::Net4
the subnets in nets
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); } |