public override BlobToken NewChildCore(uint len)
        {
            BlobToken ret = new BlobToken(this);

            ret.Token = new MetadataToken(MetadataTokenType.Unknown, (uint)this.Stream.Data.Length);

            uint datLen = len;

            if (len < 0x80)
            {
                datLen += 1;
            }
            else if (len < 0x4000)
            {
                datLen += 2;
            }
            else
            {
                datLen += 4;
            }
            this.Stream.SetLength(this.Stream.Data.Length + datLen);

            MetadataWriter wtr = new MetadataWriter(this.Stream);

            this.Stream.Position = ret.Token.Index;
            wtr.WriteCompressedUInt(len);
            return(ret);
        }
Beispiel #2
0
        public override void SetValue(USToken tkn, string val)
        {
            MetadataStream strs = this.Stream;

            strs.Position = tkn.Token.Index;
            MetadataReader rdr = new MetadataReader(strs);
            uint           len = rdr.ReadCompressedUInt();

            MetadataWriter wtr = new MetadataWriter(strs);

            byte[] b = Encoding.Unicode.GetBytes(val);
            if (len == b.Length)
            {
                strs.Position = tkn.Token.Index;
                wtr.WriteCompressedUInt(len);
                wtr.Write(b);
            }
            else
            {
                ResizeChild(tkn, (uint)b.Length);
                strs.Position = tkn.Token.Index;
                wtr.WriteCompressedInt(b.Length);
                wtr.Write(b);
            }
        }
        public override void SetValue(BlobToken tkn, byte[] val)
        {
            MetadataStream strs = this.Stream;

            strs.Position = tkn.Token.Index;
            MetadataReader rdr = new MetadataReader(strs);
            uint           len = rdr.ReadCompressedUInt();

            MetadataWriter wtr = new MetadataWriter(strs);

            if (len == val.Length)
            {
                strs.Position = tkn.Token.Index;
                wtr.WriteCompressedUInt(len);
                wtr.Write(val);
            }
            else
            {
                ResizeChild(tkn, (uint)val.Length);
                strs.Position = tkn.Token.Index;
                wtr.WriteCompressedInt(val.Length);
                wtr.Write(val);
            }
        }