tools: replace boost::any usage with ndn::any

Change-Id: I7048a64b7c17353037ea9a64a11366d2fae6fd49
diff --git a/tests/tools/nfdc/command-parser.t.cpp b/tests/tools/nfdc/command-parser.t.cpp
index ddf9653..3eef29d 100644
--- a/tests/tools/nfdc/command-parser.t.cpp
+++ b/tests/tools/nfdc/command-parser.t.cpp
@@ -109,8 +109,8 @@
   std::tie(noun, verb, ca, execute) = parser.parse({"route", "add", "/n", "300"}, ParseMode::ONE_SHOT);
   BOOST_CHECK_EQUAL(noun, "route");
   BOOST_CHECK_EQUAL(verb, "add");
-  BOOST_CHECK_EQUAL(boost::any_cast<Name>(ca.at("prefix")), "/n");
-  BOOST_CHECK_EQUAL(boost::any_cast<uint64_t>(ca.at("nexthop")), 300);
+  BOOST_CHECK_EQUAL(ndn::any_cast<Name>(ca.at("prefix")), "/n");
+  BOOST_CHECK_EQUAL(ndn::any_cast<uint64_t>(ca.at("nexthop")), 300);
 
   std::tie(noun, verb, ca, execute) = parser.parse({"route", "add2", "/n", "300"}, ParseMode::ONE_SHOT);
   BOOST_CHECK_EQUAL(noun, "route");
@@ -119,7 +119,7 @@
   std::tie(noun, verb, ca, execute) = parser.parse({"route", "list", "400"}, ParseMode::ONE_SHOT);
   BOOST_CHECK_EQUAL(noun, "route");
   BOOST_CHECK_EQUAL(verb, "list");
-  BOOST_CHECK_EQUAL(boost::any_cast<uint64_t>(ca.at("nexthop")), 400);
+  BOOST_CHECK_EQUAL(ndn::any_cast<uint64_t>(ca.at("nexthop")), 400);
 
   BOOST_CHECK_THROW(parser.parse({}, ParseMode::ONE_SHOT),
                     CommandParser::NoSuchCommandError);
diff --git a/tools/nfdc/command-arguments.hpp b/tools/nfdc/command-arguments.hpp
index a949f99..164a672 100644
--- a/tools/nfdc/command-arguments.hpp
+++ b/tools/nfdc/command-arguments.hpp
@@ -31,7 +31,6 @@
 
 #include <ndn-cxx/encoding/nfd-constants.hpp>
 
-#include <boost/any.hpp>
 #include <boost/logic/tribool.hpp>
 
 namespace nfd {
@@ -43,19 +42,9 @@
 
 /** \brief contains named command arguments
  */
-class CommandArguments : public std::map<std::string, boost::any>
+class CommandArguments : public std::map<std::string, ndn::any>
 {
 public:
-  /** \return the argument value, or a default value if the argument is omitted on command line
-   */
-  template<typename T>
-  T
-  get(const std::string& key, const T& defaultValue = T()) const
-  {
-    auto i = find(key);
-    return i == end() ? defaultValue : boost::any_cast<T>(i->second);
-  }
-
   /** \return the argument value, or nullopt if the argument is omitted on command line
    */
   template<typename T>
@@ -63,10 +52,16 @@
   getOptional(const std::string& key) const
   {
     auto i = find(key);
-    if (i == end()) {
-      return nullopt;
-    }
-    return boost::any_cast<T>(i->second);
+    return i == end() ? nullopt : ndn::make_optional(ndn::any_cast<T>(i->second));
+  }
+
+  /** \return the argument value, or a default value if the argument is omitted on command line
+   */
+  template<typename T>
+  T
+  get(const std::string& key, const T& defaultValue = T()) const
+  {
+    return getOptional<T>(key).value_or(defaultValue);
   }
 
   /** \brief get an optional boolean argument as tribool
@@ -76,10 +71,7 @@
   getTribool(const std::string& key) const
   {
     auto value = getOptional<bool>(key);
-    if (value) {
-      return *value;
-    }
-    return boost::logic::indeterminate;
+    return value ? boost::logic::tribool(*value) : boost::logic::indeterminate;
   }
 };
 
diff --git a/tools/nfdc/command-definition.cpp b/tools/nfdc/command-definition.cpp
index 27b30f2..9dce67a 100644
--- a/tools/nfdc/command-definition.cpp
+++ b/tools/nfdc/command-definition.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017,  Regents of the University of California,
+ * Copyright (c) 2014-2018,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -24,6 +24,7 @@
  */
 
 #include "command-definition.hpp"
+
 #include <ndn-cxx/util/logger.hpp>
 
 namespace nfd {
@@ -240,18 +241,17 @@
   BOOST_THROW_EXCEPTION(std::invalid_argument("unrecognized FacePersistency '" + s + "'"));
 }
 
-boost::any
+ndn::any
 CommandDefinition::parseValue(ArgValueType valueType, const std::string& token) const
 {
   switch (valueType) {
     case ArgValueType::NONE:
     case ArgValueType::ANY:
       BOOST_ASSERT(false);
-      return boost::any();
+      return {};
 
-    case ArgValueType::BOOLEAN: {
+    case ArgValueType::BOOLEAN:
       return parseBoolean(token);
-    }
 
     case ArgValueType::UNSIGNED: {
       // boost::lexical_cast<uint64_t> will accept negative number
@@ -290,7 +290,7 @@
   }
 
   BOOST_ASSERT(false);
-  return boost::any();
+  return {};
 }
 
 } // namespace nfdc
diff --git a/tools/nfdc/command-definition.hpp b/tools/nfdc/command-definition.hpp
index 5661ff2..c512948 100644
--- a/tools/nfdc/command-definition.hpp
+++ b/tools/nfdc/command-definition.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017,  Regents of the University of California,
+ * Copyright (c) 2014-2018,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -130,11 +130,7 @@
   class Error : public std::invalid_argument
   {
   public:
-    explicit
-    Error(const std::string& what)
-      : std::invalid_argument(what)
-    {
-    }
+    using std::invalid_argument::invalid_argument;
   };
 
   CommandDefinition(const std::string& noun, const std::string& verb);
@@ -195,13 +191,12 @@
   parse(const std::vector<std::string>& tokens, size_t start = 0) const;
 
 private:
-  boost::any
+  ndn::any
   parseValue(ArgValueType valueType, const std::string& token) const;
 
 private:
   std::string m_noun;
   std::string m_verb;
-
   std::string m_title;
 
   struct Arg
@@ -211,8 +206,7 @@
     bool isRequired;
     std::string metavar;
   };
-  typedef std::map<std::string, Arg> ArgMap;
-  ArgMap m_args;
+  std::map<std::string, Arg> m_args;
   std::set<std::string> m_requiredArgs;
   std::vector<std::string> m_positionalArgs;
 };
