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