| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import java.lang.Override; |
| |
| <@pp.dropOutputFile /> |
| <#list vv.types as type> |
| <#list type.minor as minor> |
| <#assign friendlyType = (minor.friendlyType!minor.boxedType!type.boxedType) /> |
| |
| <#if type.major == "Fixed"> |
| <@pp.changeOutputFile name="/org/apache/arrow/vector/${minor.class}Vector.java" /> |
| <#include "/@includes/license.ftl" /> |
| |
| package org.apache.arrow.vector; |
| |
| <#include "/@includes/vv_imports.ftl" /> |
| |
| /** |
| * ${minor.class} implements a vector of fixed width values. Elements in the vector are accessed |
| * by position, starting from the logical start of the vector. Values should be pushed onto the |
| * vector sequentially, but may be randomly accessed. |
| * The width of each element is ${type.width} byte(s) |
| * The equivalent Java primitive is '${minor.javaType!type.javaType}' |
| * |
| * NB: this class is automatically generated from ${.template_name} and ValueVectorTypes.tdd using FreeMarker. |
| */ |
| public final class ${minor.class}Vector extends BaseDataValueVector implements FixedWidthVector{ |
| private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(${minor.class}Vector.class); |
| |
| private final FieldReader reader = new ${minor.class}ReaderImpl(${minor.class}Vector.this); |
| private final Accessor accessor = new Accessor(); |
| private final Mutator mutator = new Mutator(); |
| |
| private int allocationSizeInBytes = INITIAL_VALUE_ALLOCATION * ${type.width}; |
| private int allocationMonitor = 0; |
| |
| public ${minor.class}Vector(MaterializedField field, BufferAllocator allocator) { |
| super(field, allocator); |
| } |
| |
| @Override |
| public FieldReader getReader(){ |
| return reader; |
| } |
| |
| @Override |
| public int getBufferSizeFor(final int valueCount) { |
| if (valueCount == 0) { |
| return 0; |
| } |
| return valueCount * ${type.width}; |
| } |
| |
| @Override |
| public int getValueCapacity(){ |
| return (int) (data.capacity() *1.0 / ${type.width}); |
| } |
| |
| @Override |
| public Accessor getAccessor(){ |
| return accessor; |
| } |
| |
| @Override |
| public Mutator getMutator(){ |
| return mutator; |
| } |
| |
| @Override |
| public void setInitialCapacity(final int valueCount) { |
| final long size = 1L * valueCount * ${type.width}; |
| if (size > MAX_ALLOCATION_SIZE) { |
| throw new OversizedAllocationException("Requested amount of memory is more than max allowed allocation size"); |
| } |
| allocationSizeInBytes = (int)size; |
| } |
| |
| @Override |
| public void allocateNew() { |
| if(!allocateNewSafe()){ |
| throw new OutOfMemoryException("Failure while allocating buffer."); |
| } |
| } |
| |
| @Override |
| public boolean allocateNewSafe() { |
| long curAllocationSize = allocationSizeInBytes; |
| if (allocationMonitor > 10) { |
| curAllocationSize = Math.max(8, curAllocationSize / 2); |
| allocationMonitor = 0; |
| } else if (allocationMonitor < -2) { |
| curAllocationSize = allocationSizeInBytes * 2L; |
| allocationMonitor = 0; |
| } |
| |
| try{ |
| allocateBytes(curAllocationSize); |
| } catch (RuntimeException ex) { |
| return false; |
| } |
| return true; |
| } |
| |
| /** |
| * Allocate a new buffer that supports setting at least the provided number of values. May actually be sized bigger |
| * depending on underlying buffer rounding size. Must be called prior to using the ValueVector. |
| * |
| * Note that the maximum number of values a vector can allocate is Integer.MAX_VALUE / value width. |
| * |
| * @param valueCount |
| * @throws org.apache.arrow.memory.OutOfMemoryException if it can't allocate the new buffer |
| */ |
| @Override |
| public void allocateNew(final int valueCount) { |
| allocateBytes(valueCount * ${type.width}); |
| } |
| |
| @Override |
| public void reset() { |
| allocationSizeInBytes = INITIAL_VALUE_ALLOCATION; |
| allocationMonitor = 0; |
| zeroVector(); |
| super.reset(); |
| } |
| |
| private void allocateBytes(final long size) { |
| if (size > MAX_ALLOCATION_SIZE) { |
| throw new OversizedAllocationException("Requested amount of memory is more than max allowed allocation size"); |
| } |
| |
| final int curSize = (int)size; |
| clear(); |
| data = allocator.buffer(curSize); |
| data.readerIndex(0); |
| allocationSizeInBytes = curSize; |
| } |
| |
| /** |
| * Allocate new buffer with double capacity, and copy data into the new buffer. Replace vector's buffer with new buffer, and release old one |
| * |
| * @throws org.apache.arrow.memory.OutOfMemoryException if it can't allocate the new buffer |
| */ |
| public void reAlloc() { |
| final long newAllocationSize = allocationSizeInBytes * 2L; |
| if (newAllocationSize > MAX_ALLOCATION_SIZE) { |
| throw new OversizedAllocationException("Unable to expand the buffer. Max allowed buffer size is reached."); |
| } |
| |
| logger.debug("Reallocating vector [{}]. # of bytes: [{}] -> [{}]", field, allocationSizeInBytes, newAllocationSize); |
| final ArrowBuf newBuf = allocator.buffer((int)newAllocationSize); |
| newBuf.setBytes(0, data, 0, data.capacity()); |
| final int halfNewCapacity = newBuf.capacity() / 2; |
| newBuf.setZero(halfNewCapacity, halfNewCapacity); |
| newBuf.writerIndex(data.writerIndex()); |
| data.release(1); |
| data = newBuf; |
| allocationSizeInBytes = (int)newAllocationSize; |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public void zeroVector() { |
| data.setZero(0, data.capacity()); |
| } |
| |
| // @Override |
| // public void load(SerializedField metadata, ArrowBuf buffer) { |
| // Preconditions.checkArgument(this.field.getPath().equals(metadata.getNamePart().getName()), "The field %s doesn't match the provided metadata %s.", this.field, metadata); |
| // final int actualLength = metadata.getBufferLength(); |
| // final int valueCount = metadata.getValueCount(); |
| // final int expectedLength = valueCount * ${type.width}; |
| // assert actualLength == expectedLength : String.format("Expected to load %d bytes but actually loaded %d bytes", expectedLength, actualLength); |
| // |
| // clear(); |
| // if (data != null) { |
| // data.release(1); |
| // } |
| // data = buffer.slice(0, actualLength); |
| // data.retain(1); |
| // data.writerIndex(actualLength); |
| // } |
| |
| public TransferPair getTransferPair(BufferAllocator allocator){ |
| return new TransferImpl(getField(), allocator); |
| } |
| |
| @Override |
| public TransferPair getTransferPair(String ref, BufferAllocator allocator){ |
| return new TransferImpl(getField().withPath(ref), allocator); |
| } |
| |
| @Override |
| public TransferPair makeTransferPair(ValueVector to) { |
| return new TransferImpl((${minor.class}Vector) to); |
| } |
| |
| public void transferTo(${minor.class}Vector target){ |
| target.clear(); |
| target.data = data.transferOwnership(target.allocator).buffer; |
| target.data.writerIndex(data.writerIndex()); |
| clear(); |
| } |
| |
| public void splitAndTransferTo(int startIndex, int length, ${minor.class}Vector target) { |
| final int startPoint = startIndex * ${type.width}; |
| final int sliceLength = length * ${type.width}; |
| target.clear(); |
| target.data = data.slice(startPoint, sliceLength).transferOwnership(target.allocator).buffer; |
| target.data.writerIndex(sliceLength); |
| } |
| |
| private class TransferImpl implements TransferPair{ |
| private ${minor.class}Vector to; |
| |
| public TransferImpl(MaterializedField field, BufferAllocator allocator){ |
| to = new ${minor.class}Vector(field, allocator); |
| } |
| |
| public TransferImpl(${minor.class}Vector to) { |
| this.to = to; |
| } |
| |
| @Override |
| public ${minor.class}Vector getTo(){ |
| return to; |
| } |
| |
| @Override |
| public void transfer(){ |
| transferTo(to); |
| } |
| |
| @Override |
| public void splitAndTransfer(int startIndex, int length) { |
| splitAndTransferTo(startIndex, length, to); |
| } |
| |
| @Override |
| public void copyValueSafe(int fromIndex, int toIndex) { |
| to.copyFromSafe(fromIndex, toIndex, ${minor.class}Vector.this); |
| } |
| } |
| |
| public void copyFrom(int fromIndex, int thisIndex, ${minor.class}Vector from){ |
| <#if (type.width > 8)> |
| from.data.getBytes(fromIndex * ${type.width}, data, thisIndex * ${type.width}, ${type.width}); |
| <#else> <#-- type.width <= 8 --> |
| data.set${(minor.javaType!type.javaType)?cap_first}(thisIndex * ${type.width}, |
| from.data.get${(minor.javaType!type.javaType)?cap_first}(fromIndex * ${type.width}) |
| ); |
| </#if> <#-- type.width --> |
| } |
| |
| public void copyFromSafe(int fromIndex, int thisIndex, ${minor.class}Vector from){ |
| while(thisIndex >= getValueCapacity()) { |
| reAlloc(); |
| } |
| copyFrom(fromIndex, thisIndex, from); |
| } |
| |
| public void decrementAllocationMonitor() { |
| if (allocationMonitor > 0) { |
| allocationMonitor = 0; |
| } |
| --allocationMonitor; |
| } |
| |
| private void incrementAllocationMonitor() { |
| ++allocationMonitor; |
| } |
| |
| public final class Accessor extends BaseDataValueVector.BaseAccessor { |
| @Override |
| public int getValueCount() { |
| return data.writerIndex() / ${type.width}; |
| } |
| |
| @Override |
| public boolean isNull(int index){ |
| return false; |
| } |
| |
| <#if (type.width > 8)> |
| |
| public ${minor.javaType!type.javaType} get(int index) { |
| return data.slice(index * ${type.width}, ${type.width}); |
| } |
| |
| <#if (minor.class == "Interval")> |
| public void get(int index, ${minor.class}Holder holder){ |
| |
| final int offsetIndex = index * ${type.width}; |
| holder.months = data.getInt(offsetIndex); |
| holder.days = data.getInt(offsetIndex + ${minor.daysOffset}); |
| holder.milliseconds = data.getInt(offsetIndex + ${minor.millisecondsOffset}); |
| } |
| |
| public void get(int index, Nullable${minor.class}Holder holder){ |
| final int offsetIndex = index * ${type.width}; |
| holder.isSet = 1; |
| holder.months = data.getInt(offsetIndex); |
| holder.days = data.getInt(offsetIndex + ${minor.daysOffset}); |
| holder.milliseconds = data.getInt(offsetIndex + ${minor.millisecondsOffset}); |
| } |
| |
| @Override |
| public ${friendlyType} getObject(int index) { |
| final int offsetIndex = index * ${type.width}; |
| final int months = data.getInt(offsetIndex); |
| final int days = data.getInt(offsetIndex + ${minor.daysOffset}); |
| final int millis = data.getInt(offsetIndex + ${minor.millisecondsOffset}); |
| final Period p = new Period(); |
| return p.plusMonths(months).plusDays(days).plusMillis(millis); |
| } |
| |
| public StringBuilder getAsStringBuilder(int index) { |
| |
| final int offsetIndex = index * ${type.width}; |
| |
| int months = data.getInt(offsetIndex); |
| final int days = data.getInt(offsetIndex + ${minor.daysOffset}); |
| int millis = data.getInt(offsetIndex + ${minor.millisecondsOffset}); |
| |
| final int years = (months / org.apache.arrow.vector.util.DateUtility.yearsToMonths); |
| months = (months % org.apache.arrow.vector.util.DateUtility.yearsToMonths); |
| |
| final int hours = millis / (org.apache.arrow.vector.util.DateUtility.hoursToMillis); |
| millis = millis % (org.apache.arrow.vector.util.DateUtility.hoursToMillis); |
| |
| final int minutes = millis / (org.apache.arrow.vector.util.DateUtility.minutesToMillis); |
| millis = millis % (org.apache.arrow.vector.util.DateUtility.minutesToMillis); |
| |
| final long seconds = millis / (org.apache.arrow.vector.util.DateUtility.secondsToMillis); |
| millis = millis % (org.apache.arrow.vector.util.DateUtility.secondsToMillis); |
| |
| final String yearString = (Math.abs(years) == 1) ? " year " : " years "; |
| final String monthString = (Math.abs(months) == 1) ? " month " : " months "; |
| final String dayString = (Math.abs(days) == 1) ? " day " : " days "; |
| |
| |
| return(new StringBuilder(). |
| append(years).append(yearString). |
| append(months).append(monthString). |
| append(days).append(dayString). |
| append(hours).append(":"). |
| append(minutes).append(":"). |
| append(seconds).append("."). |
| append(millis)); |
| } |
| |
| <#elseif (minor.class == "IntervalDay")> |
| public void get(int index, ${minor.class}Holder holder){ |
| |
| final int offsetIndex = index * ${type.width}; |
| holder.days = data.getInt(offsetIndex); |
| holder.milliseconds = data.getInt(offsetIndex + ${minor.millisecondsOffset}); |
| } |
| |
| public void get(int index, Nullable${minor.class}Holder holder){ |
| final int offsetIndex = index * ${type.width}; |
| holder.isSet = 1; |
| holder.days = data.getInt(offsetIndex); |
| holder.milliseconds = data.getInt(offsetIndex + ${minor.millisecondsOffset}); |
| } |
| |
| @Override |
| public ${friendlyType} getObject(int index) { |
| final int offsetIndex = index * ${type.width}; |
| final int millis = data.getInt(offsetIndex + ${minor.millisecondsOffset}); |
| final int days = data.getInt(offsetIndex); |
| final Period p = new Period(); |
| return p.plusDays(days).plusMillis(millis); |
| } |
| |
| |
| public StringBuilder getAsStringBuilder(int index) { |
| final int offsetIndex = index * ${type.width}; |
| |
| int millis = data.getInt(offsetIndex + ${minor.millisecondsOffset}); |
| final int days = data.getInt(offsetIndex); |
| |
| final int hours = millis / (org.apache.arrow.vector.util.DateUtility.hoursToMillis); |
| millis = millis % (org.apache.arrow.vector.util.DateUtility.hoursToMillis); |
| |
| final int minutes = millis / (org.apache.arrow.vector.util.DateUtility.minutesToMillis); |
| millis = millis % (org.apache.arrow.vector.util.DateUtility.minutesToMillis); |
| |
| final int seconds = millis / (org.apache.arrow.vector.util.DateUtility.secondsToMillis); |
| millis = millis % (org.apache.arrow.vector.util.DateUtility.secondsToMillis); |
| |
| final String dayString = (Math.abs(days) == 1) ? " day " : " days "; |
| |
| return(new StringBuilder(). |
| append(days).append(dayString). |
| append(hours).append(":"). |
| append(minutes).append(":"). |
| append(seconds).append("."). |
| append(millis)); |
| } |
| |
| <#elseif (minor.class == "Decimal28Sparse") || (minor.class == "Decimal38Sparse") || (minor.class == "Decimal28Dense") || (minor.class == "Decimal38Dense")> |
| |
| public void get(int index, ${minor.class}Holder holder) { |
| holder.start = index * ${type.width}; |
| holder.buffer = data; |
| holder.scale = getField().getScale(); |
| holder.precision = getField().getPrecision(); |
| } |
| |
| public void get(int index, Nullable${minor.class}Holder holder) { |
| holder.isSet = 1; |
| holder.start = index * ${type.width}; |
| holder.buffer = data; |
| holder.scale = getField().getScale(); |
| holder.precision = getField().getPrecision(); |
| } |
| |
| @Override |
| public ${friendlyType} getObject(int index) { |
| <#if (minor.class == "Decimal28Sparse") || (minor.class == "Decimal38Sparse")> |
| // Get the BigDecimal object |
| return org.apache.arrow.vector.util.DecimalUtility.getBigDecimalFromSparse(data, index * ${type.width}, ${minor.nDecimalDigits}, getField().getScale()); |
| <#else> |
| return org.apache.arrow.vector.util.DecimalUtility.getBigDecimalFromDense(data, index * ${type.width}, ${minor.nDecimalDigits}, getField().getScale(), ${minor.maxPrecisionDigits}, ${type.width}); |
| </#if> |
| } |
| |
| <#else> |
| public void get(int index, ${minor.class}Holder holder){ |
| holder.buffer = data; |
| holder.start = index * ${type.width}; |
| } |
| |
| public void get(int index, Nullable${minor.class}Holder holder){ |
| holder.isSet = 1; |
| holder.buffer = data; |
| holder.start = index * ${type.width}; |
| } |
| |
| @Override |
| public ${friendlyType} getObject(int index) { |
| return data.slice(index * ${type.width}, ${type.width}) |
| } |
| |
| </#if> |
| <#else> <#-- type.width <= 8 --> |
| |
| public ${minor.javaType!type.javaType} get(int index) { |
| return data.get${(minor.javaType!type.javaType)?cap_first}(index * ${type.width}); |
| } |
| |
| <#if type.width == 4> |
| public long getTwoAsLong(int index) { |
| return data.getLong(index * ${type.width}); |
| } |
| |
| </#if> |
| |
| <#if minor.class == "Date"> |
| @Override |
| public ${friendlyType} getObject(int index) { |
| org.joda.time.DateTime date = new org.joda.time.DateTime(get(index), org.joda.time.DateTimeZone.UTC); |
| date = date.withZoneRetainFields(org.joda.time.DateTimeZone.getDefault()); |
| return date; |
| } |
| |
| <#elseif minor.class == "TimeStamp"> |
| @Override |
| public ${friendlyType} getObject(int index) { |
| org.joda.time.DateTime date = new org.joda.time.DateTime(get(index), org.joda.time.DateTimeZone.UTC); |
| date = date.withZoneRetainFields(org.joda.time.DateTimeZone.getDefault()); |
| return date; |
| } |
| |
| <#elseif minor.class == "IntervalYear"> |
| @Override |
| public ${friendlyType} getObject(int index) { |
| |
| final int value = get(index); |
| |
| final int years = (value / org.apache.arrow.vector.util.DateUtility.yearsToMonths); |
| final int months = (value % org.apache.arrow.vector.util.DateUtility.yearsToMonths); |
| final Period p = new Period(); |
| return p.plusYears(years).plusMonths(months); |
| } |
| |
| public StringBuilder getAsStringBuilder(int index) { |
| |
| int months = data.getInt(index); |
| |
| final int years = (months / org.apache.arrow.vector.util.DateUtility.yearsToMonths); |
| months = (months % org.apache.arrow.vector.util.DateUtility.yearsToMonths); |
| |
| final String yearString = (Math.abs(years) == 1) ? " year " : " years "; |
| final String monthString = (Math.abs(months) == 1) ? " month " : " months "; |
| |
| return(new StringBuilder(). |
| append(years).append(yearString). |
| append(months).append(monthString)); |
| } |
| |
| <#elseif minor.class == "Time"> |
| @Override |
| public DateTime getObject(int index) { |
| |
| org.joda.time.DateTime time = new org.joda.time.DateTime(get(index), org.joda.time.DateTimeZone.UTC); |
| time = time.withZoneRetainFields(org.joda.time.DateTimeZone.getDefault()); |
| return time; |
| } |
| |
| <#elseif minor.class == "Decimal9" || minor.class == "Decimal18"> |
| @Override |
| public ${friendlyType} getObject(int index) { |
| |
| final BigInteger value = BigInteger.valueOf(((${type.boxedType})get(index)).${type.javaType}Value()); |
| return new BigDecimal(value, getField().getScale()); |
| } |
| |
| <#else> |
| @Override |
| public ${friendlyType} getObject(int index) { |
| return get(index); |
| } |
| public ${minor.javaType!type.javaType} getPrimitiveObject(int index) { |
| return get(index); |
| } |
| </#if> |
| |
| public void get(int index, ${minor.class}Holder holder){ |
| <#if minor.class.startsWith("Decimal")> |
| holder.scale = getField().getScale(); |
| holder.precision = getField().getPrecision(); |
| </#if> |
| |
| holder.value = data.get${(minor.javaType!type.javaType)?cap_first}(index * ${type.width}); |
| } |
| |
| public void get(int index, Nullable${minor.class}Holder holder){ |
| holder.isSet = 1; |
| holder.value = data.get${(minor.javaType!type.javaType)?cap_first}(index * ${type.width}); |
| } |
| |
| |
| </#if> <#-- type.width --> |
| } |
| |
| /** |
| * ${minor.class}.Mutator implements a mutable vector of fixed width values. Elements in the |
| * vector are accessed by position from the logical start of the vector. Values should be pushed |
| * onto the vector sequentially, but may be randomly accessed. |
| * The width of each element is ${type.width} byte(s) |
| * The equivalent Java primitive is '${minor.javaType!type.javaType}' |
| * |
| * NB: this class is automatically generated from ValueVectorTypes.tdd using FreeMarker. |
| */ |
| public final class Mutator extends BaseDataValueVector.BaseMutator { |
| |
| private Mutator(){}; |
| /** |
| * Set the element at the given index to the given value. Note that widths smaller than |
| * 32 bits are handled by the ArrowBuf interface. |
| * |
| * @param index position of the bit to set |
| * @param value value to set |
| */ |
| <#if (type.width > 8)> |
| public void set(int index, <#if (type.width > 4)>${minor.javaType!type.javaType}<#else>int</#if> value) { |
| data.setBytes(index * ${type.width}, value, 0, ${type.width}); |
| } |
| |
| public void setSafe(int index, <#if (type.width > 4)>${minor.javaType!type.javaType}<#else>int</#if> value) { |
| while(index >= getValueCapacity()) { |
| reAlloc(); |
| } |
| data.setBytes(index * ${type.width}, value, 0, ${type.width}); |
| } |
| |
| <#if (minor.class == "Interval")> |
| public void set(int index, int months, int days, int milliseconds){ |
| final int offsetIndex = index * ${type.width}; |
| data.setInt(offsetIndex, months); |
| data.setInt((offsetIndex + ${minor.daysOffset}), days); |
| data.setInt((offsetIndex + ${minor.millisecondsOffset}), milliseconds); |
| } |
| |
| protected void set(int index, ${minor.class}Holder holder){ |
| set(index, holder.months, holder.days, holder.milliseconds); |
| } |
| |
| protected void set(int index, Nullable${minor.class}Holder holder){ |
| set(index, holder.months, holder.days, holder.milliseconds); |
| } |
| |
| public void setSafe(int index, int months, int days, int milliseconds){ |
| while(index >= getValueCapacity()) { |
| reAlloc(); |
| } |
| set(index, months, days, milliseconds); |
| } |
| |
| public void setSafe(int index, Nullable${minor.class}Holder holder){ |
| setSafe(index, holder.months, holder.days, holder.milliseconds); |
| } |
| |
| public void setSafe(int index, ${minor.class}Holder holder){ |
| setSafe(index, holder.months, holder.days, holder.milliseconds); |
| } |
| |
| <#elseif (minor.class == "IntervalDay")> |
| public void set(int index, int days, int milliseconds){ |
| final int offsetIndex = index * ${type.width}; |
| data.setInt(offsetIndex, days); |
| data.setInt((offsetIndex + ${minor.millisecondsOffset}), milliseconds); |
| } |
| |
| protected void set(int index, ${minor.class}Holder holder){ |
| set(index, holder.days, holder.milliseconds); |
| } |
| protected void set(int index, Nullable${minor.class}Holder holder){ |
| set(index, holder.days, holder.milliseconds); |
| } |
| |
| public void setSafe(int index, int days, int milliseconds){ |
| while(index >= getValueCapacity()) { |
| reAlloc(); |
| } |
| set(index, days, milliseconds); |
| } |
| |
| public void setSafe(int index, ${minor.class}Holder holder){ |
| setSafe(index, holder.days, holder.milliseconds); |
| } |
| |
| public void setSafe(int index, Nullable${minor.class}Holder holder){ |
| setSafe(index, holder.days, holder.milliseconds); |
| } |
| |
| <#elseif (minor.class == "Decimal28Sparse" || minor.class == "Decimal38Sparse") || (minor.class == "Decimal28Dense") || (minor.class == "Decimal38Dense")> |
| |
| public void set(int index, ${minor.class}Holder holder){ |
| set(index, holder.start, holder.buffer); |
| } |
| |
| void set(int index, Nullable${minor.class}Holder holder){ |
| set(index, holder.start, holder.buffer); |
| } |
| |
| public void setSafe(int index, Nullable${minor.class}Holder holder){ |
| setSafe(index, holder.start, holder.buffer); |
| } |
| public void setSafe(int index, ${minor.class}Holder holder){ |
| setSafe(index, holder.start, holder.buffer); |
| } |
| |
| public void setSafe(int index, int start, ArrowBuf buffer){ |
| while(index >= getValueCapacity()) { |
| reAlloc(); |
| } |
| set(index, start, buffer); |
| } |
| |
| public void set(int index, int start, ArrowBuf buffer){ |
| data.setBytes(index * ${type.width}, buffer, start, ${type.width}); |
| } |
| |
| <#else> |
| |
| protected void set(int index, ${minor.class}Holder holder){ |
| set(index, holder.start, holder.buffer); |
| } |
| |
| public void set(int index, Nullable${minor.class}Holder holder){ |
| set(index, holder.start, holder.buffer); |
| } |
| |
| public void set(int index, int start, ArrowBuf buffer){ |
| data.setBytes(index * ${type.width}, buffer, start, ${type.width}); |
| } |
| |
| public void setSafe(int index, ${minor.class}Holder holder){ |
| setSafe(index, holder.start, holder.buffer); |
| } |
| public void setSafe(int index, Nullable${minor.class}Holder holder){ |
| setSafe(index, holder.start, holder.buffer); |
| } |
| |
| public void setSafe(int index, int start, ArrowBuf buffer){ |
| while(index >= getValueCapacity()) { |
| reAlloc(); |
| } |
| set(index, holder); |
| } |
| |
| public void set(int index, Nullable${minor.class}Holder holder){ |
| data.setBytes(index * ${type.width}, holder.buffer, holder.start, ${type.width}); |
| } |
| </#if> |
| |
| @Override |
| public void generateTestData(int count) { |
| setValueCount(count); |
| boolean even = true; |
| final int valueCount = getAccessor().getValueCount(); |
| for(int i = 0; i < valueCount; i++, even = !even) { |
| final byte b = even ? Byte.MIN_VALUE : Byte.MAX_VALUE; |
| for(int w = 0; w < ${type.width}; w++){ |
| data.setByte(i + w, b); |
| } |
| } |
| } |
| |
| <#else> <#-- type.width <= 8 --> |
| public void set(int index, <#if (type.width >= 4)>${minor.javaType!type.javaType}<#else>int</#if> value) { |
| data.set${(minor.javaType!type.javaType)?cap_first}(index * ${type.width}, value); |
| } |
| |
| public void setSafe(int index, <#if (type.width >= 4)>${minor.javaType!type.javaType}<#else>int</#if> value) { |
| while(index >= getValueCapacity()) { |
| reAlloc(); |
| } |
| set(index, value); |
| } |
| |
| protected void set(int index, ${minor.class}Holder holder){ |
| data.set${(minor.javaType!type.javaType)?cap_first}(index * ${type.width}, holder.value); |
| } |
| |
| public void setSafe(int index, ${minor.class}Holder holder){ |
| while(index >= getValueCapacity()) { |
| reAlloc(); |
| } |
| set(index, holder); |
| } |
| |
| protected void set(int index, Nullable${minor.class}Holder holder){ |
| data.set${(minor.javaType!type.javaType)?cap_first}(index * ${type.width}, holder.value); |
| } |
| |
| public void setSafe(int index, Nullable${minor.class}Holder holder){ |
| while(index >= getValueCapacity()) { |
| reAlloc(); |
| } |
| set(index, holder); |
| } |
| |
| @Override |
| public void generateTestData(int size) { |
| setValueCount(size); |
| boolean even = true; |
| final int valueCount = getAccessor().getValueCount(); |
| for(int i = 0; i < valueCount; i++, even = !even) { |
| if(even){ |
| set(i, ${minor.boxedType!type.boxedType}.MIN_VALUE); |
| }else{ |
| set(i, ${minor.boxedType!type.boxedType}.MAX_VALUE); |
| } |
| } |
| } |
| |
| public void generateTestDataAlt(int size) { |
| setValueCount(size); |
| boolean even = true; |
| final int valueCount = getAccessor().getValueCount(); |
| for(int i = 0; i < valueCount; i++, even = !even) { |
| if(even){ |
| set(i, (${(minor.javaType!type.javaType)}) 1); |
| }else{ |
| set(i, (${(minor.javaType!type.javaType)}) 0); |
| } |
| } |
| } |
| |
| </#if> <#-- type.width --> |
| |
| @Override |
| public void setValueCount(int valueCount) { |
| final int currentValueCapacity = getValueCapacity(); |
| final int idx = (${type.width} * valueCount); |
| while(valueCount > getValueCapacity()) { |
| reAlloc(); |
| } |
| if (valueCount > 0 && currentValueCapacity > valueCount * 2) { |
| incrementAllocationMonitor(); |
| } else if (allocationMonitor > 0) { |
| allocationMonitor = 0; |
| } |
| VectorTrimmer.trim(data, idx); |
| data.writerIndex(valueCount * ${type.width}); |
| } |
| } |
| } |
| |
| </#if> <#-- type.major --> |
| </#list> |
| </#list> |