// routeArcLen.bcpl // The memo-saving length routine used by the combinatorial // and heuristic wire routers // E. McCreight // last edited by McCreight, June 25, 1981 3:07 PM get "route.defs" static [ DistFn memoTable = empty ] let ArcLength(i, j) = valof [ if i eq j then resultis 0 if i gr j then [ let t = i; i = j; j = t ] // exchange i and j let memoKey = (i lshift 8)+j let memo = memoTable+ ((memoKey rem memoTableEntries) lshift 1) if memo>>MEMO.key eq memoKey then resultis memo>>MEMO.value memo>>MEMO.key = memoKey let value = DistFn(X!i, Y!i, X!j, Y!j) memo>>MEMO.value = value resultis value ] (635)\f1