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)); }
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); }