/* * Copyright (C) 2014 Indeed Inc. * * Licensed 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. */ package com.indeed.imhotep; import java.util.Arrays; /** * @author jsgroth */ public final class BucketStats { private final long[] array; private final int xBuckets; private final int yBuckets; /** * @param array a group stats array indexed by group * @param xBuckets the number of x dimension buckets INCLUDING the 2 gutters * @param yBuckets the number of y dimension buckets INCLUDING the 2 gutters */ public BucketStats(long[] array, int xBuckets, int yBuckets) { this.xBuckets = xBuckets; this.yBuckets = yBuckets; final int requiredArrayLen = xBuckets * yBuckets + 1; this.array = array.length < requiredArrayLen ? Arrays.copyOf(array, requiredArrayLen) : array; } public final long get(final int x, final int y) { return array[(y + 1) * xBuckets + x + 2]; } public final long getXUnderflow(final int y) { return array[(y + 1) * xBuckets + 1]; } public final long getXOverflow(final int y) { return array[(y + 2) * xBuckets]; } public final long getYUnderflow(final int x) { return array[x + 2]; } public final long getYOverflow(final int x) { return array[(yBuckets - 1) * xBuckets + x + 2]; } public final long getXYUnderflow() { return array[1]; } public final long getXYOverflow() { return array[xBuckets * yBuckets]; } public final long getXUnderflowYOverflow() { return array[(yBuckets - 1) * xBuckets + 1]; } public final long getXOverflowYUnderflow() { return array[xBuckets]; } public final long[] asArray() { return array; } }