private static string PrintBool(PyBool boolean) { return("[PyBool " + boolean.Value + "]"); }
protected override void EncodeInternal(BinaryWriter output) { output.Write((byte)MarshalOpcode.PackedRow); Header.Encode(output); int cc = Columns.Count; var rawStream = new MemoryStream(); var writer = new BinaryWriter(rawStream); var reader = new BinaryReader(rawStream); var sizeList = Columns.OrderByDescending(c => FieldTypeHelper.GetTypeBits(c.Type)); foreach (Column col in sizeList) { switch (col.Type) { case FieldType.I8: case FieldType.UI8: case FieldType.CY: case FieldType.FileTime: writer.Write(col.Value.IntValue); break; case FieldType.I4: case FieldType.UI4: writer.Write((int)(col.Value.IntValue)); break; case FieldType.I2: case FieldType.UI2: writer.Write((short)(col.Value.IntValue)); break; case FieldType.I1: case FieldType.UI1: writer.Write((byte)(col.Value.IntValue)); break; case FieldType.R8: writer.Write((double)(col.Value.FloatValue)); break; case FieldType.R4: writer.Write((float)(col.Value.FloatValue)); break; case FieldType.Bool: writer.Write((byte)(col.Value.IntValue)); break; case FieldType.Bytes: writer.Write((col.Value as PyBuffer).Data); break; case FieldType.Str: case FieldType.WStr: col.Value.Encode(output); break; default: throw new Exception("Unsupported FieldType"); } } long bitByte = 0; byte bitOffset = 0; byte[] unpacked = rawStream.ToArray(); rawStream.Close(); foreach (Column col in Columns) { if (FieldTypeHelper.GetTypeBits(col.Type) != 1) { continue; } PyBool value = col.Value as PyBool; if (bitOffset > 7) { bitOffset = 0; } if (bitOffset == 0) { bitByte = unpacked.Length + 1; Array.Resize <byte>(ref unpacked, (int)(bitByte)); } unpacked[bitByte] |= (byte)(((value.Value == true) ? 1 : 0) << bitOffset++); } rawStream = new MemoryStream(unpacked); reader = new BinaryReader(rawStream); ZeroCompress(reader, rawStream, output); foreach (Column col in Columns) { col.Value.Encode(output); } reader.Close(); }
private static string PrintBool(PyBool boolean) { return "[PyBool " + boolean.Value + "]"; }