Commit 163f3c3a authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by Facebook GitHub Bot

move thunk into its own header

Reviewed By: vitaut

Differential Revision: D27036041

fbshipit-source-id: 038b35b9690f17b59425c13c57176ac7dd017ea5
parent 59dcfc1f
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <folly/functional/Invoke.h> #include <folly/functional/Invoke.h>
#include <folly/lang/Align.h> #include <folly/lang/Align.h>
#include <folly/lang/Exception.h> #include <folly/lang/Exception.h>
#include <folly/lang/Thunk.h>
#include <folly/memory/Malloc.h> #include <folly/memory/Malloc.h>
#include <folly/portability/Config.h> #include <folly/portability/Config.h>
#include <folly/portability/Malloc.h> #include <folly/portability/Malloc.h>
......
...@@ -415,39 +415,4 @@ T declval() noexcept; ...@@ -415,39 +415,4 @@ T declval() noexcept;
#define FOLLY_DECLVAL(...) ::folly::detail::declval<__VA_ARGS__>() #define FOLLY_DECLVAL(...) ::folly::detail::declval<__VA_ARGS__>()
#endif #endif
namespace detail {
// thunk
//
// A carefully curated collection of generic general-purpose thunk templates:
// * make: operator new with given arguments
// * ruin: operator delete
// * ctor: in-place constructor with given arguments
// * dtor: in-place destructor
// * noop: no-op function with the given arguments
struct thunk {
template <typename T, typename... A>
static void* make(A... a) {
return new T(static_cast<A>(a)...);
}
template <typename T>
static void ruin(void* const ptr) noexcept {
delete static_cast<T*>(ptr);
}
template <typename T, typename... A>
static void ctor(void* const ptr, A... a) {
::new (ptr) T(static_cast<A>(a)...);
}
template <typename T>
static void dtor(void* const ptr) noexcept {
static_cast<T*>(ptr)->~T();
}
template <typename... T>
static void noop(T...) noexcept {}
};
} // namespace detail
} // namespace folly } // namespace folly
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <folly/Likely.h> #include <folly/Likely.h>
#include <folly/Utility.h> #include <folly/Utility.h>
#include <folly/detail/Singleton.h> #include <folly/detail/Singleton.h>
#include <folly/lang/Thunk.h>
#include <folly/lang/TypeInfo.h> #include <folly/lang/TypeInfo.h>
namespace folly { namespace folly {
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <folly/Likely.h> #include <folly/Likely.h>
#include <folly/Synchronized.h> #include <folly/Synchronized.h>
#include <folly/io/async/EventBase.h> #include <folly/io/async/EventBase.h>
#include <folly/lang/Thunk.h>
namespace folly { namespace folly {
......
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
namespace folly {
namespace detail {
// thunk
//
// A carefully curated collection of generic general-purpose thunk templates:
// * make: operator new with given arguments
// * ruin: operator delete
// * ctor: in-place constructor with given arguments
// * dtor: in-place destructor
// * noop: no-op function with the given arguments
struct thunk {
template <typename T, typename... A>
static void* make(A... a) {
return new T(static_cast<A>(a)...);
}
template <typename T>
static void ruin(void* const ptr) noexcept {
delete static_cast<T*>(ptr);
}
template <typename T, typename... A>
static void ctor(void* const ptr, A... a) {
::new (ptr) T(static_cast<A>(a)...);
}
template <typename T>
static void dtor(void* const ptr) noexcept {
static_cast<T*>(ptr)->~T();
}
template <typename... T>
static void noop(T...) noexcept {}
};
} // namespace detail
} // namespace folly
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment