Migrate to C++17 and refactor

Change-Id: I53407266939258990a1c3a9363c3ebe9ea113fd2
diff --git a/src/redirection/redirection-email.cpp b/src/redirection/redirection-email.cpp
index 863eb91..c13ad91 100644
--- a/src/redirection/redirection-email.cpp
+++ b/src/redirection/redirection-email.cpp
@@ -19,16 +19,16 @@
  */
 
 #include "redirection-email.hpp"
+
 #include <boost/algorithm/string.hpp>
 
 namespace ndncert {
 
-NDNCERT_REGISTER_POLICY_FACTORY(RedirectionEmail, "email");
+NDNCERT_REGISTER_REDIRECTION_POLICY(RedirectionEmail, "email");
 
 RedirectionEmail::RedirectionEmail(const std::string& format)
-  : RedirectionPolicy(format)
+  : m_domain(format)
 {
-  m_domain = format;
 }
 
 bool
diff --git a/src/redirection/redirection-email.hpp b/src/redirection/redirection-email.hpp
index 9a338ef..9a8c403 100644
--- a/src/redirection/redirection-email.hpp
+++ b/src/redirection/redirection-email.hpp
@@ -25,13 +25,11 @@
 
 namespace ndncert {
 
-/**
- * assign names base on client probe parameter
- */
 class RedirectionEmail : public RedirectionPolicy
 {
 public:
-  explicit RedirectionEmail(const std::string& format = "");
+  explicit
+  RedirectionEmail(const std::string& format = "");
 
   bool
   isRedirecting(const std::multimap<std::string, std::string>& params) override;
diff --git a/src/redirection/redirection-param.cpp b/src/redirection/redirection-param.cpp
index d74d105..1ce9517 100644
--- a/src/redirection/redirection-param.cpp
+++ b/src/redirection/redirection-param.cpp
@@ -19,18 +19,19 @@
  */
 
 #include "redirection-param.hpp"
+
 #include <boost/algorithm/string.hpp>
 
 namespace ndncert {
 
-NDNCERT_REGISTER_POLICY_FACTORY(RedirectionParam, "param");
+NDNCERT_REGISTER_REDIRECTION_POLICY(RedirectionParam, "param");
 
 RedirectionParam::RedirectionParam(const std::string& format)
-  : RedirectionPolicy(format)
 {
   if (format.empty()) {
     return;
   }
+
   std::vector<std::string> strs;
   boost::split(strs,format,boost::is_any_of("&"));
   for (const auto& s : strs) {
@@ -47,7 +48,7 @@
 {
   for (const auto& p : m_format) {
     bool found = false;
-    for (auto it = params.find(p.first); it != params.end() && it->first == p.first; it ++) {
+    for (auto it = params.find(p.first); it != params.end() && it->first == p.first; ++it) {
       if (it->second == p.second) {
         found = true;
         break;
diff --git a/src/redirection/redirection-param.hpp b/src/redirection/redirection-param.hpp
index d067a1f..270fb3d 100644
--- a/src/redirection/redirection-param.hpp
+++ b/src/redirection/redirection-param.hpp
@@ -25,13 +25,11 @@
 
 namespace ndncert {
 
-/**
- * assign names base on client probe parameter
- */
 class RedirectionParam : public RedirectionPolicy
 {
 public:
-  explicit RedirectionParam(const std::string& format = "");
+  explicit
+  RedirectionParam(const std::string& format = "");
 
   bool
   isRedirecting(const std::multimap<std::string, std::string>& params) override;
diff --git a/src/redirection/redirection-policy.cpp b/src/redirection/redirection-policy.cpp
index 88aef3e..9ecda9a 100644
--- a/src/redirection/redirection-policy.cpp
+++ b/src/redirection/redirection-policy.cpp
@@ -25,7 +25,7 @@
 std::unique_ptr<RedirectionPolicy>
 RedirectionPolicy::createPolicyFunc(const std::string& policyType, const std::string& format)
 {
-  PolicyFactory& factory = getFactory();
+  auto& factory = getFactory();
   auto i = factory.find(policyType);
   return i == factory.end() ? nullptr : i->second(format);
 }
diff --git a/src/redirection/redirection-policy.hpp b/src/redirection/redirection-policy.hpp
index cba0cd8..9e55467 100644
--- a/src/redirection/redirection-policy.hpp
+++ b/src/redirection/redirection-policy.hpp
@@ -29,11 +29,9 @@
 
 class RedirectionPolicy : boost::noncopyable
 {
-protected:
-  explicit RedirectionPolicy(const std::string& format = "") {}
-
 public:
-  virtual ~RedirectionPolicy() = default;
+  virtual
+  ~RedirectionPolicy() = default;
 
   /**
    * @brief The Redirection Policy provided by the CA operator to decide if redirection is suitable.
@@ -45,37 +43,37 @@
   virtual bool
   isRedirecting(const std::multimap<std::string, std::string>& params) = 0;
 
-public:
-  template <class PolicyType>
+public: // factory
+  template<class PolicyType>
   static void
-  registerRedirectionPolicy(const std::string& typeName)
+  registerRedirectionPolicy(const std::string& type)
   {
     PolicyFactory& factory = getFactory();
-    BOOST_ASSERT(factory.count(typeName) == 0);
-    factory[typeName] = [](const std::string& format) { return std::make_unique<PolicyType>(format); };
+    BOOST_ASSERT(factory.count(type) == 0);
+    factory[type] = [] (const std::string& format) { return std::make_unique<PolicyType>(format); };
   }
 
   static std::unique_ptr<RedirectionPolicy>
   createPolicyFunc(const std::string& policyType, const std::string& format = "");
 
 private:
-  typedef std::function<std::unique_ptr<RedirectionPolicy>(const std::string&)> FactoryCreateFunc;
-  typedef std::map<std::string, FactoryCreateFunc> PolicyFactory;
+  using CreateFunc = std::function<std::unique_ptr<RedirectionPolicy>(const std::string &)>;
+  using PolicyFactory = std::map<std::string, CreateFunc>;
 
   static PolicyFactory&
   getFactory();
 };
 
-#define NDNCERT_REGISTER_POLICY_FACTORY(C, T)                                  \
-  static class NdnCert##C##PolicyFactoryRegistrationClass                      \
-  {                                                                               \
-  public:                                                                         \
-    NdnCert##C##PolicyFactoryRegistrationClass()                               \
-    {                                                                             \
-      ::ndncert::RedirectionPolicy::registerRedirectionPolicy<C>(T);        \
-    }                                                                             \
-  } g_NdnCert##C##RedirectionPolicyRegistrationVariable
-
 } // namespace ndncert
 
+#define NDNCERT_REGISTER_REDIRECTION_POLICY(C, T)                             \
+static class NdnCert##C##RedirectionPolicyRegistrationClass                   \
+{                                                                             \
+public:                                                                       \
+  NdnCert##C##RedirectionPolicyRegistrationClass()                            \
+  {                                                                           \
+    ::ndncert::RedirectionPolicy::registerRedirectionPolicy<C>(T);            \
+  }                                                                           \
+} g_NdnCert##C##RedirectionPolicyRegistrationVariable
+
 #endif // NDNCERT_REDIRECTION_POLICY_HPP