smalltalk
/
osmo-st-gsm
Archived
1
0
Fork 0

GSM48: Add code to encode a phone number.

This commit is contained in:
Holger Hans Peter Freyther 2010-12-05 09:39:56 +01:00
parent d8e6a7b3a5
commit c9641eebff
2 changed files with 54 additions and 0 deletions

View File

@ -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 [

View File

@ -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.
]
]