build: == Dependency change == NLSR now depends on ndn-cxx library

Refs: #1535

Change-Id: I4c7c0c3dcfcac6ee91648a46c07e426adbb5bd20
diff --git a/src/route/nexthop-list.cpp b/src/route/nexthop-list.cpp
new file mode 100644
index 0000000..7edb96e
--- /dev/null
+++ b/src/route/nexthop-list.cpp
@@ -0,0 +1,88 @@
+#include <iostream>
+#include "nexthop-list.hpp"
+#include "nexthop.hpp"
+
+namespace nlsr {
+
+using namespace std;
+
+static bool
+nexthopCompare(NextHop& nh1, NextHop& nh2)
+{
+  return nh1.getConnectingFace() == nh2.getConnectingFace();
+}
+
+static bool
+nexthopRemoveCompare(NextHop& nh1, NextHop& nh2)
+{
+  return (nh1.getConnectingFace() == nh2.getConnectingFace() &&
+          nh1.getRouteCost() == nh2.getRouteCost()) ;
+}
+
+static bool
+nextHopSortingComparator(const NextHop& nh1, const NextHop& nh2)
+{
+  return nh1.getRouteCost() < nh2.getRouteCost();
+}
+
+/**
+Add next hop to the Next Hop list
+If next hop is new it is added
+If next hop already exists in next
+hop list then updates the route
+cost with new next hop's route cost
+*/
+
+void
+NexthopList::addNextHop(NextHop& nh)
+{
+  std::list<NextHop>::iterator it = std::find_if(m_nexthopList.begin(),
+                                                 m_nexthopList.end(),
+                                                 bind(&nexthopCompare, _1, nh));
+  if (it == m_nexthopList.end())
+  {
+    m_nexthopList.push_back(nh);
+  }
+  if ((*it).getRouteCost() > nh.getRouteCost())
+  {
+    (*it).setRouteCost(nh.getRouteCost());
+  }
+}
+
+/**
+Remove a next hop only if both next hop face and route cost are same
+
+*/
+
+void
+NexthopList::removeNextHop(NextHop& nh)
+{
+  std::list<NextHop>::iterator it = std::find_if(m_nexthopList.begin(),
+                                                 m_nexthopList.end(),
+                                                 bind(&nexthopRemoveCompare, _1, nh));
+  if (it != m_nexthopList.end())
+  {
+    m_nexthopList.erase(it);
+  }
+}
+
+void
+NexthopList::sort()
+{
+  m_nexthopList.sort(nextHopSortingComparator);
+}
+
+ostream&
+operator<<(ostream& os, NexthopList& nhl)
+{
+  std::list<NextHop> nexthopList = nhl.getNextHopList();
+  int i = 1;
+  for (std::list<NextHop>::iterator it = nexthopList.begin();
+       it != nexthopList.end() ; it++, i++)
+  {
+    os << "Nexthop " << i << ": " << (*it) << endl;
+  }
+  return os;
+}
+
+}//namespace nlsr