Исправлена логика сжатия.

This commit is contained in:
2025-12-05 21:27:00 +10:00
parent 157f334874
commit 4f62c9a051
2 changed files with 42 additions and 14 deletions

View File

@@ -238,13 +238,17 @@ class Node:
self.__recalc()
return delta, fake
def export(self, fmt='{addr}/{masklen}'):
def export_compress(self, fmt='{addr}/{masklen}'):
# считаем статистику
self.finalize()
# сжимаем
self.collapse()
result = []
def walk(node):
if node is None:
return
# если суперсеть реальная дети не нужны
# если суперсеть реальная > дети не нужны
if node.is_real:
result.append(node.net.getAsString(fmt))
return
@@ -253,3 +257,35 @@ class Node:
walk(self)
return "\n".join(result)
def export(self, fmt='{addr}/{masklen}'):
# считаем статистику
self.finalize()
result = []
def walk(node):
if node is None:
return
if node.is_real:
# дети полностью покрывают диапазон родителя?
child_real_vol = 0
for ch in (node.child0, node.child1):
if ch:
child_real_vol += ch.real_volume
# если дети полностью покрывают родителя -> родители не нужны
if child_real_vol >= node.net.volume:
walk(node.child0)
walk(node.child1)
return
# иначе выводим родителя и детей
result.append(node.net.getAsString(fmt))
walk(node.child0)
walk(node.child1)
walk(self)
return "\n".join(result)