LSLib.Granny.GR2.WritableSection.WriteArray C# (CSharp) 메소드

WriteArray() 개인적인 메소드

private WriteArray ( MemberDefinition arrayDefn, Type elementType, System list ) : void
arrayDefn MemberDefinition
elementType System.Type
list System
리턴 void
        internal void WriteArray(MemberDefinition arrayDefn, Type elementType, System.Collections.IList list)
        {
            bool dataArea = arrayDefn.DataArea || (Writer == DataWriter);
            AlignWrite();

            switch (arrayDefn.Type)
            {
                case MemberType.ArrayOfReferences:
                    {
                        // Serializing as a struct member is nooooot a very good idea here.
                        // Debug.Assert(kind != SerializationKind.UserMember);

                        // Reference lists are always written to the data area
                        var oldWriter = Writer;
                        Writer = DataWriter;

                        StoreObjectOffset(list);
                        for (int i = 0; i < list.Count; i++)
                        {
                            WriteReference(list[i]);
                            GR2.QueueStructWrite(Type, dataArea, arrayDefn, elementType, list[i]);
                        }

                        Writer = oldWriter;
                        break;
                    }

                case MemberType.ReferenceToArray:
                case MemberType.ReferenceToVariantArray:
                    {
                        StoreObjectOffset(list);

                        if (arrayDefn.SerializationKind == SerializationKind.UserMember)
                        {
                            arrayDefn.Serializer.Write(this.GR2, this, arrayDefn, list);
                        }
                        else if (arrayDefn.SerializationKind == SerializationKind.UserElement)
                        {
                            for (int i = 0; i < list.Count; i++)
                            {
                                StoreObjectOffset(list[i]);
                                arrayDefn.Serializer.Write(this.GR2, this, arrayDefn, list[i]);
                            }
                        }
                        else
                        {
                            for (int i = 0; i < list.Count; i++)
                            {
                                WriteStruct(elementType, list[i], false);
                            }
                        }

                        GR2.FlushPendingWrites();

                        break;
                    }

                default:
                    throw new ParsingException(String.Format("Unhandled array member type: {0}", arrayDefn.Type.ToString()));
            }
        }