1af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com// Copyright (C) 2011 The Libphonenumber Authors
2af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com//
3af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com// Licensed under the Apache License, Version 2.0 (the "License");
4af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com// you may not use this file except in compliance with the License.
5af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com// You may obtain a copy of the License at
6af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com//
7af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com// http://www.apache.org/licenses/LICENSE-2.0
8af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com//
9af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com// Unless required by applicable law or agreed to in writing, software
10af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com// distributed under the License is distributed on an "AS IS" BASIS,
11af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com// See the License for the specific language governing permissions and
13af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com// limitations under the License.
14af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com
15af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com// Author: Philippe Liard
16af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com
17af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#ifndef I18N_PHONENUMBERS_BASE_SYNCHRONIZATION_LOCK_H_
18af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#define I18N_PHONENUMBERS_BASE_SYNCHRONIZATION_LOCK_H_
19af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com
2001e7fad6acf43df86b266928f602d9709af67baephilip.liard@gmail.com#if defined(I18N_PHONENUMBERS_USE_BOOST)
21af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#include <boost/thread/mutex.hpp>
22af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com
2394f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.comnamespace i18n {
2494f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.comnamespace phonenumbers {
2594f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.com
2694f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.comtypedef boost::mutex Lock;
2794f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.comtypedef boost::mutex::scoped_lock AutoLock;
2894f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.com
2994f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.com}  // namespace phonenumbers
3094f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.com}  // namespace i18n
31af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com
3201e7fad6acf43df86b266928f602d9709af67baephilip.liard@gmail.com#else  // I18N_PHONENUMBERS_USE_BOOST
3396b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
3496b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com#include "phonenumbers/base/logging.h"
3596b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com#include "phonenumbers/base/thread_checker.h"
3601e7fad6acf43df86b266928f602d9709af67baephilip.liard@gmail.com
37b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com// Dummy lock implementation on non-POSIX platforms. If you are running on a
38b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com// different platform and care about thread-safety, please compile with
39b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com// -DI18N_PHONENUMBERS_USE_BOOST.
40b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com#if !defined(__linux__) && !defined(__APPLE__)
41b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com
4294f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.comnamespace i18n {
4394f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.comnamespace phonenumbers {
4401e7fad6acf43df86b266928f602d9709af67baephilip.liard@gmail.com
4596b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.comclass Lock {
4696b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com public:
4796b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com  Lock() : thread_checker_() {}
4896b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
4996b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com  void Acquire() const {
5096b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com    DCHECK(thread_checker_.CalledOnValidThread());
5196b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com  }
5296b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
53b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com  void Release() const {
54b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com    DCHECK(thread_checker_.CalledOnValidThread());
55b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com  }
5696b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
5796b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com private:
5896b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com  const ThreadChecker thread_checker_;
5996b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com};
6001e7fad6acf43df86b266928f602d9709af67baephilip.liard@gmail.com
61b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com}  // namespace phonenumbers
62b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com}  // namespace i18n
63b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com
64b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com#else
65b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com#include "phonenumbers/base/synchronization/lock_posix.h"
66b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com#endif
67b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com
68b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.comnamespace i18n {
69b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.comnamespace phonenumbers {
70b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com
7196b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.comclass AutoLock {
7296b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com public:
73b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com  AutoLock(Lock& lock) : lock_(lock) {
74b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com    lock_.Acquire();
7596b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com  }
76b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com
77b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com  ~AutoLock() {
78b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com    lock_.Release();
79b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com  }
80b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com
81b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com private:
82b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com  Lock& lock_;
8301e7fad6acf43df86b266928f602d9709af67baephilip.liard@gmail.com};
8401e7fad6acf43df86b266928f602d9709af67baephilip.liard@gmail.com
8594f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.com}  // namespace phonenumbers
8694f3dc686d5f369ee596aa3e22344683f6773494philip.liard@gmail.com}  // namespace i18n
8701e7fad6acf43df86b266928f602d9709af67baephilip.liard@gmail.com
8801e7fad6acf43df86b266928f602d9709af67baephilip.liard@gmail.com#endif  // I18N_PHONENUMBERS_USE_BOOST
89af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#endif  // I18N_PHONENUMBERS_BASE_SYNCHRONIZATION_LOCK_H_
90