summaryrefslogtreecommitdiffstats
path: root/callagent
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2014-08-11 20:41:52 +0200
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2014-08-29 20:39:46 +0200
commit9161371a3215e5be0f010d83bd26a9655abe338e (patch)
tree065279a68290df0a21c56058deccb1be37a68a9f /callagent
parenta536a7a788f21222fbca001d2df4b2578ab47721 (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.st23
-rw-r--r--callagent/parameters/SIPCSeq.st20
-rw-r--r--callagent/parameters/SIPGenericParam.st19
-rw-r--r--callagent/parameters/SIPToFromParam.st20
-rw-r--r--callagent/parameters/SIPVia.st26
-rw-r--r--callagent/parser/Extensions.st2
-rw-r--r--callagent/parser/SIPParser.st2
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
]