// dynamic size. public static void writeDynSize(bintalk.IWriter w, uint s) { byte[] b = BitConverter.GetBytes(s); int n = 0; if (s <= 0X3F) { n = 0; } else if (s <= 0X3FFF) { n = 1; } else if (s <= 0X3FFFFF) { n = 2; } else if (s <= 0X3FFFFFFF) { n = 3; } b[n] |= (byte)(n << 6); for (int i = n; i >= 0; i--) { write(w, b[i]); } }
// binary. public static void write(bintalk.IWriter w, byte[] v) { if (v == null || v.Length == 0) { writeDynSize(w, 0); } else { uint s = (uint)v.Length; writeDynSize(w, s); w.write(v); } }
// string public static void write(bintalk.IWriter w, string v) { if (v == null || v.Length == 0) { writeDynSize(w, 0); } else { byte[] str = Encoding.UTF8.GetBytes(v); uint len = (uint)str.Length; writeDynSize(w, len); if (len > 0) { w.write(str); } } }
public static void writeMid(bintalk.IWriter w, int v) { write(w, (ushort)v); }
// bool public static void write(bintalk.IWriter w, bool v) { write(w, (byte)(v?1:0)); }
// uint8 public static void write(bintalk.IWriter w, byte v) { w.write(new byte[1] { v }); }
// uint16 public static void write(bintalk.IWriter w, ushort v) { w.write(BitConverter.GetBytes(v)); }