1
package org.apache.lucene.util.packed;
4
* Licensed to the Apache Software Foundation (ASF) under one or more
5
* contributor license agreements. See the NOTICE file distributed with
6
* this work for additional information regarding copyright ownership.
7
* The ASF licenses this file to You under the Apache License, Version 2.0
8
* (the "License"); you may not use this file except in compliance with
9
* the License. You may obtain a copy of the License at
11
* http://www.apache.org/licenses/LICENSE-2.0
13
* Unless required by applicable law or agreed to in writing, software
14
* distributed under the License is distributed on an "AS IS" BASIS,
15
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
* See the License for the specific language governing permissions and
17
* limitations under the License.
20
import org.apache.lucene.store.DataInput;
21
import org.apache.lucene.util.RamUsageEstimator;
23
import java.io.IOException;
24
import java.util.Arrays;
27
* Direct wrapping of 32 bit values to a backing array of ints.
31
class Direct32 extends PackedInts.ReaderImpl
32
implements PackedInts.Mutable {
34
private static final int BITS_PER_VALUE = 32;
36
public Direct32(int valueCount) {
37
super(valueCount, BITS_PER_VALUE);
38
values = new int[valueCount];
41
public Direct32(DataInput in, int valueCount) throws IOException {
42
super(valueCount, BITS_PER_VALUE);
43
int[] values = new int[valueCount];
44
for(int i=0;i<valueCount;i++) {
45
values[i] = in.readInt();
47
final int mod = valueCount % 2;
56
* Creates an array backed by the given values.
58
* Note: The values are used directly, so changes to the given values will
59
* affect the structure.
60
* @param values used as the internal backing array.
62
public Direct32(int[] values) {
63
super(values.length, BITS_PER_VALUE);
67
public long get(final int index) {
68
return 0xFFFFFFFFL & values[index];
71
public void set(final int index, final long value) {
72
values[index] = (int)(value & 0xFFFFFFFF);
75
public long ramBytesUsed() {
76
return RamUsageEstimator.NUM_BYTES_ARRAY_HEADER +
77
values.length * RamUsageEstimator.NUM_BYTES_INT;
81
Arrays.fill(values, 0);
85
public int[] getArray() {
90
public boolean hasArray() {