lsdb: rebuild using boost::multi_index to replace 3 LSA lists

refs: #4127

Co-authored-by: Nick Gordon <nmgordon@memphis.edu>

Change-Id: Ic179f90019e472157b0d61c6db02a4afaf4843b6
diff --git a/tools/nlsrc.cpp b/tools/nlsrc.cpp
index b54eb43..aa02ed1 100644
--- a/tools/nlsrc.cpp
+++ b/tools/nlsrc.cpp
@@ -281,23 +281,34 @@
 Nlsrc::fetchFromLsdb(const ndn::Name::Component& datasetType,
                      const std::function<void(const T&)>& recordLsa)
 {
-  ndn::Name command = LSDB_PREFIX;
-  command.append(datasetType);
-
-  ndn::Interest interest(command);
+  ndn::Interest interest(ndn::Name(LSDB_PREFIX).append(datasetType));
 
   auto fetcher = ndn::util::SegmentFetcher::start(m_face, interest, m_validator);
   fetcher->onComplete.connect(std::bind(&Nlsrc::onFetchSuccess<T>, this, _1, recordLsa));
   fetcher->onError.connect(std::bind(&Nlsrc::onTimeout, this, _1, _2));
 }
 
+void
+Nlsrc::recordLsa(const nlsr::Lsa& lsa)
+{
+  Router& router = m_routers.emplace(lsa.getOriginRouter(), Router()).first->second;
+
+  if (lsa.getType() == nlsr::Lsa::Type::ADJACENCY) {
+    router.adjacencyLsaString = lsa.toString();
+  }
+  else if (lsa.getType() == nlsr::Lsa::Type::COORDINATE) {
+    router.coordinateLsaString = lsa.toString();
+  }
+  else if (lsa.getType() == nlsr::Lsa::Type::NAME) {
+    router.nameLsaString = lsa.toString();
+  }
+}
+
 template <class T>
 void
 Nlsrc::fetchFromRt(const std::function<void(const T&)>& recordDataset)
 {
-  ndn::Name command = RT_PREFIX;
-
-  ndn::Interest interest(command);
+  ndn::Interest interest(RT_PREFIX);
 
   auto fetcher = ndn::util::SegmentFetcher::start(m_face, interest, m_validator);
   fetcher->onComplete.connect(std::bind(&Nlsrc::onFetchSuccess<T>, this, _1, recordDataset));
@@ -338,38 +349,6 @@
 }
 
 void
-Nlsrc::recordLsa(const nlsr::Lsa& lsa)
-{
-  const auto& pair = m_routers.emplace(lsa.getOriginRouter(), Router());
-  Router& router = pair.first->second;
-
-  std::ostringstream os;
-
-  switch (lsa.getType()) {
-    case nlsr::Lsa::Type::ADJACENCY: {
-      const nlsr::AdjLsa& adjLsa = static_cast<const nlsr::AdjLsa&>(lsa);
-      os << adjLsa;
-      router.adjacencyLsaString = os.str();
-      break;
-    }
-    case nlsr::Lsa::Type::COORDINATE: {
-      const nlsr::CoordinateLsa& coorLsa = static_cast<const nlsr::CoordinateLsa&>(lsa);
-      os << coorLsa;
-      router.coordinateLsaString = os.str();
-      break;
-    }
-    case nlsr::Lsa::Type::NAME: {
-      const nlsr::NameLsa& nameLsa = static_cast<const nlsr::NameLsa&>(lsa);
-      os << nameLsa;
-      router.nameLsaString = os.str();
-      break;
-    }
-    default:
-      break;
-  }
-}
-
-void
 Nlsrc::recordRtable(const nlsr::RoutingTableStatus& rts)
 {
   std::ostringstream os;
@@ -421,21 +400,6 @@
   printRT();
 }
 
-std::string
-Nlsrc::getLsaInfo(const nlsr::Lsa& lsa)
-{
-  auto duration = ndn::time::duration_cast<ndn::time::seconds>(lsa.getExpirationTimePoint() -
-                                                               ndn::time::system_clock::now());
-  std::ostringstream os;
-  os << "     LsaInfo("
-     << "OriginRouter: " << lsa.getOriginRouter() << ", "
-     << "SequenceNumber: " << lsa.getSeqNo() << ", "
-     << "ExpirationPeriod: " << duration;
-     os << ")\n\n";
-
-  return os.str();
-}
-
 } // namespace nlsrc
 
 ////////////////////////////////////////////////////////////////////////////////