All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.opentelemetry.sdk.metrics.internal.state.ArrayBasedStack Maven / Gradle / Ivy

/*
 * Copyright The OpenTelemetry Authors
 * SPDX-License-Identifier: Apache-2.0
 */

package io.opentelemetry.sdk.metrics.internal.state;

import javax.annotation.Nullable;

/**
 * Array-based Stack.
 *
 * 

This class is internal and is hence not for public use. Its APIs are unstable and can change * at any time. * *

This class is not thread-safe. */ public final class ArrayBasedStack { // Visible for test static final int DEFAULT_CAPACITY = 10; // NOTE (asafm): Using native array instead of ArrayList since I plan to add eviction // if the initial portion of the stack is not used for several cycles of collection private T[] array; private int size; @SuppressWarnings("unchecked") public ArrayBasedStack() { array = (T[]) new Object[DEFAULT_CAPACITY]; size = 0; } /** * Add {@code element} to the top of the stack (LIFO). * * @param element The element to add * @throws NullPointerException if {@code element} is null */ public void push(T element) { if (element == null) { throw new NullPointerException("Null is not permitted as element in the stack"); } if (size == array.length) { resizeArray(array.length * 2); } array[size++] = element; } /** * Removes and returns an element from the top of the stack (LIFO). * * @return the top most element in the stack (last one added) */ @Nullable public T pop() { if (isEmpty()) { return null; } T element = array[size - 1]; array[size - 1] = null; size--; return element; } public boolean isEmpty() { return size == 0; } public int size() { return size; } @SuppressWarnings("unchecked") private void resizeArray(int newCapacity) { T[] newArray = (T[]) new Object[newCapacity]; System.arraycopy(array, 0, newArray, 0, size); array = newArray; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy