コード例 #1
0
    internal static int Encode7ESigned(int val, BlobWriter bw)
    {
        int len = 1;

        if (val < 0)
        {
            for (int w = val; w < -0x40; w >>= 7)
            {
                len++;
            }
        }
        else
        {
            for (int w = val; w >= 0x40; w >>= 7)
            {
                len++;
            }
        }
        if (bw != null)
        {
            for (int k = (len - 1) * 7; k >= 0; k -= 7)
            {
                int x = (int)(val >> k) & 0x7F;
                if (k > 0)
                {
                    x |= 0x80;
                }
                bw.Append((byte)x);
            }
        }
        return(len);
    }
コード例 #2
0
 internal void Encode(BlobWriter bw)
 {
     for (int i = 0; i < len; i++)
     {
         bw.Append(buf[i]);
     }
 }
コード例 #3
0
 internal static int EncodeOneByte(uint val, BlobWriter bw)
 {
     if (val > 255)
     {
         throw new Exception(string.Format(
                                 "Cannot encode '{0}' over one byte", val));
     }
     bw.Append((byte)val);
     return(1);
 }
コード例 #4
0
    internal override int Encode(BlobWriter bw, bool oneByteCode)
    {
        int len1 = oneByteCode
                        ? EncodeOneByte(val, bw)
                        : Encode7EUnsigned(val, bw);
        int len2 = (cx.GetMaxBitLength(off) + 6) / 7;

        bw.Append(String.Format("T0_INT{0}({1})",
                                len2, cx.ToCExpr(off)));
        return(len1 + len2);
    }