X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=folly%2FLockTraitsBoost.h;h=79b8af111225c852838893d70e8eccbd9f32c430;hb=58399f25e774f06b3048eb7cde4302b917848d19;hp=dd9a17b6b74e69194a1992990b24eccdef2aeb6f;hpb=9276f2a5646a94eda765c92b171b98c499313213;p=folly.git diff --git a/folly/LockTraitsBoost.h b/folly/LockTraitsBoost.h index dd9a17b6..79b8af11 100644 --- a/folly/LockTraitsBoost.h +++ b/folly/LockTraitsBoost.h @@ -1,5 +1,5 @@ /* - * Copyright 2016 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,36 +22,44 @@ */ #pragma once +#include #include #if FOLLY_LOCK_TRAITS_HAVE_TIMED_MUTEXES -#include namespace folly { +namespace detail { +/// Convert a std::chrono::duration argument to boost::chrono::duration +template +boost::chrono::duration> toBoostDuration( + const std::chrono::duration>& d) { + return boost::chrono::duration>(d.count()); +} +} // namespace detail + /** * LockTraits specialization for boost::shared_mutex */ template <> struct LockTraits - : public folly::detail::LockTraitsSharedBase { + : public LockTraitsBase { static constexpr bool is_shared = true; static constexpr bool is_timed = true; + template 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& timeout) { + return mutex.try_lock_for(detail::toBoostDuration(timeout)); } + template 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& timeout) { + return mutex.try_lock_shared_for(detail::toBoostDuration(timeout)); } }; @@ -60,15 +68,15 @@ struct LockTraits */ template <> struct LockTraits - : public folly::detail::LockTraitsUniqueBase { + : public LockTraitsBase { static constexpr bool is_shared = false; static constexpr bool is_timed = true; + template 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& timeout) { + return mutex.try_lock_for(detail::toBoostDuration(timeout)); } }; @@ -77,17 +85,17 @@ struct LockTraits */ template <> struct LockTraits - : public folly::detail::LockTraitsUniqueBase { + : public LockTraitsBase { static constexpr bool is_shared = false; static constexpr bool is_timed = true; + template 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& timeout) { + return mutex.try_lock_for(detail::toBoostDuration(timeout)); } }; -} // folly +} // namespace folly #endif // FOLLY_LOCK_TRAITS_HAVE_TIMED_MUTEXES