]> git.proxmox.com Git - ceph.git/blame - ceph/src/arrow/java/gandiva/src/main/java/org/apache/arrow/gandiva/evaluator/VectorExpander.java
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / java / gandiva / src / main / java / org / apache / arrow / gandiva / evaluator / VectorExpander.java
CommitLineData
1d09f67e
TL
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18package org.apache.arrow.gandiva.evaluator;
19
20import org.apache.arrow.vector.BaseVariableWidthVector;
21
22/**
23 * This class provides the functionality to expand output vectors using a callback mechanism from
24 * gandiva.
25 */
26public class VectorExpander {
27 private final BaseVariableWidthVector[] vectors;
28
29 public VectorExpander(BaseVariableWidthVector[] vectors) {
30 this.vectors = vectors;
31 }
32
33 /**
34 * Result of vector expansion.
35 */
36 public static class ExpandResult {
37 public long address;
38 public long capacity;
39
40 public ExpandResult(long address, long capacity) {
41 this.address = address;
42 this.capacity = capacity;
43 }
44 }
45
46 /**
47 * Expand vector at specified index. This is used as a back call from jni, and is only
48 * relevant for variable width vectors.
49 *
50 * @param index index of buffer in the list passed to jni.
51 * @param toCapacity the size to which the buffer should be expanded to.
52 *
53 * @return address and size of the buffer after expansion.
54 */
55 public ExpandResult expandOutputVectorAtIndex(int index, long toCapacity) {
56 if (index >= vectors.length || vectors[index] == null) {
57 throw new IllegalArgumentException("invalid index " + index);
58 }
59
60 BaseVariableWidthVector vector = vectors[index];
61 while (vector.getDataBuffer().capacity() < toCapacity) {
62 vector.reallocDataBuffer();
63 }
64 return new ExpandResult(
65 vector.getDataBuffer().memoryAddress(),
66 vector.getDataBuffer().capacity());
67 }
68
69}