diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2014-08-11 20:41:52 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2014-08-29 20:39:46 +0200 |
commit | 9161371a3215e5be0f010d83bd26a9655abe338e (patch) | |
tree | 065279a68290df0a21c56058deccb1be37a68a9f /callagent | |
parent | a536a7a788f21222fbca001d2df4b2578ab47721 (diff) |
perf: Various changes to speed up various operations
* Do not use >>#instVarNamed:put: but add selectors
* Pre-allocate some arrays with a default string to avoid
re-allocations at the start
* Share same parser trees to avoid construction costs
* Remove some lazy allocation and always allocate it
Diffstat (limited to 'callagent')
-rw-r--r-- | callagent/SIPResponse.st | 23 | ||||
-rw-r--r-- | callagent/parameters/SIPCSeq.st | 20 | ||||
-rw-r--r-- | callagent/parameters/SIPGenericParam.st | 19 | ||||
-rw-r--r-- | callagent/parameters/SIPToFromParam.st | 20 | ||||
-rw-r--r-- | callagent/parameters/SIPVia.st | 26 | ||||
-rw-r--r-- | callagent/parser/Extensions.st | 2 | ||||
-rw-r--r-- | callagent/parser/SIPParser.st | 2 |
7 files changed, 79 insertions, 33 deletions
diff --git a/callagent/SIPResponse.st b/callagent/SIPResponse.st index 0058849..6c41faa 100644 --- a/callagent/SIPResponse.st +++ b/callagent/SIPResponse.st @@ -38,12 +38,17 @@ Object subclass: SIPResponse [ SIPResponse class >> code: code with: phrase [ <category: 'factory'> - ^ self new - instVarNamed: #code put: code; - instVarNamed: #phrase put: phrase; + ^ self basicNew + initialize; + code: code; + phrase: phrase; yourself ] + initialize [ + params := OrderedCollection new: 7. + ] + code: aCode [ <category: 'accessing'> code := aCode @@ -59,6 +64,10 @@ Object subclass: SIPResponse [ ^ code ] + phrase: aPhrase [ + phrase := aPhrase + ] + phrase [ <category: 'accessing'> ^ phrase @@ -66,12 +75,12 @@ Object subclass: SIPResponse [ parameters [ <category: 'accessing'> - ^ params ifNil: [params := OrderedCollection new] + ^params ] addParameter: aPar value: aValue [ <category: 'accessing'> - self parameters add: (aPar -> aValue). + params add: (Association key: aPar value: aValue). ] parameter: aPar [ @@ -79,7 +88,7 @@ Object subclass: SIPResponse [ ] parameter: aPar ifAbsent: absent [ - self parameters do: [:each | + params do: [:each | (each key sameAs: aPar) ifTrue: [^ each value]]. ^absent value. @@ -105,7 +114,7 @@ Object subclass: SIPResponse [ nextPutAll: phrase; cr; nl. - self parameters do: [:each | + params do: [:each | out nextPutAll: each key; nextPutAll: ': '; diff --git a/callagent/parameters/SIPCSeq.st b/callagent/parameters/SIPCSeq.st index 09468cb..695750b 100644 --- a/callagent/parameters/SIPCSeq.st +++ b/callagent/parameters/SIPCSeq.st @@ -23,13 +23,25 @@ SIPParam subclass: SIPCSeq [ SIPCSeq class >> parseFrom: aParseDict [ <category: 'creation'> - ^ self new - instVarNamed: #data put: aParseDict asFoldedString; - instVarNamed: #number put: aParseDict first asInteger; - instVarNamed: #method put: aParseDict third; + ^ self basicNew + data: aParseDict asFoldedString; + number: aParseDict first asInteger; + method: aParseDict third; yourself ] + data: aData [ + data := aData + ] + + number: aNumber [ + number := aNumber + ] + + method: aMethod [ + method := aMethod + ] + number [ <category: 'accessing'> ^ number diff --git a/callagent/parameters/SIPGenericParam.st b/callagent/parameters/SIPGenericParam.st index 789b13d..fcf8048 100644 --- a/callagent/parameters/SIPGenericParam.st +++ b/callagent/parameters/SIPGenericParam.st @@ -63,17 +63,14 @@ Object subclass: SIPGenericParam [ asFoldedString [ | str | <category: 'helper'> - str := (WriteStream on: (String new)) - nextPutAll: key; - yourself. - - value isNil ifFalse: [ - str - nextPut: $=; - nextPutAll: value. - ]. - - ^ str contents + ^value isNil + ifTrue: [key] + ifFalse: [ + (WriteStream on: (String new: key size + value size + 1)) + nextPutAll: key; + nextPut: $=; + nextPutAll: value; + contents]. ] isGenericSIPParam [ diff --git a/callagent/parameters/SIPToFromParam.st b/callagent/parameters/SIPToFromParam.st index 46702a1..f911aa9 100644 --- a/callagent/parameters/SIPToFromParam.st +++ b/callagent/parameters/SIPToFromParam.st @@ -31,13 +31,25 @@ SIPParam subclass: SIPToFromParam [ SIPToFromParam class >> parseFrom: anArray [ <category: 'creation'> - ^ self new - instVarNamed: #addr put: anArray first third; - instVarNamed: #data put: anArray asFoldedString; - instVarNamed: #params put: (self buildParams: anArray second); + ^ self basicNew + address: anArray first third; + data: anArray asFoldedString; + params: (self buildParams: anArray second); yourself ] + address: anAddress [ + addr := anAddress + ] + + data: aData [ + data := aData + ] + + params: aParam [ + params := aParam + ] + address [ <category: 'accessing'> ^ addr diff --git a/callagent/parameters/SIPVia.st b/callagent/parameters/SIPVia.st index 4c5f5b2..dc94d06 100644 --- a/callagent/parameters/SIPVia.st +++ b/callagent/parameters/SIPVia.st @@ -35,14 +35,30 @@ SIPParam subclass: SIPVia [ <category: 'creation'> (aParseDict at: 7) second ifNotNil: [:val | port := val second asInteger]. - ^ self new - instVarNamed: #data put: aParseDict asFoldedString; - instVarNamed: #address put: (aParseDict at: 7) first; - instVarNamed: #port put: port; - instVarNamed: #branch put: (self findBranch: (aParseDict at: 8)); + ^self basicNew + data: aParseDict asFoldedString; + address: (aParseDict at: 7) first; + port: port; + branch: (self findBranch: (aParseDict at: 8)); yourself ] + data: aData [ + data := aData + ] + + address: anAddress [ + address := anAddress + ] + + port: aPort [ + port := aPort + ] + + branch: aBranch [ + branch := aBranch + ] + branch [ ^ branch ] diff --git a/callagent/parser/Extensions.st b/callagent/parser/Extensions.st index 1eea8fd..d6933d4 100644 --- a/callagent/parser/Extensions.st +++ b/callagent/parser/Extensions.st @@ -19,7 +19,7 @@ Array extend [ asFoldedString [ <category: '*OsmoSIP-parser'> - ^ (Osmo at: #SIPParser) combineUri: self. + ^ Osmo.SIPParser combineUri: self. ] ] diff --git a/callagent/parser/SIPParser.st b/callagent/parser/SIPParser.st index fb9c71c..bbc42b3 100644 --- a/callagent/parser/SIPParser.st +++ b/callagent/parser/SIPParser.st @@ -36,7 +36,7 @@ SIPGrammar subclass: SIPParser [ SIPParser class >> combineUri: anArray [ | str | - str := WriteStream on: (String new). + str := WriteStream on: (String new: 20). self addArrayRec: anArray on: str. ^ str contents ] |