11767c5feSopenharmony_ci// Copyright (C) 2011 The Libphonenumber Authors 21767c5feSopenharmony_ci// 31767c5feSopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 41767c5feSopenharmony_ci// you may not use this file except in compliance with the License. 51767c5feSopenharmony_ci// You may obtain a copy of the License at 61767c5feSopenharmony_ci// 71767c5feSopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 81767c5feSopenharmony_ci// 91767c5feSopenharmony_ci// Unless required by applicable law or agreed to in writing, software 101767c5feSopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS, 111767c5feSopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121767c5feSopenharmony_ci// See the License for the specific language governing permissions and 131767c5feSopenharmony_ci// limitations under the License. 141767c5feSopenharmony_ci 151767c5feSopenharmony_ci// Author: Fredrik Roubert 161767c5feSopenharmony_ci 171767c5feSopenharmony_ci#include "phonenumbers/regexp_cache.h" 181767c5feSopenharmony_ci 191767c5feSopenharmony_ci#include <cstddef> 201767c5feSopenharmony_ci#include <string> 211767c5feSopenharmony_ci#include <utility> 221767c5feSopenharmony_ci 231767c5feSopenharmony_ci#include "phonenumbers/base/synchronization/lock.h" 241767c5feSopenharmony_ci#include "phonenumbers/regexp_adapter.h" 251767c5feSopenharmony_ci 261767c5feSopenharmony_ciusing std::string; 271767c5feSopenharmony_ci 281767c5feSopenharmony_cinamespace i18n { 291767c5feSopenharmony_cinamespace phonenumbers { 301767c5feSopenharmony_ci 311767c5feSopenharmony_ciRegExpCache::RegExpCache(const AbstractRegExpFactory& regexp_factory, 321767c5feSopenharmony_ci size_t min_items) 331767c5feSopenharmony_ci : regexp_factory_(regexp_factory), 341767c5feSopenharmony_ci#ifdef I18N_PHONENUMBERS_USE_TR1_UNORDERED_MAP 351767c5feSopenharmony_ci cache_impl_(new CacheImpl(min_items)) 361767c5feSopenharmony_ci#else 371767c5feSopenharmony_ci cache_impl_(new CacheImpl()) 381767c5feSopenharmony_ci#endif 391767c5feSopenharmony_ci{} 401767c5feSopenharmony_ci 411767c5feSopenharmony_ciRegExpCache::~RegExpCache() { 421767c5feSopenharmony_ci AutoLock l(lock_); 431767c5feSopenharmony_ci for (CacheImpl::const_iterator 441767c5feSopenharmony_ci it = cache_impl_->begin(); it != cache_impl_->end(); ++it) { 451767c5feSopenharmony_ci delete it->second; 461767c5feSopenharmony_ci } 471767c5feSopenharmony_ci} 481767c5feSopenharmony_ci 491767c5feSopenharmony_ciconst RegExp& RegExpCache::GetRegExp(const string& pattern) { 501767c5feSopenharmony_ci AutoLock l(lock_); 511767c5feSopenharmony_ci CacheImpl::const_iterator it = cache_impl_->find(pattern); 521767c5feSopenharmony_ci if (it != cache_impl_->end()) return *it->second; 531767c5feSopenharmony_ci 541767c5feSopenharmony_ci const RegExp* regexp = regexp_factory_.CreateRegExp(pattern); 551767c5feSopenharmony_ci cache_impl_->insert(std::make_pair(pattern, regexp)); 561767c5feSopenharmony_ci return *regexp; 571767c5feSopenharmony_ci} 581767c5feSopenharmony_ci 591767c5feSopenharmony_ci} // namespace phonenumbers 601767c5feSopenharmony_ci} // namespace i18n 61