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

◆ WriteArrayItems()

void System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteArrayItems ( ElementAccessor[] elements,
TextAccessor text,
ChoiceIdentifierAccessor choice,
TypeDesc arrayTypeDesc,
string arrayName,
string choiceName )
inlineprivate

Definition at line 1271 of file XmlSerializationWriterCodeGen.cs.

1272 {
1273 TypeDesc arrayElementTypeDesc = arrayTypeDesc.ArrayElementTypeDesc;
1274 if (arrayTypeDesc.IsEnumerable)
1275 {
1276 base.Writer.Write(typeof(IEnumerator).FullName);
1277 base.Writer.Write(" e = ");
1278 if (arrayTypeDesc.IsPrivateImplementation)
1279 {
1280 base.Writer.Write("((");
1281 base.Writer.Write(typeof(IEnumerable).FullName);
1282 base.Writer.Write(")");
1283 base.Writer.Write(arrayName);
1284 base.Writer.WriteLine(").GetEnumerator();");
1285 }
1286 else if (arrayTypeDesc.IsGenericInterface)
1287 {
1288 if (arrayTypeDesc.UseReflection)
1289 {
1290 base.Writer.Write("(");
1291 base.Writer.Write(typeof(IEnumerator).FullName);
1292 base.Writer.Write(")");
1293 base.Writer.Write(base.RaCodeGen.GetReflectionVariable(arrayTypeDesc.CSharpName, "System.Collections.Generic.IEnumerable*"));
1294 base.Writer.Write(".Invoke(");
1295 base.Writer.Write(arrayName);
1296 base.Writer.WriteLine(", new object[0]);");
1297 }
1298 else
1299 {
1300 base.Writer.Write("((System.Collections.Generic.IEnumerable<");
1301 base.Writer.Write(arrayElementTypeDesc.CSharpName);
1302 base.Writer.Write(">)");
1303 base.Writer.Write(arrayName);
1304 base.Writer.WriteLine(").GetEnumerator();");
1305 }
1306 }
1307 else
1308 {
1309 if (arrayTypeDesc.UseReflection)
1310 {
1311 base.Writer.Write("(");
1312 base.Writer.Write(typeof(IEnumerator).FullName);
1313 base.Writer.Write(")");
1314 }
1315 base.Writer.Write(base.RaCodeGen.GetStringForMethodInvoke(arrayName, arrayTypeDesc.CSharpName, "GetEnumerator", arrayTypeDesc.UseReflection));
1316 base.Writer.WriteLine(";");
1317 }
1318 base.Writer.WriteLine("if (e != null)");
1319 base.Writer.WriteLine("while (e.MoveNext()) {");
1320 base.Writer.Indent++;
1321 string cSharpName = arrayElementTypeDesc.CSharpName;
1322 WriteLocalDecl(cSharpName, arrayName + "i", "e.Current", arrayElementTypeDesc.UseReflection);
1324 }
1325 else
1326 {
1327 base.Writer.Write("for (int i");
1328 base.Writer.Write(arrayName);
1329 base.Writer.Write(" = 0; i");
1330 base.Writer.Write(arrayName);
1331 base.Writer.Write(" < ");
1332 if (arrayTypeDesc.IsArray)
1333 {
1334 base.Writer.Write(arrayName);
1335 base.Writer.Write(".Length");
1336 }
1337 else
1338 {
1339 base.Writer.Write("((");
1340 base.Writer.Write(typeof(ICollection).FullName);
1341 base.Writer.Write(")");
1342 base.Writer.Write(arrayName);
1343 base.Writer.Write(").Count");
1344 }
1345 base.Writer.Write("; i");
1346 base.Writer.Write(arrayName);
1347 base.Writer.WriteLine("++) {");
1348 base.Writer.Indent++;
1349 int num = elements.Length + ((text != null) ? 1 : 0);
1350 if (num > 1)
1351 {
1352 string cSharpName2 = arrayElementTypeDesc.CSharpName;
1353 WriteLocalDecl(cSharpName2, arrayName + "i", base.RaCodeGen.GetStringForArrayMember(arrayName, "i" + arrayName, arrayTypeDesc), arrayElementTypeDesc.UseReflection);
1354 if (choice != null)
1355 {
1356 string cSharpName3 = choice.Mapping.TypeDesc.CSharpName;
1357 WriteLocalDecl(cSharpName3, choiceName + "i", base.RaCodeGen.GetStringForArrayMember(choiceName, "i" + arrayName, choice.Mapping.TypeDesc), choice.Mapping.TypeDesc.UseReflection);
1358 }
1359 WriteElements(arrayName + "i", choiceName + "i", elements, text, choice, arrayName + "a", writeAccessors: true, arrayElementTypeDesc.IsNullable);
1360 }
1361 else
1362 {
1363 WriteElements(base.RaCodeGen.GetStringForArrayMember(arrayName, "i" + arrayName, arrayTypeDesc), elements, text, choice, arrayName + "a", writeAccessors: true, arrayElementTypeDesc.IsNullable);
1364 }
1365 }
1366 base.Writer.Indent--;
1367 base.Writer.WriteLine("}");
1368 }
void WriteLocalDecl(string typeName, string variableName, string initValue, bool useReflection)
void WriteElements(string source, ElementAccessor[] elements, TextAccessor text, ChoiceIdentifierAccessor choice, string arrayName, bool writeAccessors, bool isNullable)

References System.Xml.Serialization.TypeDesc.ArrayElementTypeDesc, System.Xml.Serialization.TypeDesc.CSharpName, System.Xml.Dictionary, System.FullName, System.text, System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteElements(), and System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteLocalDecl().

Referenced by System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteArray(), and System.Xml.Serialization.XmlSerializationWriterCodeGen.WriteElement().