49 lines
1.7 KiB
Text
49 lines
1.7 KiB
Text
V data = [
|
||
‘des_system_lib’ = Set(‘std synopsys std_cell_lib des_system_lib dw02 dw01 ramlib ieee’.split(‘ ’)),
|
||
‘dw01’ = Set(‘ieee dw01 dware gtech’.split(‘ ’)),
|
||
‘dw02’ = Set(‘ieee dw02 dware’.split(‘ ’)),
|
||
‘dw03’ = Set(‘std synopsys dware dw03 dw02 dw01 ieee gtech’.split(‘ ’)),
|
||
‘dw04’ = Set(‘dw04 ieee dw01 dware gtech’.split(‘ ’)),
|
||
‘dw05’ = Set(‘dw05 ieee dware’.split(‘ ’)),
|
||
‘dw06’ = Set(‘dw06 ieee dware’.split(‘ ’)),
|
||
‘dw07’ = Set(‘ieee dware’.split(‘ ’)),
|
||
‘dware’ = Set(‘ieee dware’.split(‘ ’)),
|
||
‘gtech’ = Set(‘ieee gtech’.split(‘ ’)),
|
||
‘ramlib’ = Set(‘std ieee’.split(‘ ’)),
|
||
‘std_cell_lib’ = Set(‘ieee std_cell_lib’.split(‘ ’)),
|
||
‘synopsys’ = Set[String]()
|
||
]
|
||
|
||
F toposort2(&data)
|
||
L(k, v) data
|
||
v.discard(k)
|
||
|
||
Set[String] extra_items_in_deps
|
||
L(v) data.values()
|
||
extra_items_in_deps.update(v)
|
||
extra_items_in_deps = extra_items_in_deps - Set(data.keys())
|
||
|
||
L(item) extra_items_in_deps
|
||
data[item] = Set[String]()
|
||
|
||
[String] r
|
||
L
|
||
Set[String] ordered
|
||
L(item, dep) data
|
||
I dep.empty
|
||
ordered.add(item)
|
||
I ordered.empty
|
||
L.break
|
||
|
||
r.append(sorted(Array(ordered)).join(‘ ’))
|
||
|
||
[String = Set[String]] new_data
|
||
L(item, dep) data
|
||
I item !C ordered
|
||
new_data[item] = dep - ordered
|
||
data = move(new_data)
|
||
|
||
assert(data.empty, ‘A cyclic dependency exists’)
|
||
R r
|
||
|
||
print(toposort2(&data).join("\n"))
|