void NexthopList::addNextHop(const NextHop& nh) { std::set<NextHop, NextHopComparator>::iterator it = std::find_if(m_nexthopList.begin(), m_nexthopList.end(), std::bind(&nexthopAddCompare, _1, nh)); if (it == m_nexthopList.end()) { m_nexthopList.insert(nh); } else if (it->getRouteCost() > nh.getRouteCost()) { removeNextHop(*it); m_nexthopList.insert(nh); } }
bool operator() (const NextHop& nh1, const NextHop& nh2) const { if (nh1.getRouteCostAsAdjustedInteger() < nh2.getRouteCostAsAdjustedInteger()) { return true; } else if (nh1.getRouteCostAsAdjustedInteger() == nh2.getRouteCostAsAdjustedInteger()) { return nh1.getConnectingFaceUri() < nh2.getConnectingFaceUri(); } else { return false; } }
static inline bool compare_NextHop_cost(const NextHop& a, const NextHop& b) { return a.getCost() < b.getCost(); }
static inline bool predicate_NextHop_eq_Face(const NextHop& nexthop, shared_ptr<Face> face) { return nexthop.getFace() == face; }
static bool nexthopRemoveCompare(const NextHop& nh1, const NextHop& nh2) { return (nh1.getConnectingFaceUri() == nh2.getConnectingFaceUri() && nh1.getRouteCostAsAdjustedInteger() == nh2.getRouteCostAsAdjustedInteger()) ; }
static bool nexthopAddCompare(const NextHop& nh1, const NextHop& nh2) { return nh1.getConnectingFaceUri() == nh2.getConnectingFaceUri(); }