]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/thrift/lib/java/src/org/apache/thrift/transport/AutoExpandingBuffer.java
buildsys: switch source download to quincy
[ceph.git] / ceph / src / jaegertracing / thrift / lib / java / src / org / apache / thrift / transport / AutoExpandingBuffer.java
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.thrift.transport;
20
21 import java.util.Arrays;
22
23 /**
24 * Helper class that wraps a byte[] so that it can expand and be reused. Users
25 * should call resizeIfNecessary to make sure the buffer has suitable capacity,
26 * and then use the array as needed. Note that the internal array will grow at a
27 * rate slightly faster than the requested capacity with the (untested)
28 * objective of avoiding expensive buffer allocations and copies.
29 */
30 class AutoExpandingBuffer {
31 private byte[] array;
32
33 public AutoExpandingBuffer(int initialCapacity) {
34 this.array = new byte[initialCapacity];
35 }
36
37 public void resizeIfNecessary(int size) {
38 final int currentCapacity = this.array.length;
39 if (currentCapacity < size) {
40 // Increase by a factor of 1.5x
41 int growCapacity = currentCapacity + (currentCapacity >> 1);
42 int newCapacity = Math.max(growCapacity, size);
43 this.array = Arrays.copyOf(array, newCapacity);
44 }
45 }
46
47 public byte[] array() {
48 return this.array;
49 }
50 }