1// Copyright (C) 2012 The Libphonenumber Authors 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15// Utility for international short phone numbers, such as short codes and 16// emergency numbers. Note most commercial short numbers are not handled here, 17// but by the phonenumberutil. 18 19#ifndef I18N_PHONENUMBERS_SHORTNUMBERINFO_H_ 20#define I18N_PHONENUMBERS_SHORTNUMBERINFO_H_ 21 22#include <map> 23#include <string> 24 25#include "phonenumbers/base/basictypes.h" 26#include "phonenumbers/base/memory/scoped_ptr.h" 27#include "phonenumbers/phonemetadata.pb.h" 28 29namespace i18n { 30namespace phonenumbers { 31 32using std::map; 33using std::string; 34 35class PhoneNumberUtil; 36 37class ShortNumberInfo { 38 public: 39 ShortNumberInfo(); 40 41 // Returns true if the number might be used to connect to an emergency service 42 // in the given region. 43 // 44 // This method takes into account cases where the number might contain 45 // formatting, or might have additional digits appended (when it is okay to do 46 // that in the region specified). 47 bool ConnectsToEmergencyNumber(const string& number, 48 const string& region_code) const; 49 50 // Returns true if the number exactly matches an emergency service number in 51 // the given region. 52 // 53 // This method takes into account cases where the number might contain 54 // formatting, but doesn't allow additional digits to be appended. 55 bool IsEmergencyNumber(const string& number, 56 const string& region_code) const; 57 58 private: 59 const PhoneNumberUtil& phone_util_; 60 61 // A mapping from a RegionCode to the PhoneMetadata for that region. 62 scoped_ptr<map<string, PhoneMetadata> > 63 region_to_short_metadata_map_; 64 65 const i18n::phonenumbers::PhoneMetadata* GetMetadataForRegion( 66 const string& region_code) const; 67 68 bool MatchesEmergencyNumberHelper(const string& number, 69 const string& region_code, 70 bool allow_prefix_match) const; 71 72 DISALLOW_COPY_AND_ASSIGN(ShortNumberInfo); 73}; 74 75} // namespace phonenumbers 76} // namespace i18n 77 78#endif // I18N_PHONENUMBERS_SHORTNUMBERINFO_H_ 79