Component File /CConCat.vb (VB.NET)
1: Option Strict Off
2: Option Explicit On
3: Friend Class CConCat
4:     'Code from http://www.awprofessional.com/articles/article.asp?p=25175&seqNum=3  
5:     ' =================================================== '  
6:     ' CConCat:                      '  
7:     ' This class provides an alternative, more efficient '  
8:     ' approach to string concatenation. Concatenation of '  
9:     ' large VB strings requires reallocation of memory at '  
10:     ' each concatenation. The approach used here reduces '  
11:     ' the number of memory reallocations.         '  
12:     '                           '  
13:     ' Empirical results indicate that this is faster than '  
14:     ' standard VB concatenation for strings greater than '  
15:     ' 1K in length, with the level of improvement growing '  
16:     ' with the size of the string.            '  
17:     '                           '  
18:     '  Public Property Get Text() as String       '  
19:     '  Public Property Let Text(ByVal sNew as String)  '  
20:     '  Public Property Get Increment() as Long      '  
21:     '  Public Property Let Increment(ByVal nNew as Long) '  
22:     '  Public Property Get Length() as Long       '  
23:     '  Public Sub Cat(ByVal sNewPart as String)     '  
24:     '                           '  
25:     ' Copyright © 2001 by Scott R. Loban.         ' ===================================================== '  
26:     
27:     Private m_sText As String '-- Text being stored in object
28:     Private m_nPointer As Integer '-- Pointer to end of string
29:     Private m_nIncrement As Integer '-- Number of bytes to add at a time
30:     
31:     '--- Return the Text Stored in the Class ---'  
32:     
33:     '--- Set (replace) the Text Stored in the Class ---'  
34:     Public Property Text() As String
35:         Get
36:             Dim ErDesc, ErNum, ErSrc As Object
37:             On Error GoTo ErrHandler
38:             Return Left(m_sText, m_nPointer)
39:             Exit Property
40: ErrHandler:  
41:             'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
42:             ErNum = Err.Number
43:             'UPGRADE_WARNING: Couldn't resolve default property of object ErDesc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
44:             ErDesc = Err.Description
45:             'UPGRADE_WARNING: Couldn't resolve default property of object ErSrc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
46:             ErSrc = Err.Source & ", CConCat.Text"
47:             'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
48:             Err.Raise(ErNum, ErSrc, ErDesc)
49:         End Get
50:         Set(ByVal Value As String)
51:             Dim ErDesc, ErNum, ErSrc As Object
52:             On Error GoTo ErrHandler
53:             m_sText = Value
54:             m_nPointer = Len(m_sText)
55:             Exit Property
56: ErrHandler:  
57:             'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
58:             ErNum = Err.Number
59:             'UPGRADE_WARNING: Couldn't resolve default property of object ErDesc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
60:             ErDesc = Err.Description
61:             'UPGRADE_WARNING: Couldn't resolve default property of object ErSrc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
62:             ErSrc = Err.Source & ", CConCat.Text"
63:             'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
64:             Err.Raise(ErNum, ErSrc, ErDesc)
65:         End Set
66:     End Property
67:     
68:     '--- Return the Current Reallocation Increment ---'  
69:     
70:     '--- Set a New Reallocation Increment ---'  
71:     Public Property Increment() As Integer
72:         Get
73:             Dim ErDesc, ErNum, ErSrc As Object
74:             On Error GoTo ErrHandler
75:             Increment = m_nIncrement
76:             Exit Property
77: ErrHandler:  
78:             'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
79:             ErNum = Err.Number
80:             'UPGRADE_WARNING: Couldn't resolve default property of object ErDesc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
81:             ErDesc = Err.Description
82:             'UPGRADE_WARNING: Couldn't resolve default property of object ErSrc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
83:             ErSrc = Err.Source & ", CConCat.Increment"
84:             'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
85:             Err.Raise(ErNum, ErSrc, ErDesc)
86:         End Get
87:         Set(ByVal Value As Integer)
88:             Dim ErDesc, ErNum, ErSrc As Object
89:             On Error GoTo ErrHandler
90:             If Value > 0 Then
91:                 m_nIncrement = Value
92:             End If
93:             Exit Property
94: ErrHandler:  
95:             'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
96:             ErNum = Err.Number
97:             'UPGRADE_WARNING: Couldn't resolve default property of object ErDesc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
98:             ErDesc = Err.Description
99:             'UPGRADE_WARNING: Couldn't resolve default property of object ErSrc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
100:             ErSrc = Err.Source & ", CConCat.Increment"
101:             'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
102:             Err.Raise(ErNum, ErSrc, ErDesc)
103:         End Set
104:     End Property
105:     
106:     '--- Return the Length of the Text Stored in the Class ---'  
107:     Public ReadOnly Property Length() As Integer
108:         Get
109:             Dim ErDesc, ErNum, ErSrc As Object
110:             On Error GoTo ErrHandler
111:             Length = m_nPointer
112:             Exit Property
113: ErrHandler:  
114:             'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
115:             ErNum = Err.Number
116:             'UPGRADE_WARNING: Couldn't resolve default property of object ErDesc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
117:             ErDesc = Err.Description
118:             'UPGRADE_WARNING: Couldn't resolve default property of object ErSrc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
119:             ErSrc = Err.Source & ", CConCat.Length"
120:             'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
121:             Err.Raise(ErNum, ErSrc, ErDesc)
122:         End Get
123:     End Property
124:     
125:     '--- Concatenate the Text Stored in the Class and a Passed String ---'  
126:     Public Sub Cat(ByVal sNewPart As String)
127:         Dim nLen As Integer
128:         Dim ErDesc, ErNum, ErSrc As Object
129:         
130:         On Error GoTo ErrHandler
131:         
132:         nLen = Len(sNewPart)
133:         
134:         If (m_nPointer + nLen) >= Len(m_sText) Then '-- Not enough room
135:             If nLen > m_nIncrement Then '-- Need nLen more bytes
136:                 m_sText = m_sText & Space(nLen) '-- Do Reallocation
137:             Else '-- Add more space
138:                 m_sText = m_sText & Space(m_nIncrement) '-- Do Reallocation
139:             End If
140:         End If
141:         
142:         '--- Store the NewPart in the String ---'  
143:         Mid(m_sText, m_nPointer + 1, nLen) = sNewPart
144:         
145:         '--- Adjust the Pointer ---'  
146:         m_nPointer = m_nPointer + nLen
147:         Exit Sub
148: ErrHandler:  
149:         'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
150:         ErNum = Err.Number
151:         'UPGRADE_WARNING: Couldn't resolve default property of object ErDesc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
152:         ErDesc = Err.Description
153:         'UPGRADE_WARNING: Couldn't resolve default property of object ErSrc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
154:         ErSrc = Err.Source & ", CConCat.Cat"
155:         'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
156:         Err.Raise(ErNum, ErSrc, ErDesc)
157:     End Sub
158:     
159:     'UPGRADE_NOTE: Class_Initialize was upgraded to Class_Initialize_Renamed. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1061"'  
160:     Private Sub Class_Initialize_Renamed()
161:         Dim ErDesc, ErNum, ErSrc As Object
162:         On Error GoTo ErrHandler
163:         m_nIncrement = 50000
164:         m_sText = ""
165:         m_nPointer = 0
166:         Exit Sub
167: ErrHandler:  
168:         'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
169:         ErNum = Err.Number
170:         'UPGRADE_WARNING: Couldn't resolve default property of object ErDesc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
171:         ErDesc = Err.Description
172:         'UPGRADE_WARNING: Couldn't resolve default property of object ErSrc. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
173:         ErSrc = Err.Source & ", CConCat.Class_Initialize"
174:         'UPGRADE_WARNING: Couldn't resolve default property of object ErNum. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"'  
175:         Err.Raise(ErNum, ErSrc, ErDesc)
176:     End Sub
177:     Public Sub New()
178:         MyBase.New()
179:         Class_Initialize_Renamed()
180:     End Sub
181: End Class