Inline scope guard factory function.
authorZbigniew Kostrzewa <z.kostrzewa@samsung.com>
Mon, 22 Jul 2013 07:54:18 +0000 (09:54 +0200)
committerGerrit Code Review <gerrit@gerrit.vlan144.tizendev.org>
Wed, 31 Jul 2013 06:43:05 +0000 (06:43 +0000)
[Issue#] N/A
[Problem] N/A
[Cause] N/A
[Solution] Inlining this function should improve efficiency.
[SCMRequest] N/A
[Verification]
1. Build respository.
2. Run command:
  `wrt-commons-tests-core --output=text --regexp='ScopeGuard*'`

Change-Id: I24d7ce9ad26411997829b6feb3a59326b60cb7c2

modules/core/include/dpl/scope_guard.h

index 2471937..21a7b0c 100644 (file)
@@ -81,7 +81,7 @@ class ScopeGuard
 };
 
 template<typename FunctionType>
-ScopeGuard<typename std::decay<FunctionType>::type>
+inline ScopeGuard<typename std::decay<FunctionType>::type>
 MakeScopeGuard(FunctionType&& function)
 {
   return ScopeGuard<typename std::decay<FunctionType>::type>(
@@ -92,7 +92,7 @@ namespace detail {
 enum class ScopeGuardOnExit {};
 
 template <typename FunctionType>
-ScopeGuard<typename std::decay<FunctionType>::type>
+inline ScopeGuard<typename std::decay<FunctionType>::type>
 operator+(detail::ScopeGuardOnExit, FunctionType&& function)
 {
   return ScopeGuard<typename std::decay<FunctionType>::type>(
@@ -101,7 +101,9 @@ operator+(detail::ScopeGuardOnExit, FunctionType&& function)
 }
 }
 
-// FIXME provide support for compilers not supporting variadic macros
+// FIXME provide support for compilers not supporting variadic macros;
+//       instead of using variadic macros (for compatibility) we could
+//       capture all by '&' (only referenced variables would be captured)
 #define DPL_SCOPE_EXIT(...) \
     auto DPL_ANONYMOUS_VARIABLE(DPL_SCOPE_EXIT_STATE) \
     = ::DPL::detail::ScopeGuardOnExit() + [__VA_ARGS__]()