private Numerical computeHopCountECS(LinkNode head) { List<LinkNode> path = computeShortestLinkNodePath(head); if (path == null) return null; else { NumericalBuilder result = new NumericalBuilder(); BigDecimal cost = new BigDecimal(path.size()); return result.setCost(cost).build(); } } private List<LinkNode> computeShortestLinkNodePath(LinkNode head) {
private Numerical computeBandwidthECS(LinkNode head) { //// TODO: 16-3-3 Long result = null; LinkedList<LinkNode> queue = new LinkedList<>(); Map<LinkNode, Long> maxBw = new HashMap<LinkNode, Long>(); queue.addLast(head); maxBw.put(head, head.availableBandwidth()); while (!queue.isEmpty()) { LinkNode now = queue.pop(); Long topBw = maxBw.get(now)==null?0L:maxBw.get(now); if (now.isDestHost()) { result = maxBw.get(now); } for (LinkNode child : now.children()) { Long bw = (child.availableBandwidth() > topBw) ? child.availableBandwidth() : topBw; if (maxBw.containsKey(child)) { Long currentBw = maxBw.get(child); if (bw > currentBw) { maxBw.put(child, bw); queue.addLast(child); } } else { maxBw.put(child, bw); queue.addLast(child); } } } NumericalBuilder re = new NumericalBuilder(); return (result == null) ? null : re.setCost(new BigDecimal(-result/500)).build(); }
@Override protected Cost computeCost(TypedAddressData src, TypedAddressData dst, CostTypeData costType) { NumericalBuilder numericalBuilder = new NumericalBuilder(); if (validSourceAndDest(src, dst)) { if (isAddressEqual(src,dst)) { return numericalBuilder.setCost(new BigDecimal(0)).build(); } MatchFields matchFields = createMatchField(src,dst); LinkNode head = routingService.buildRoutePath(matchFields); if (head != null) { return computeCostBasedOnCostType(head, costType); } } return null; }