public void AddBlock(IList <long?> values) { var stats = new LongWriterStatistics(); Statistics.Add(stats); if (_isNullable) { _presentBuffer.AnnotatePosition(stats, rleValuesToConsume: 0, bitsToConsume: 0); } _dataBuffer.AnnotatePosition(stats, rleValuesToConsume: 0); var valList = new List <long>(values.Count); if (_isNullable) { var presentList = new List <bool>(values.Count); foreach (var value in values) { stats.AddValue(value); if (value.HasValue) { valList.Add(value.Value); } presentList.Add(value.HasValue); } var presentEncoder = new BitWriter(_presentBuffer); presentEncoder.Write(presentList); if (stats.HasNull) { _presentBuffer.MustBeIncluded = true; //A null occurred. Make sure to write this stream } } else { foreach (var value in values) { stats.AddValue(value); valList.Add(value.Value); } } var valEncoder = new IntegerRunLengthEncodingV2Writer(_dataBuffer); valEncoder.Write(valList, true, _shouldAlignEncodedValues); }
public void AddBlock(IList <byte?> values) { var stats = new LongWriterStatistics(); Statistics.Add(stats); if (_isNullable) { _presentBuffer.AnnotatePosition(stats, rleValuesToConsume: 0, bitsToConsume: 0); } _dataBuffer.AnnotatePosition(stats, rleValuesToConsume: 0); var valList = new List <byte>(values.Count); if (_isNullable) { var presentList = new List <bool>(values.Count); foreach (var value in values) { stats.AddValue(value); if (value.HasValue) { valList.Add(value.Value); } presentList.Add(value.HasValue); } var presentEncoder = new BitWriter(_presentBuffer); presentEncoder.Write(presentList); if (stats.HasNull) { _presentBuffer.MustBeIncluded = true; } } else { foreach (var value in values) { stats.AddValue(value); valList.Add(value.Value); } } var valEncoder = new ByteRunLengthEncodingWriter(_dataBuffer); valEncoder.Write(valList); }