lsa: cleanup operator<<

Delete .toString() virtual function in favor of ostream output.

Delete Lsa::getOriginRouterCopy() in favor of a custom Boost.Multi-Index
key extractor.

Mark single-parameter constructor as 'explicit'.

Rewrite class-level Doxygen with ABNF syntax.

refs #5308

Change-Id: I3c43395ce86f9a1a52da186fcf8c5a15cf35fe40
diff --git a/src/lsdb.hpp b/src/lsdb.hpp
index 93e1ad9..7e1d9ad 100644
--- a/src/lsdb.hpp
+++ b/src/lsdb.hpp
@@ -118,6 +118,17 @@
     return std::static_pointer_cast<T>(findLsa(router, T::type()));
   }
 
+  struct ExtractOriginRouter
+  {
+    using result_type = ndn::Name;
+
+    ndn::Name
+    operator()(const Lsa& lsa) const
+    {
+      return lsa.getOriginRouter();
+    }
+  };
+
   struct name_hash {
     int
     operator()(const ndn::Name& name) const {
@@ -143,7 +154,7 @@
         bmi::tag<byName>,
         bmi::composite_key<
           Lsa,
-          bmi::const_mem_fun<Lsa, ndn::Name, &Lsa::getOriginRouterCopy>,
+          ExtractOriginRouter,
           bmi::const_mem_fun<Lsa, Lsa::Type, &Lsa::getType>
         >,
         bmi::composite_key_hash<name_hash, enum_class_hash>