Beispiel #1
0
        public void AddBlock(IList <object> values)
        {
            var stats = new BooleanWriterStatistics();

            Statistics.Add(stats);
            foreach (var buffer in Buffers)
            {
                buffer.AnnotatePosition(stats, 0);
            }

            stats.NumValues += (uint)values.Count;
        }
Beispiel #2
0
        public void AddBlock(IList <bool?> values)
        {
            var stats = new BooleanWriterStatistics();

            Statistics.Add(stats);
            if (_isNullable)
            {
                _presentBuffer.AnnotatePosition(stats, rleValuesToConsume: 0, bitsToConsume: 0);
            }
            _dataBuffer.AnnotatePosition(stats, rleValuesToConsume: 0, bitsToConsume: 0);

            var valList = new List <bool>(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 BitWriter(_dataBuffer);

            valEncoder.Write(valList);
        }