Исправлена логика сжатия.
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user