Example #1
0
 internal Builder(ListType dataType)
 {
     ValueBuilder = ArrowArrayBuilderFactory.Build(dataType.ValueDataType);
     ValueOffsetsBufferBuilder = new ArrowBuffer.Builder <int>();
     ValidityBufferBuilder     = new BooleanArray.Builder();
     DataType = dataType;
 }
Example #2
0
 protected BuilderBase(IArrowType dataType)
 {
     DataType       = dataType;
     ValueOffsets   = new ArrowBuffer.Builder <int>();
     ValueBuffer    = new ArrowBuffer.Builder <byte>();
     ValidityBuffer = new BooleanArray.Builder();
 }
            private ArrowBuffer ConcatenateOffsetBuffer()
            {
                var builder    = new ArrowBuffer.Builder <int>(_totalLength + 1);
                int baseOffset = 0;

                builder.Append(0);

                foreach (ArrayData arrayData in _arrayDataList)
                {
                    if (arrayData.Length == 0)
                    {
                        continue;
                    }

                    // The first offset is always 0.
                    // It should be skipped because it duplicate to the last offset of builder.
                    ReadOnlySpan <int> span = arrayData.Buffers[1].Span.CastTo <int>().Slice(1, arrayData.Length);

                    foreach (int offset in span)
                    {
                        builder.Append(baseOffset + offset);
                    }

                    // The next offset must start from the current last offset.
                    baseOffset += span[arrayData.Length - 1];
                }

                return(builder.Build(_allocator));
            }
Example #4
0
 public Builder()
 {
     ValueBuffer    = new ArrowBuffer.Builder <byte>();
     ValidityBuffer = new ArrowBuffer.Builder <byte>();
     Length         = 0;
     NullCount      = 0;
 }
            private ArrowBuffer ConcatenateVariableBinaryValueBuffer()
            {
                var builder = new ArrowBuffer.Builder <byte>();

                foreach (ArrayData arrayData in _arrayDataList)
                {
                    int lastOffset = arrayData.Buffers[1].Span.CastTo <int>()[arrayData.Length];
                    builder.Append(arrayData.Buffers[2].Span.Slice(0, lastOffset));
                }

                return(builder.Build(_allocator));
            }
            private ArrowBuffer ConcatenateFixedWidthTypeValueBuffer(FixedWidthType type)
            {
                int typeByteWidth = type.BitWidth / 8;
                var builder       = new ArrowBuffer.Builder <byte>(_totalLength * typeByteWidth);

                foreach (ArrayData arrayData in _arrayDataList)
                {
                    int length     = arrayData.Length;
                    int byteLength = length * typeByteWidth;

                    builder.Append(arrayData.Buffers[1].Span.Slice(0, byteLength));
                }

                return(builder.Build(_allocator));
            }
Example #7
0
            protected DictionaryArrayBuilderBase(IEqualityComparer <T> comparer = null, HashFunctionDelegate hashFunc = null)
            {
                IndicesBuffer = new ArrowBuffer.Builder <int>();
                NullBitmap    = new ArrowBuffer.Builder <byte>();

                if (comparer != null)
                {
                    Comparer = comparer;
                }

                if (hashFunc != null)
                {
                    HashFunction = hashFunc;
                }
            }
Example #8
0
            protected BuilderBase(IArrowType dataType)
            {
                DataType       = dataType;
                ValueOffsets   = new ArrowBuffer.Builder <int>();
                ValueBuffer    = new ArrowBuffer.Builder <byte>();
                ValidityBuffer = new ArrowBuffer.BitmapBuilder();

                // From the docs:
                //
                // The offsets buffer contains length + 1 signed integers (either 32-bit or 64-bit, depending on the
                // logical type), which encode the start position of each slot in the data buffer. The length of the
                // value in each slot is computed using the difference between the offset at that slot’s index and the
                // subsequent offset.
                //
                // In this builder, we choose to append the first offset (zero) upon construction, and each trailing
                // offset is then added after each individual item has been appended.
                ValueOffsets.Append(this.Offset);
            }
Example #9
0
 public Builder()
 {
     ValueBuffer = new ArrowBuffer.Builder <byte>();
     Length      = 0;
 }