summaryrefslogtreecommitdiff
path: root/shortnumberutil.cc
diff options
context:
space:
mode:
Diffstat (limited to 'shortnumberutil.cc')
-rw-r--r--shortnumberutil.cc48
1 files changed, 6 insertions, 42 deletions
diff --git a/shortnumberutil.cc b/shortnumberutil.cc
index acd5c82..0e693b1 100644
--- a/shortnumberutil.cc
+++ b/shortnumberutil.cc
@@ -16,62 +16,26 @@
#include "phonenumbers/shortnumberutil.h"
-#include "phonenumbers/base/memory/scoped_ptr.h"
-#include "phonenumbers/phonemetadata.pb.h"
-#include "phonenumbers/phonenumberutil.h"
-#include "phonenumbers/regexp_adapter.h"
-#include "phonenumbers/regexp_factory.h"
+#include "phonenumbers/shortnumberinfo.h"
namespace i18n {
namespace phonenumbers {
using std::string;
-ShortNumberUtil::ShortNumberUtil()
- : phone_util_(*PhoneNumberUtil::GetInstance()) {
+ShortNumberUtil::ShortNumberUtil() {
}
bool ShortNumberUtil::ConnectsToEmergencyNumber(const string& number,
const string& region_code) const {
- return MatchesEmergencyNumberHelper(number, region_code,
- true /* allows prefix match */);
+ ShortNumberInfo short_info;
+ return short_info.ConnectsToEmergencyNumber(number, region_code);
}
bool ShortNumberUtil::IsEmergencyNumber(const string& number,
const string& region_code) const {
- return MatchesEmergencyNumberHelper(number, region_code,
- false /* doesn't allow prefix match */);
-}
-
-bool ShortNumberUtil::MatchesEmergencyNumberHelper(const string& number,
- const string& region_code, bool allow_prefix_match) const {
- string extracted_number;
- phone_util_.ExtractPossibleNumber(number, &extracted_number);
- if (phone_util_.StartsWithPlusCharsPattern(extracted_number)) {
- // Returns false if the number starts with a plus sign. We don't believe
- // dialing the country code before emergency numbers (e.g. +1911) works,
- // but later, if that proves to work, we can add additional logic here to
- // handle it.
- return false;
- }
- const PhoneMetadata* metadata = phone_util_.GetMetadataForRegion(region_code);
- if (!metadata || !metadata->has_emergency()) {
- return false;
- }
- const scoped_ptr<const AbstractRegExpFactory> regexp_factory(
- new RegExpFactory());
- const scoped_ptr<const RegExp> emergency_number_pattern(
- regexp_factory->CreateRegExp(
- metadata->emergency().national_number_pattern()));
- phone_util_.NormalizeDigitsOnly(&extracted_number);
- const scoped_ptr<RegExpInput> normalized_number_input(
- regexp_factory->CreateInput(extracted_number));
-
- // In Brazil, emergency numbers don't work when additional digits are
- // appended.
- return (!allow_prefix_match || region_code == "BR")
- ? emergency_number_pattern->FullMatch(extracted_number)
- : emergency_number_pattern->Consume(normalized_number_input.get());
+ ShortNumberInfo short_info;
+ return short_info.IsEmergencyNumber(number, region_code);
}
} // namespace phonenumbers