From 79f9477475ae662275b23a3d92ea5e867cc9e0d9 Mon Sep 17 00:00:00 2001 From: Grzegorz Rynkowski Date: Fri, 27 Feb 2015 15:19:31 +0100 Subject: [PATCH] [common] Added deleter.h Change-Id: Iafbd273fcbd47187591ee7d5e8395bd2daedc549 Signed-off-by: Grzegorz Rynkowski --- src/common/deleter.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/common/deleter.h diff --git a/src/common/deleter.h b/src/common/deleter.h new file mode 100644 index 00000000..bfccd497 --- /dev/null +++ b/src/common/deleter.h @@ -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 + +namespace common { + +template +struct Deleter +{ + typedef std::function 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 +{ + 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 -- 2.34.1