111 lines
4.1 KiB
Objective-C
111 lines
4.1 KiB
Objective-C
//
|
|
// NBPhoneNumber.m
|
|
// libPhoneNumber
|
|
//
|
|
//
|
|
|
|
#import "NBPhoneNumber.h"
|
|
#import "NBPhoneNumberDefines.h"
|
|
|
|
@implementation NBPhoneNumber
|
|
|
|
- (instancetype)init {
|
|
self = [super init];
|
|
|
|
if (self) {
|
|
self.nationalNumber = @-1;
|
|
self.countryCode = @-1;
|
|
self.numberOfLeadingZeros = @(1);
|
|
}
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void)clearCountryCodeSource {
|
|
[self setCountryCodeSource:nil];
|
|
}
|
|
|
|
- (NBECountryCodeSource)getCountryCodeSourceOrDefault {
|
|
if (nil == self.countryCodeSource) {
|
|
return NBECountryCodeSourceFROM_NUMBER_WITH_PLUS_SIGN;
|
|
}
|
|
|
|
return [self.countryCodeSource integerValue];
|
|
}
|
|
|
|
- (NSUInteger)hash {
|
|
// See https://stackoverflow.com/questions/4948780/magic-number-in-boosthash-combine
|
|
NSUInteger hash = self.countryCode.hash;
|
|
hash ^= self.nationalNumber.hash + 0x9e3779b9 + (hash << 6) + (hash >> 2);
|
|
hash ^= self.numberOfLeadingZeros.hash + 0x9e3779b9 + (hash << 6) + (hash >> 2);
|
|
hash ^= self.extension.hash + 0x9e3779b9 + (hash << 6) + (hash >> 2);
|
|
return hash;
|
|
}
|
|
|
|
- (BOOL)isEqual:(id)object {
|
|
if (![object isKindOfClass:[NBPhoneNumber class]]) {
|
|
return NO;
|
|
}
|
|
|
|
NBPhoneNumber *other = object;
|
|
return ([self.countryCode isEqualToNumber:other.countryCode]) &&
|
|
([self.nationalNumber isEqualToNumber:other.nationalNumber]) &&
|
|
(self.italianLeadingZero == other.italianLeadingZero) &&
|
|
([self.numberOfLeadingZeros isEqualToNumber:other.numberOfLeadingZeros]) &&
|
|
((self.extension == nil && other.extension == nil) ||
|
|
[self.extension isEqualToString:other.extension]);
|
|
}
|
|
|
|
- (id)copyWithZone:(NSZone *)zone {
|
|
NBPhoneNumber *phoneNumberCopy = [[NBPhoneNumber allocWithZone:zone] init];
|
|
|
|
phoneNumberCopy.countryCode = [self.countryCode copy];
|
|
phoneNumberCopy.nationalNumber = [self.nationalNumber copy];
|
|
phoneNumberCopy.extension = [self.extension copy];
|
|
phoneNumberCopy.italianLeadingZero = self.italianLeadingZero;
|
|
phoneNumberCopy.numberOfLeadingZeros = [self.numberOfLeadingZeros copy];
|
|
phoneNumberCopy.rawInput = [self.rawInput copy];
|
|
phoneNumberCopy.countryCodeSource = [self.countryCodeSource copy];
|
|
phoneNumberCopy.preferredDomesticCarrierCode = [self.preferredDomesticCarrierCode copy];
|
|
|
|
return phoneNumberCopy;
|
|
}
|
|
|
|
- (instancetype)initWithCoder:(NSCoder *)coder {
|
|
if (self = [super init]) {
|
|
self.countryCode = [coder decodeObjectForKey:@"countryCode"];
|
|
self.nationalNumber = [coder decodeObjectForKey:@"nationalNumber"];
|
|
self.extension = [coder decodeObjectForKey:@"extension"];
|
|
self.italianLeadingZero = [[coder decodeObjectForKey:@"italianLeadingZero"] boolValue];
|
|
self.numberOfLeadingZeros = [coder decodeObjectForKey:@"numberOfLeadingZeros"];
|
|
self.rawInput = [coder decodeObjectForKey:@"rawInput"];
|
|
self.countryCodeSource = [coder decodeObjectForKey:@"countryCodeSource"];
|
|
self.preferredDomesticCarrierCode = [coder decodeObjectForKey:@"preferredDomesticCarrierCode"];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)encodeWithCoder:(NSCoder *)coder {
|
|
[coder encodeObject:self.countryCode forKey:@"countryCode"];
|
|
[coder encodeObject:self.nationalNumber forKey:@"nationalNumber"];
|
|
[coder encodeObject:self.extension forKey:@"extension"];
|
|
[coder encodeObject:[NSNumber numberWithBool:self.italianLeadingZero]
|
|
forKey:@"italianLeadingZero"];
|
|
[coder encodeObject:self.numberOfLeadingZeros forKey:@"numberOfLeadingZeros"];
|
|
[coder encodeObject:self.rawInput forKey:@"rawInput"];
|
|
[coder encodeObject:self.countryCodeSource forKey:@"countryCodeSource"];
|
|
[coder encodeObject:self.preferredDomesticCarrierCode forKey:@"preferredDomesticCarrierCode"];
|
|
}
|
|
|
|
- (NSString *)description {
|
|
return [NSString stringWithFormat:
|
|
@" - countryCode[%@], nationalNumber[%@], extension[%@], "
|
|
@"italianLeadingZero[%@], numberOfLeadingZeros[%@], rawInput[%@] "
|
|
@"countryCodeSource[%@] preferredDomesticCarrierCode[%@]",
|
|
self.countryCode, self.nationalNumber, self.extension,
|
|
self.italianLeadingZero ? @"Y" : @"N", self.numberOfLeadingZeros,
|
|
self.rawInput, self.countryCodeSource, self.preferredDomesticCarrierCode];
|
|
}
|
|
|
|
@end
|