Skip to content

Commit 18b5b71

Browse files
author
Guido Medina
committed
MessageFactory code generator changed from if-string-equals to switch-strings which for more than a few strings, in this case message types.
It is faster as it doesn't compare one by one but jumps to the specific hashcode case and then compares.
1 parent 9565b9a commit 18b5b71

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

quickfixj-codegenerator/src/main/resources/org/quickfixj/codegenerator/MessageFactory.xsl

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,38 +53,41 @@ import quickfix.Group;
5353
public class MessageFactory implements quickfix.MessageFactory {
5454

5555
public Message create(String beginString, String msgType) {
56-
<xsl:call-template name="if-statement"/>
56+
<xsl:call-template name="switch-statement"/>
5757
return new <xsl:value-of select="$messagePackage"/>.Message();
5858
}
5959

6060
public Group create(String beginString, String msgType, int correspondingFieldID) {
61-
<xsl:call-template name="group-if-statement"/>
61+
<xsl:call-template name="group-switch-statement"/>
6262
return null;
6363
}
6464
}
6565
</xsl:template>
6666

67-
<xsl:template name="if-statement">
67+
<xsl:template name="switch-statement">
68+
switch (msgType) {
6869
<xsl:for-each select="//fix/messages/message">
69-
if (<xsl:value-of select="$messagePackage"/>.<xsl:value-of select="@name"/>.MSGTYPE.equals(msgType)) {
70-
return new <xsl:value-of select="$messagePackage"/>.<xsl:value-of select="@name"/>();
71-
}
70+
case <xsl:value-of select="$messagePackage"/>.<xsl:value-of select="@name"/>.MSGTYPE:
71+
return new <xsl:value-of select="$messagePackage"/>.<xsl:value-of select="@name"/>();
7272
</xsl:for-each>
73+
}
7374
</xsl:template>
7475

75-
<xsl:template name="group-if-statement">
76+
<xsl:template name="group-switch-statement">
77+
switch (msgType) {
7678
<xsl:for-each select="//fix/messages/message[group or component]">
77-
if (<xsl:value-of select="$messagePackage"/>.<xsl:value-of select="@name"/>.MSGTYPE.equals(msgType)) {
78-
switch (correspondingFieldID) {
79+
case <xsl:value-of select="$messagePackage"/>.<xsl:value-of select="@name"/>.MSGTYPE:
80+
switch (correspondingFieldID) {
7981
<xsl:apply-templates mode="group-factories" select="group">
8082
<xsl:with-param name="fullPath" select="@name"/>
8183
</xsl:apply-templates>
8284
<xsl:apply-templates mode="group-factories" select="component">
8385
<xsl:with-param name="fullPath" select="@name"/>
8486
</xsl:apply-templates>
85-
}
86-
}
87+
}
88+
break;
8789
</xsl:for-each>
90+
}
8891
</xsl:template>
8992

9093
<xsl:template mode="group-factories" match="group">

0 commit comments

Comments
 (0)