util: move CFReleaser from security/tpm
CFReleaser is used by both TPM backend and NetworkMonitor.
refs #3940
Change-Id: I39222bb4dec686d9338e6c4cb71108dd67f6cca1
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/helper-osx.hpp b/src/security/tpm/helper-osx.hpp
deleted file mode 100644
index 9271e68..0000000
--- a/src/security/tpm/helper-osx.hpp
+++ /dev/null
@@ -1,156 +0,0 @@
-/* -*- 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_HELPER_OSX_HPP
-#define NDN_SECURITY_TPM_HELPER_OSX_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 {
-
-/**
- * @brief Helper class to wrap CoreFoundation object pointers
- *
- * The class is similar in spirit to shared_ptr, but uses CoreFoundation
- * mechanisms to retain/release object.
- *
- * Original implementation by Christopher Hunt and it was borrowed from
- * http://www.cocoabuilder.com/archive/cocoa/130776-auto-cfrelease-and.html
- */
-template<class T>
-class CFReleaser
-{
-public: // Construction/destruction
- CFReleaser()
- : m_typeRef(nullptr)
- {
- }
-
- CFReleaser(const T& typeRef)
- : m_typeRef(typeRef)
- {
- }
-
- CFReleaser(const CFReleaser& inReleaser)
- : m_typeRef(nullptr)
- {
- retain(inReleaser.m_typeRef);
- }
-
- CFReleaser&
- operator=(const T& typeRef)
- {
- if (typeRef != m_typeRef) {
- release();
- m_typeRef = typeRef;
- }
- return *this;
- }
-
- CFReleaser&
- operator=(const CFReleaser& inReleaser)
- {
- retain(inReleaser.m_typeRef);
- return *this;
- }
-
- ~CFReleaser()
- {
- release();
- }
-
-public: // Access
- const T&
- get() const
- {
- return m_typeRef;
- }
-
- T&
- get()
- {
- return m_typeRef;
- }
-
- bool
- operator==(const std::nullptr_t&)
- {
- return m_typeRef == nullptr;
- }
-
- bool
- operator!=(const std::nullptr_t&)
- {
- return m_typeRef != nullptr;
- }
-
- ///////////////////
- // Miscellaneous //
-
- void
- retain(const T& typeRef)
- {
- if (typeRef != nullptr) {
- CFRetain(typeRef);
- }
- release();
- m_typeRef = typeRef;
- }
-
- void
- retain()
- {
- T typeRef = m_typeRef;
- m_typeRef = nullptr;
- retain(typeRef);
- }
-
- void
- release()
- {
- if (m_typeRef != nullptr) {
- CFRelease(m_typeRef);
- m_typeRef = nullptr;
- }
- };
-
-private:
- T m_typeRef;
-};
-
-namespace security {
-namespace tpm {
-
-using KeyRefOsx = CFReleaser<SecKeyRef>;
-
-} // namespace tpm
-} // namespace security
-
-} // namespace ndn
-
-#endif // NDN_SECURITY_TPM_HELPER_OSX_HPP
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