Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ReadBestFitTable()

unsafe override void System.Text.SBCSCodePageEncoding.ReadBestFitTable ( )
inlineprotected

Definition at line 100 of file SBCSCodePageEncoding.cs.

101 {
102 lock (InternalSyncObject)
103 {
104 if (arrayUnicodeBestFit != null)
105 {
106 return;
107 }
108 byte[] array = new byte[m_dataSize - 512];
109 lock (BaseCodePageEncoding.s_streamLock)
110 {
111 BaseCodePageEncoding.s_codePagesEncodingDataStream.Seek(m_firstDataWordOffset + 512, SeekOrigin.Begin);
112 BaseCodePageEncoding.s_codePagesEncodingDataStream.Read(array, 0, array.Length);
113 }
114 fixed (byte* ptr = array)
115 {
116 byte* ptr2 = ptr;
117 char[] array2 = new char[256];
118 for (int i = 0; i < 256; i++)
119 {
120 array2[i] = _mapBytesToUnicode[i];
121 }
122 ushort num;
123 while ((num = ReadUInt16(ptr2)) != 0)
124 {
125 ptr2 += 2;
126 array2[num] = (char)ReadUInt16(ptr2);
127 ptr2 += 2;
128 }
129 arrayBytesBestFit = array2;
130 ptr2 += 2;
131 byte* ptr3 = ptr2;
132 int num2 = 0;
133 int num3 = ReadUInt16(ptr2);
134 ptr2 += 2;
135 while (num3 < 65536)
136 {
137 byte b = *ptr2;
138 ptr2++;
139 switch (b)
140 {
141 case 1:
142 num3 = ReadUInt16(ptr2);
143 ptr2 += 2;
144 continue;
145 case 2:
146 case 3:
147 case 4:
148 case 5:
149 case 6:
150 case 7:
151 case 8:
152 case 9:
153 case 10:
154 case 11:
155 case 12:
156 case 13:
157 case 14:
158 case 15:
159 case 16:
160 case 17:
161 case 18:
162 case 19:
163 case 20:
164 case 21:
165 case 22:
166 case 23:
167 case 24:
168 case 25:
169 case 26:
170 case 27:
171 case 28:
172 case 29:
173 case 31:
174 num3 += b;
175 continue;
176 }
177 if (b > 0)
178 {
179 num2++;
180 }
181 num3++;
182 }
183 array2 = new char[num2 * 2];
184 ptr2 = ptr3;
185 num3 = ReadUInt16(ptr2);
186 ptr2 += 2;
187 num2 = 0;
188 while (num3 < 65536)
189 {
190 byte b2 = *ptr2;
191 ptr2++;
192 switch (b2)
193 {
194 case 1:
195 num3 = ReadUInt16(ptr2);
196 ptr2 += 2;
197 continue;
198 case 2:
199 case 3:
200 case 4:
201 case 5:
202 case 6:
203 case 7:
204 case 8:
205 case 9:
206 case 10:
207 case 11:
208 case 12:
209 case 13:
210 case 14:
211 case 15:
212 case 16:
213 case 17:
214 case 18:
215 case 19:
216 case 20:
217 case 21:
218 case 22:
219 case 23:
220 case 24:
221 case 25:
222 case 26:
223 case 27:
224 case 28:
225 case 29:
226 case 31:
227 num3 += b2;
228 continue;
229 }
230 if (b2 == 30)
231 {
232 b2 = *ptr2;
233 ptr2++;
234 }
235 if (b2 > 0)
236 {
237 array2[num2++] = (char)num3;
238 array2[num2++] = _mapBytesToUnicode[(int)b2];
239 }
240 num3++;
241 }
242 arrayUnicodeBestFit = array2;
243 }
244 }
245 }
BaseCodePageEncoding(int codepage, int dataCodePage)
static unsafe ushort ReadUInt16(byte *pByte)

References System.Text.SBCSCodePageEncoding._mapBytesToUnicode, System.array, System.Text.BaseCodePageEncoding.arrayBytesBestFit, System.Text.BaseCodePageEncoding.arrayUnicodeBestFit, System.Text.SBCSCodePageEncoding.InternalSyncObject, System.Text.BaseCodePageEncoding.m_dataSize, System.Text.BaseCodePageEncoding.m_firstDataWordOffset, System.Text.SBCSCodePageEncoding.ReadUInt16(), System.Text.BaseCodePageEncoding.s_codePagesEncodingDataStream, and System.Text.BaseCodePageEncoding.s_streamLock.

Referenced by System.Text.SBCSCodePageEncoding.GetChars().