public void Write(double v) { Write(FloatEncoder.Float64bits(v)); }
public static (ByteWriter, string error) Encode2(IList <IClockValue> values, int startIndex, int count) { if (values == null || values.Count == 0) { return(null, null); } IClockValue value0 = values[0]; byte datatype = value0.DataType; TimeEncoder tenc = (TimeEncoder)EncoderFactory.Get(DataTypeEnum.DateTime, count); IntegerEncoder qenc = (IntegerEncoder)EncoderFactory.Get(DataTypeEnum.Integer, count); IEncoder venc = EncoderFactory.Get(datatype, count); if (datatype == DataTypeEnum.Double) { FloatEncoder encoder = (FloatEncoder)venc; for (int i = startIndex; i < startIndex + count; i++) { ClockDouble value = (ClockDouble)values[i]; tenc.Write(value.Clock); qenc.Write(value.Quality); encoder.Write(value.Value); } } else if (datatype == DataTypeEnum.Boolean) { BooleanEncoder encoder = (BooleanEncoder)venc; for (int i = startIndex; i < startIndex + count; i++) { ClockBoolean value = (ClockBoolean)values[i]; tenc.Write(value.Clock); qenc.Write(value.Quality); encoder.Write(value.Value); } } else if (datatype == DataTypeEnum.Integer) { IntegerEncoder encoder = (IntegerEncoder)venc; for (int i = startIndex; i < startIndex + count; i++) { ClockInt64 value = (ClockInt64)values[i]; tenc.Write(value.Clock); qenc.Write(value.Quality); encoder.Write(value.Value); } } else if (datatype == DataTypeEnum.String) { StringEncoder encoder = (StringEncoder)venc; for (int i = startIndex; i < startIndex + count; i++) { ClockString value = (ClockString)values[i]; tenc.Write(value.Clock); qenc.Write(value.Quality); encoder.Write(value.Value); } } var ts = tenc.Bytes(); venc.Flush();//for floatencoder var qs = qenc.Bytes(); var vs = venc.Bytes(); EncoderFactory.Put(DataTypeEnum.DateTime, tenc); EncoderFactory.Put(DataTypeEnum.Integer, qenc); EncoderFactory.Put(datatype, venc); if (ts.Item2 != null) { return(null, ts.Item2); } if (vs.Item2 != null) { return(null, vs.Item2); } if (qs.Item2 != null) { return(null, qs.Item2); } ByteWriter tswriter = ts.Item1; ByteWriter vswriter = vs.Item1; ByteWriter qswriter = qs.Item1; ByteWriter result = new ByteWriter(1 + Varint.MaxVarintLen64 + tswriter.Length + vswriter.Length + qswriter.Length); result.Write(datatype); //first byte valuetype result.Write(Varint.GetBytes(tswriter.Length)); result.Write(tswriter.EndWrite(), 0, tswriter.Length); tswriter.Release(); result.Write(Varint.GetBytes(vswriter.Length)); result.Write(vswriter.EndWrite(), 0, vswriter.Length); vswriter.Release(); result.Write(qswriter.EndWrite(), 0, qswriter.Length); qswriter.Release(); return(result, null); }