Commit 804743d8 authored by Adam Simpkins's avatar Adam Simpkins Committed by Facebook Github Bot 7

update LockTraitsBoost to handle arbitrary duration types

Summary:
Update the boost LockTraits classes to accept arbitrary std::chrono::duration
types, rather than just std::chrono::milliseconds.

Reviewed By: yfeldblum

Differential Revision: D3533556

fbshipit-source-id: e764cdf4dafa0b11cd7558c2d5bfb6f80dce88cf
parent e88735c8
......@@ -30,6 +30,15 @@
namespace folly {
namespace detail {
/// Convert a std::chrono::duration argument to boost::chrono::duration
template <class Rep, std::intmax_t Num, std::intmax_t Denom>
boost::chrono::duration<Rep, boost::ratio<Num, Denom>> toBoostDuration(
const std::chrono::duration<Rep, std::ratio<Num, Denom>>& d) {
return boost::chrono::duration<Rep, boost::ratio<Num, Denom>>(d.count());
}
}
/**
* LockTraits specialization for boost::shared_mutex
*/
......@@ -39,19 +48,18 @@ struct LockTraits<boost::shared_mutex>
static constexpr bool is_shared = true;
static constexpr bool is_timed = true;
template <class Rep, class Period>
static bool try_lock_for(
boost::shared_mutex& mutex,
std::chrono::milliseconds timeout) {
// Convert the std::chrono argument to boost::chrono
return mutex.try_lock_for(boost::chrono::milliseconds(timeout.count()));
const std::chrono::duration<Rep, Period>& timeout) {
return mutex.try_lock_for(detail::toBoostDuration(timeout));
}
template <class Rep, class Period>
static bool try_lock_shared_for(
boost::shared_mutex& mutex,
std::chrono::milliseconds timeout) {
// Convert the std::chrono argument to boost::chrono
return mutex.try_lock_shared_for(
boost::chrono::milliseconds(timeout.count()));
const std::chrono::duration<Rep, Period>& timeout) {
return mutex.try_lock_shared_for(detail::toBoostDuration(timeout));
}
};
......@@ -64,11 +72,11 @@ struct LockTraits<boost::timed_mutex>
static constexpr bool is_shared = false;
static constexpr bool is_timed = true;
template <class Rep, class Period>
static bool try_lock_for(
boost::timed_mutex& mutex,
std::chrono::milliseconds timeout) {
// Convert the std::chrono argument to boost::chrono
return mutex.try_lock_for(boost::chrono::milliseconds(timeout.count()));
const std::chrono::duration<Rep, Period>& timeout) {
return mutex.try_lock_for(detail::toBoostDuration(timeout));
}
};
......@@ -81,11 +89,11 @@ struct LockTraits<boost::recursive_timed_mutex>
static constexpr bool is_shared = false;
static constexpr bool is_timed = true;
template <class Rep, class Period>
static bool try_lock_for(
boost::recursive_timed_mutex& mutex,
std::chrono::milliseconds timeout) {
// Convert the std::chrono argument to boost::chrono
return mutex.try_lock_for(boost::chrono::milliseconds(timeout.count()));
const std::chrono::duration<Rep, Period>& timeout) {
return mutex.try_lock_for(detail::toBoostDuration(timeout));
}
};
} // 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