GSM48: Add code to encode a phone number.
This commit is contained in:
parent
d8e6a7b3a5
commit
c9641eebff
44
GSM48.st
44
GSM48.st
|
@ -496,11 +496,16 @@ Object subclass: GSMNumberingPlan [
|
|||
Object subclass: GSMNumberDigits [
|
||||
<comment: 'I represent table 10.5.118 continued'>
|
||||
DigitMap := nil.
|
||||
ReverseMap := nil.
|
||||
|
||||
GSMNumberDigits class >> mapDigit: aBinary [
|
||||
^ self digitMap at: aBinary asInteger + 1.
|
||||
]
|
||||
|
||||
GSMNumberDigits class >> digitMap: aDigit [
|
||||
^ self reverseMap at: aDigit.
|
||||
]
|
||||
|
||||
GSMNumberDigits class >> digitMap [
|
||||
^ DigitMap ifNil: [
|
||||
DigitMap := Dictionary new.
|
||||
|
@ -518,6 +523,19 @@ Object subclass: GSMNumberDigits [
|
|||
].
|
||||
]
|
||||
|
||||
GSMNumberDigits class >> reverseMap [
|
||||
^ ReverseMap ifNil: [
|
||||
ReverseMap := Dictionary new.
|
||||
self digitMap associationsDo: [:each |
|
||||
ReverseMap at: each value put: (each key - 1).
|
||||
].
|
||||
|
||||
ReverseMap yourself.
|
||||
].
|
||||
]
|
||||
|
||||
|
||||
|
||||
GSMNumberDigits class >> decodeFrom: anArray [
|
||||
| str |
|
||||
|
||||
|
@ -538,6 +556,32 @@ Object subclass: GSMNumberDigits [
|
|||
|
||||
^ str asString
|
||||
]
|
||||
|
||||
GSMNumberDigits class >> encodeFrom: aNumber [
|
||||
| digits res |
|
||||
digits := OrderedCollection new.
|
||||
|
||||
aNumber do: [:digit |
|
||||
digits add: (self digitMap: digit).
|
||||
].
|
||||
|
||||
digits size odd
|
||||
ifTrue: [
|
||||
digits add: 16rF.
|
||||
].
|
||||
|
||||
"Create the binary structure"
|
||||
res := OrderedCollection new.
|
||||
1 to: digits size by: 2 do: [:each |
|
||||
| low high |
|
||||
low := digits at: each.
|
||||
high := digits at: each + 1.
|
||||
|
||||
res add: (low bitOr: (high bitShift: 4)).
|
||||
].
|
||||
|
||||
^ res asByteArray.
|
||||
]
|
||||
]
|
||||
|
||||
GSM48DataHolder subclass: GSMCalledBCDNumber [
|
||||
|
|
10
Tests.st
10
Tests.st
|
@ -207,6 +207,16 @@ TestCase subclass: GSM48Test [
|
|||
number := #(73 132 50 23 120).
|
||||
res := GSMNumberDigits decodeFrom: number.
|
||||
self assert: res = '9448237187'.
|
||||
|
||||
number := #(73 132 50 23 120 186 220 174).
|
||||
res := GSMNumberDigits decodeFrom: number.
|
||||
self assert: res = '9448237187*#abc*'.
|
||||
]
|
||||
|
||||
testNumberEncode [
|
||||
| res |
|
||||
res := GSMNumberDigits encodeFrom: '9448237187*#abc*'.
|
||||
self assert: res = #(73 132 50 23 120 186 220 174) asByteArray.
|
||||
]
|
||||
]
|
||||
|
||||
|
|
Reference in New Issue