196b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// Copyright (C) 2013 The Libphonenumber Authors
296b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com//
396b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// Licensed under the Apache License, Version 2.0 (the "License");
496b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// you may not use this file except in compliance with the License.
596b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// You may obtain a copy of the License at
696b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com//
796b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// http://www.apache.org/licenses/LICENSE-2.0
896b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com//
996b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// Unless required by applicable law or agreed to in writing, software
1096b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// distributed under the License is distributed on an "AS IS" BASIS,
1196b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1296b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// See the License for the specific language governing permissions and
1396b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// limitations under the License.
1496b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
1596b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// Author: Philippe Liard
1696b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
17fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com#ifndef I18N_PHONENUMBERS_BASE_THREAD_CHECKER_H_
18fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com#define I18N_PHONENUMBERS_BASE_THREAD_CHECKER_H_
1996b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
2096b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com#if !defined(I18N_PHONENUMBERS_USE_BOOST)
2196b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
2296b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// Note that I18N_PHONENUMBERS_NO_THREAD_SAFETY must be defined only to let the
2396b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// user of the library know that it can't be used in a thread-safe manner when
2496b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com// it is not depending on Boost.
25b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com#if !defined(__linux__) && !defined(__APPLE__) && \
26b886df44145f2b98006e6f394c4fbe0a5892c9a2philip.liard@gmail.com    !defined(I18N_PHONENUMBERS_NO_THREAD_SAFETY)
27fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com#error Building without Boost, please provide \
28fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com       -DI18N_PHONENUMBERS_NO_THREAD_SAFETY
2996b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com#endif
3096b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
3196b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com#endif
3296b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
3396b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com#if !defined(NDEBUG) && !defined(I18N_PHONENUMBERS_USE_BOOST) && \
3496b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com    (defined(__linux__) || defined(__apple__))
3596b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
3696b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com#include <pthread.h>
3796b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
3896b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.comnamespace i18n {
3996b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.comnamespace phonenumbers {
4096b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
4196b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.comclass ThreadChecker {
4296b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com public:
4396b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com  ThreadChecker() : thread_id_(pthread_self()) {}
4496b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
4596b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com  bool CalledOnValidThread() const {
4696b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com    return thread_id_ == pthread_self();
4796b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com  }
4896b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
4996b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com private:
5096b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com  const pthread_t thread_id_;
5196b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com};
5296b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
5396b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com#else
5496b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
5596b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.comnamespace i18n {
5696b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.comnamespace phonenumbers {
5796b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
5896b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.comclass ThreadChecker {
5996b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com public:
6096b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com  bool CalledOnValidThread() const {
6196b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com    return true;
6296b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com  }
6396b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com};
6496b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
6596b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com#endif
6696b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
6796b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com}  // namespace phonenumbers
6896b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com}  // namespace i18n
6996b80a3b937dfdd22d738ab9a71bfb10d5c5ad60philip.liard@gmail.com
70fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com#endif  // I18N_PHONENUMBERS_BASE_THREAD_CHECKER_H_
71