diff --git a/tools/nfdc/face-module.cpp b/tools/nfdc/face-module.cpp
index ae6ba16..7bde8bf 100644
--- a/tools/nfdc/face-module.cpp
+++ b/tools/nfdc/face-module.cpp
@@ -310,10 +310,8 @@
 void
 FaceModule::destroy(ExecuteContext& ctx)
 {
-  const boost::any& faceIdOrUri = ctx.args.at("face");
-
   FindFace findFace(ctx);
-  FindFace::Code res = findFace.execute(faceIdOrUri);
+  FindFace::Code res = findFace.execute(ctx.args.at("face"));
 
   ctx.exitCode = static_cast<int>(res);
   switch (res) {
diff --git a/tools/nfdc/find-face.cpp b/tools/nfdc/find-face.cpp
index 918693f..bb6183d 100644
--- a/tools/nfdc/find-face.cpp
+++ b/tools/nfdc/find-face.cpp
@@ -56,14 +56,14 @@
 }
 
 FindFace::Code
-FindFace::execute(const boost::any& faceIdOrUri, bool allowMulti)
+FindFace::execute(const ndn::any& faceIdOrUri, bool allowMulti)
 {
-  const uint64_t* faceId = boost::any_cast<uint64_t>(&faceIdOrUri);
+  const uint64_t* faceId = ndn::any_cast<uint64_t>(&faceIdOrUri);
   if (faceId != nullptr) {
     return this->execute(*faceId);
   }
   else {
-    return this->execute(boost::any_cast<FaceUri>(faceIdOrUri), allowMulti);
+    return this->execute(ndn::any_cast<FaceUri>(faceIdOrUri), allowMulti);
   }
 }
 
diff --git a/tools/nfdc/find-face.hpp b/tools/nfdc/find-face.hpp
index 68e5f7b..ea1245b 100644
--- a/tools/nfdc/find-face.hpp
+++ b/tools/nfdc/find-face.hpp
@@ -71,12 +71,12 @@
   execute(uint64_t faceId);
 
   /** \brief find face by FaceId or FaceUri
-   *  \param faceIdOrUri a boost::any that contains uint64_t or FaceUri
+   *  \param faceIdOrUri a ndn::any that contains uint64_t or FaceUri
    *  \param allowMulti effective only if \p faceIdOrUri contains a FaceUri
-   *  \throw boost::bad_any_cast faceIdOrUri is neither uint64_t nor FaceUri
+   *  \throw ndn::bad_any_cast faceIdOrUri is neither uint64_t nor FaceUri
    */
   Code
-  execute(const boost::any& faceIdOrUri, bool allowMulti = false);
+  execute(const ndn::any& faceIdOrUri, bool allowMulti = false);
 
   /** \brief find face by FaceQueryFilter
    *  \pre execute has not been invoked
diff --git a/tools/nfdc/rib-module.cpp b/tools/nfdc/rib-module.cpp
index 47acd0c..b41d33a 100644
--- a/tools/nfdc/rib-module.cpp
+++ b/tools/nfdc/rib-module.cpp
@@ -144,7 +144,7 @@
 RibModule::add(ExecuteContext& ctx)
 {
   auto prefix = ctx.args.get<Name>("prefix");
-  const boost::any& nexthop = ctx.args.at("nexthop");
+  auto nexthop = ctx.args.at("nexthop");
   auto origin = ctx.args.get<RouteOrigin>("origin", ndn::nfd::ROUTE_ORIGIN_STATIC);
   auto cost = ctx.args.get<uint64_t>("cost", 0);
   bool wantChildInherit = !ctx.args.get<bool>("no-inherit", false);
@@ -212,7 +212,7 @@
 RibModule::remove(ExecuteContext& ctx)
 {
   auto prefix = ctx.args.get<Name>("prefix");
-  const boost::any& nexthop = ctx.args.at("nexthop");
+  auto nexthop = ctx.args.at("nexthop");
   auto origin = ctx.args.get<RouteOrigin>("origin", ndn::nfd::ROUTE_ORIGIN_STATIC);
 
   FindFace findFace(ctx);