MCPcopy Create free account
hub / github.com/crate/crate / BigIntArray

Class BigIntArray

server/src/main/java/org/elasticsearch/common/util/BigIntArray.java:33–118  ·  view source on GitHub ↗

Int array abstraction able to support more than 2B values. This implementation slices data into fixed-sized blocks of configurable length.

Source from the content-addressed store, hash-verified

31 * configurable length.
32 */
33final class BigIntArray extends AbstractBigArray implements IntArray {
34
35 private static final BigIntArray ESTIMATOR = new BigIntArray(0, BigArrays.NON_RECYCLING_INSTANCE, false);
36
37 private int[][] pages;
38
39 /** Constructor. */
40 BigIntArray(long size, BigArrays bigArrays, boolean clearOnResize) {
41 super(INT_PAGE_SIZE, bigArrays, clearOnResize);
42 this.size = size;
43 pages = new int[numPages(size)][];
44 for (int i = 0; i < pages.length; ++i) {
45 pages[i] = newIntPage(i);
46 }
47 }
48
49 @Override
50 public int get(long index) {
51 final int pageIndex = pageIndex(index);
52 final int indexInPage = indexInPage(index);
53 return pages[pageIndex][indexInPage];
54 }
55
56 @Override
57 public int set(long index, int value) {
58 final int pageIndex = pageIndex(index);
59 final int indexInPage = indexInPage(index);
60 final int[] page = pages[pageIndex];
61 final int ret = page[indexInPage];
62 page[indexInPage] = value;
63 return ret;
64 }
65
66 @Override
67 public int increment(long index, int inc) {
68 final int pageIndex = pageIndex(index);
69 final int indexInPage = indexInPage(index);
70 return pages[pageIndex][indexInPage] += inc;
71 }
72
73 @Override
74 public void fill(long fromIndex, long toIndex, int value) {
75 if (fromIndex > toIndex) {
76 throw new IllegalArgumentException();
77 }
78 final int fromPage = pageIndex(fromIndex);
79 final int toPage = pageIndex(toIndex - 1);
80 if (fromPage == toPage) {
81 Arrays.fill(pages[fromPage], indexInPage(fromIndex), indexInPage(toIndex - 1) + 1, value);
82 } else {
83 Arrays.fill(pages[fromPage], indexInPage(fromIndex), pages[fromPage].length, value);
84 for (int i = fromPage + 1; i < toPage; ++i) {
85 Arrays.fill(pages[i], value);
86 }
87 Arrays.fill(pages[toPage], 0, indexInPage(toIndex - 1) + 1, value);
88 }
89 }
90

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected