public override int GetBuilderSize()
        {
            BuilderSize = PackageNameIndex.GetBuilderSize()
                          + TypeNameIndex.GetBuilderSize()
                          + sizeof(int)
                          + NameTableIndex.GetBuilderSize();

            return(BuilderSize);
        }
        public override async Task WriteBuffer(ByteArrayWriter Writer, int CurrentOffset)
        {
            await PackageNameIndex.WriteBuffer(Writer, 0);

            await TypeNameIndex.WriteBuffer(Writer, 0);

            Writer.WriteInt32(OwnerReference);

            await NameTableIndex.WriteBuffer(Writer, 0);
        }
        public async Task ReadImportTableEntry(ByteArrayReader reader, DomainHeader header)
        {
            await Task.Run(() => PackageNameIndex.ReadNameTableIndex(reader, header));

            await Task.Run(() => TypeNameIndex.ReadNameTableIndex(reader, header));

            OwnerReference = reader.ReadInt32();

            await Task.Run(() => NameTableIndex.ReadNameTableIndex(reader, header));
        }
        public override int GetBuilderSize()
        {
            BuilderSize = NameIndex.GetBuilderSize();

            if (NameIndex.Name == ObjectTypes.None.ToString())
            {
                return(BuilderSize);
            }

            BuilderSize += TypeNameIndex.GetBuilderSize()
                           + sizeof(int) * 2;

            Size = Value.GetBuilderSize();

            return(BuilderSize + Size);
        }
        public override async Task WriteBuffer(ByteArrayWriter Writer, int CurrentOffset)
        {
            await NameIndex.WriteBuffer(Writer, 0);

            if (NameIndex.Name == ObjectTypes.None.ToString())
            {
                return;
            }

            await TypeNameIndex.WriteBuffer(Writer, 0);

            Writer.WriteInt32(Size);

            Writer.WriteInt32(ArrayIndex);

            await Value.WriteBuffer(Writer, CurrentOffset);
        }
        public async Task ReadProperty(ByteArrayReader reader, DomainHeader header)
        {
            await Task.Run(() => NameIndex.ReadNameTableIndex(reader, header));

            if (NameIndex.Name == ObjectTypes.None.ToString())
            {
                return;
            }

            await Task.Run(() => TypeNameIndex.ReadNameTableIndex(reader, header));

            Size       = reader.ReadInt32();
            ArrayIndex = reader.ReadInt32();

            Value = propertyValueFactory();

            await Value.ReadPropertyValue(reader, Size, header);
        }