示例#1
0
def minimise(table):
    """Minimise a routing table."""
    # Remove default entries
    table_ = rde_minimise(table, None)

    # Split the table into sub-tables with the same route.
    subtables = defaultdict(list)
    for entry in table_:
        subtables[entry.route].append((entry.key, entry.mask))

    # Minimise each subtable in turn
    mintables = dict()
    for i, (route, keymasks) in enumerate(iteritems(subtables)):
        trie = Node()

        for key, mask in keymasks:
            insert(trie, key, mask)

        mintables[route] = list(trie.get_keys_and_masks())

    # Return to routing table form
    return [
        RoutingTableEntry(r, k, m) for r, kms in iteritems(mintables) for
        k, m in kms
    ]
示例#2
0
def minimise(table):
    """Minimise a routing table."""
    # Remove default entries
    table_ = rde_minimise(table, None)

    # Split the table into sub-tables with the same route.
    subtables = defaultdict(list)
    for entry in table_:
        subtables[entry.route].append((entry.key, entry.mask))

    # Minimise each subtable in turn
    mintables = dict()
    for i, (route, keymasks) in enumerate(iteritems(subtables)):
        trie = Node()

        for key, mask in keymasks:
            insert(trie, key, mask)

        mintables[route] = list(trie.get_keys_and_masks())

    # Return to routing table form
    return [
        RoutingTableEntry(r, k, m) for r, kms in iteritems(mintables)
        for k, m in kms
    ]
示例#3
0
def my_minimize(chip, table, whole_table, provide_offset, remove_default_entries, times=list()):
    sys.stdout.write("({:3d}, {:3d})\t{:4d}\t".format(
        chip[0], chip[1], len(table)))
    sys.stdout.flush()

    table_ = table

    if remove_default_entries:
        table_ = rde_minimise(table, None)

    if whole_table:
        new_table = use_espresso_on_entire_table(table_, provide_offset)
    else:
        new_table = use_espresso(table_, times, provide_offset)

    assert table_is_subset_of(table, new_table)

    sys.stdout.write("\033[{}m{:4d}\033[39m\t{:.2f}%\n".format(
        32 if len(new_table) < 1024 else 31,
        len(new_table),
        100. * float(len(table) - len(new_table)) / len(table)
    ))

    return chip, new_table