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); }
internal void Encode(BlobWriter bw) { for (int i = 0; i < len; i++) { bw.Append(buf[i]); } }
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); }
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); }