1 //  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
2 //  This source code is licensed under both the GPLv2 (found in the
3 //  COPYING file in the root directory) and Apache 2.0 License
4 //  (found in the LICENSE.Apache file in the root directory).
5 
6 #pragma once
7 
8 #include <folly/synchronization/DistributedMutex.h>
9 #include <folly/synchronization/detail/ProxyLockable.h>
10 
11 /**
12  * Specializations for DistributedMutex allow us to use it like a normal
13  * mutex.  Even though it has a non-usual interface
14  */
15 namespace std {
16 template <template <typename> class Atom, bool TimePublishing>
17 class unique_lock<
18     ::folly::detail::distributed_mutex::DistributedMutex<Atom, TimePublishing>>
19     : public ::folly::detail::ProxyLockableUniqueLock<
20           ::folly::detail::distributed_mutex::
21               DistributedMutex<Atom, TimePublishing>> {
22  public:
23   using ::folly::detail::ProxyLockableUniqueLock<
24       ::folly::detail::distributed_mutex::
25           DistributedMutex<Atom, TimePublishing>>::ProxyLockableUniqueLock;
26 };
27 
28 template <template <typename> class Atom, bool TimePublishing>
29 class lock_guard<
30     ::folly::detail::distributed_mutex::DistributedMutex<Atom, TimePublishing>>
31     : public ::folly::detail::ProxyLockableLockGuard<
32           ::folly::detail::distributed_mutex::
33               DistributedMutex<Atom, TimePublishing>> {
34  public:
35   using ::folly::detail::ProxyLockableLockGuard<
36       ::folly::detail::distributed_mutex::
37           DistributedMutex<Atom, TimePublishing>>::ProxyLockableLockGuard;
38 };
39 } // namespace std
40