[common] Added deleter.h
authorGrzegorz Rynkowski <g.rynkowski@samsung.com>
Fri, 27 Feb 2015 14:19:31 +0000 (15:19 +0100)
committerPawel Sikorski <p.sikorski@samsung.com>
Mon, 9 Mar 2015 13:12:36 +0000 (22:12 +0900)
Change-Id: Iafbd273fcbd47187591ee7d5e8395bd2daedc549
Signed-off-by: Grzegorz Rynkowski <g.rynkowski@samsung.com>
src/common/deleter.h [new file with mode: 0644]

diff --git a/src/common/deleter.h b/src/common/deleter.h
new file mode 100644 (file)
index 0000000..bfccd49
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2015 Samsung Electronics Co, Ltd. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMMON_DELETER_H_
+#define COMMON_DELETER_H_
+
+#include <cstdio>
+
+namespace common {
+
+template<typename T>
+struct Deleter
+{
+  typedef std::function<void(T*)> Function;
+
+  Deleter() : function_(NoDelete) {}
+  explicit Deleter(Function const& function) : function_(function) {}
+
+  void operator()(T* ptr) const {
+    function_(ptr);
+  }
+
+  static void CallArrayDelete(T *ptr) { delete[] ptr; };
+  static void CallDelete(T *ptr) { delete ptr; }
+  static void CallFree(T *ptr) { free(ptr); }
+  static void NoDelete(T *) {}
+
+private:
+  Function function_;
+};
+
+struct FileDeleter : public Deleter<FILE>
+{
+  FileDeleter() : Deleter(CloseFile) {}
+  explicit FileDeleter(Function const& function) : Deleter(function) {};
+
+  static void CloseFile(FILE *file) { fclose(file); }
+};
+
+}  // namespace common
+
+#endif  // COMMON_DELETER_H_
\ No newline at end of file