util: move CFReleaser from security/tpm

CFReleaser is used by both TPM backend and NetworkMonitor.

refs #3940

Change-Id: I39222bb4dec686d9338e6c4cb71108dd67f6cca1
diff --git a/src/net/detail/network-monitor-impl-osx.cpp b/src/net/detail/network-monitor-impl-osx.cpp
index b2129b5..57eceeb 100644
--- a/src/net/detail/network-monitor-impl-osx.cpp
+++ b/src/net/detail/network-monitor-impl-osx.cpp
@@ -68,6 +68,8 @@
 namespace ndn {
 namespace net {
 
+using util::CFReleaser;
+
 NDN_LOG_INIT(ndn.NetworkMonitor);
 
 NetworkMonitorImplOsx::NetworkMonitorImplOsx(boost::asio::io_service& io)
diff --git a/src/net/detail/network-monitor-impl-osx.hpp b/src/net/detail/network-monitor-impl-osx.hpp
index d1ce8f2..8de354c 100644
--- a/src/net/detail/network-monitor-impl-osx.hpp
+++ b/src/net/detail/network-monitor-impl-osx.hpp
@@ -29,7 +29,7 @@
 #error "This file should not be compiled ..."
 #endif
 
-#include "../../security/tpm/helper-osx.hpp"
+#include "../../util/cf-releaser-osx.hpp"
 #include "../../util/scheduler.hpp"
 #include "../../util/scheduler-scoped-event-id.hpp"
 
@@ -110,8 +110,8 @@
   util::scheduler::ScopedEventId m_cfLoopEvent;
 
   SCDynamicStoreContext m_context;
-  CFReleaser<SCDynamicStoreRef> m_scStore;
-  CFReleaser<CFRunLoopSourceRef> m_loopSource;
+  util::CFReleaser<SCDynamicStoreRef> m_scStore;
+  util::CFReleaser<CFRunLoopSourceRef> m_loopSource;
 
   boost::asio::ip::udp::socket m_nullUdpSocket;
 };
diff --git a/src/security/tpm/back-end-osx.cpp b/src/security/tpm/back-end-osx.cpp
index 7f1aed1..53c2295 100644
--- a/src/security/tpm/back-end-osx.cpp
+++ b/src/security/tpm/back-end-osx.cpp
@@ -21,7 +21,6 @@
 
 #include "back-end-osx.hpp"
 #include "key-handle-osx.hpp"
-#include "helper-osx.hpp"
 #include "../transform/private-key.hpp"
 #include "tpm.hpp"
 
@@ -34,6 +33,8 @@
 namespace security {
 namespace tpm {
 
+using util::CFReleaser;
+
 class BackEndOsx::Impl
 {
 public:
diff --git a/src/security/tpm/back-end-osx.hpp b/src/security/tpm/back-end-osx.hpp
index 8759ef4..1a644d9 100644
--- a/src/security/tpm/back-end-osx.hpp
+++ b/src/security/tpm/back-end-osx.hpp
@@ -23,7 +23,7 @@
 #define NDN_SECURITY_TPM_BACK_END_OSX_HPP
 
 #include "back-end.hpp"
-#include "helper-osx.hpp"
+#include "key-ref-osx.hpp"
 
 #ifndef NDN_CXX_HAVE_OSX_FRAMEWORKS
 #error "This file should not be compiled ..."
diff --git a/src/security/tpm/key-handle-osx.hpp b/src/security/tpm/key-handle-osx.hpp
index 669d7bd..c1b338f 100644
--- a/src/security/tpm/key-handle-osx.hpp
+++ b/src/security/tpm/key-handle-osx.hpp
@@ -23,7 +23,7 @@
 #define NDN_SECURITY_TPM_KEY_HANDLE_OSX_HPP
 
 #include "key-handle.hpp"
-#include "helper-osx.hpp"
+#include "key-ref-osx.hpp"
 
 #ifndef NDN_CXX_HAVE_OSX_FRAMEWORKS
 #error "This file should not be compiled ..."
diff --git a/src/security/tpm/key-ref-osx.hpp b/src/security/tpm/key-ref-osx.hpp
new file mode 100644
index 0000000..02ed524
--- /dev/null
+++ b/src/security/tpm/key-ref-osx.hpp
@@ -0,0 +1,38 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2017 Regents of the University of California.
+ *
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
+ *
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ *
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
+ */
+
+#ifndef NDN_SECURITY_TPM_KEY_REF_OSX_HPP
+#define NDN_SECURITY_TPM_KEY_REF_OSX_HPP
+
+#include "../../util/cf-releaser-osx.hpp"
+#include <Security/Security.h>
+
+namespace ndn {
+namespace security {
+namespace tpm {
+
+using KeyRefOsx = util::CFReleaser<SecKeyRef>;
+
+} // namespace tpm
+} // namespace security
+} // namespace ndn
+
+#endif // NDN_SECURITY_TPM_KEY_REF_OSX_HPP
diff --git a/src/security/tpm/helper-osx.hpp b/src/util/cf-releaser-osx.hpp
similarity index 87%
rename from src/security/tpm/helper-osx.hpp
rename to src/util/cf-releaser-osx.hpp
index 9271e68..61afeba 100644
--- a/src/security/tpm/helper-osx.hpp
+++ b/src/util/cf-releaser-osx.hpp
@@ -19,19 +19,19 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_SECURITY_TPM_HELPER_OSX_HPP
-#define NDN_SECURITY_TPM_HELPER_OSX_HPP
+#ifndef NDN_UTIL_CF_RELEASER_OSX_HPP
+#define NDN_UTIL_CF_RELEASER_OSX_HPP
 
-#include "../../common.hpp"
+#include "../common.hpp"
 
 #ifndef NDN_CXX_HAVE_OSX_FRAMEWORKS
 #error "This file should not be included ..."
 #endif
 
 #include <CoreFoundation/CoreFoundation.h>
-#include <Security/Security.h>
 
 namespace ndn {
+namespace util {
 
 /**
  * @brief Helper class to wrap CoreFoundation object pointers
@@ -41,6 +41,9 @@
  *
  * Original implementation by Christopher Hunt and it was borrowed from
  * http://www.cocoabuilder.com/archive/cocoa/130776-auto-cfrelease-and.html
+ *
+ * @note The filename cf-releaser-osx.hpp is an intentional violation of code-style rule 2.1.
+ *       Having '-osx' suffix is necessary to prevent installation on non-macOS platforms.
  */
 template<class T>
 class CFReleaser
@@ -109,9 +112,7 @@
     return m_typeRef != nullptr;
   }
 
-  ///////////////////
-  // Miscellaneous //
-
+public: // Miscellaneous
   void
   retain(const T& typeRef)
   {
@@ -143,14 +144,7 @@
   T m_typeRef;
 };
 
-namespace security {
-namespace tpm {
-
-using KeyRefOsx = CFReleaser<SecKeyRef>;
-
-} // namespace tpm
-} // namespace security
-
+} // namespace util
 } // namespace ndn
 
-#endif // NDN_SECURITY_TPM_HELPER_OSX_HPP
+#endif // NDN_UTIL_CF_RELEASER_OSX_HPP