From 6c43344893e3990a76097207afe47e2294c141f0 Mon Sep 17 00:00:00 2001 From: Pavel Patsey Date: Fri, 24 Jan 2025 12:13:55 +0300 Subject: [PATCH] make calc_dip faster --- vpn_manager/cidr4_merge/cidr4_merger.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/vpn_manager/cidr4_merge/cidr4_merger.py b/vpn_manager/cidr4_merge/cidr4_merger.py index c98700e..655d6c1 100644 --- a/vpn_manager/cidr4_merge/cidr4_merger.py +++ b/vpn_manager/cidr4_merge/cidr4_merger.py @@ -27,16 +27,14 @@ def find_parent(a: Node, b: Node) -> Node: def calc_dip(mask_len_a: int, mask_len_b: int, mask_len_p: int) -> int: - mask_len = mask_len_p + 1 - dip_a = 0 - while mask_len_a > mask_len: - dip_a += 2 ** (32 - mask_len_a) - mask_len_a -= 1 - dip_b = 0 - while mask_len_b > mask_len: - dip_b += 2 ** (32 - mask_len_b) - mask_len_b -= 1 - return dip_a + dip_b + def dip(mla, mlp): + m = mlp + 1 + res = 1 << (mla - m) + res -= 1 + res <<= 32 - mla + return res + + return dip(mask_len_a, mask_len_p) + dip(mask_len_b, mask_len_p) def merge_two_nodes(node_a: Node, node_b: Node) -> tuple[Node, int]: