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

io.split.telemetry.utils.AtomicLongArray Maven / Gradle / Ivy

package io.split.telemetry.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.IntStream;

public class AtomicLongArray {
    private AtomicLong[] array;
    private static final int MAX_LENGTH = 23;

    private static final Logger _log = LoggerFactory.getLogger(AtomicLongArray.class);

    public AtomicLongArray(int size) {
        if(size <= 0) {
            _log.error("Invalid array size. Using default size: " + MAX_LENGTH);
            size = MAX_LENGTH;
        }
        array = new AtomicLong[size];
        IntStream.range(0, array.length).forEach(x -> array[x] = new AtomicLong());
    }

    public void increment(int index) {
        if (index < 0 || index >= array.length) {
           _log.error("Index is out of bounds. Did not incremented.");
           return;
        }
        array[index].getAndIncrement();
    }

    public List fetchAndClearAll() {
        List listValues = new ArrayList<>();
        for (AtomicLong a: array) {
            listValues.add(a.longValue());
        }

        IntStream.range(0, array.length).forEach(x -> array[x] = new AtomicLong());

        return listValues;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy