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

ru.progrm_jarvis.javacommons.collection.concurrent.AbstractConcurrentSizedCollectionWrapper Maven / Gradle / Ivy

package ru.progrm_jarvis.javacommons.collection.concurrent;


import org.jetbrains.annotations.NotNull;
import ru.progrm_jarvis.javacommons.collection.SizedCollection;

import java.util.concurrent.locks.Lock;

public abstract class AbstractConcurrentSizedCollectionWrapper
        extends ConcurrentWrapper implements SizedCollection {

    protected AbstractConcurrentSizedCollectionWrapper(final @NotNull W wrapped,
                                                       final @NotNull Lock readLock,
                                                       final @NotNull Lock writeLock) {
        super(wrapped, readLock, writeLock);
    }

    @Override
    public int size() {
        readLock.lock();
        try {
            return internalSize();
        } finally {
            readLock.unlock();
        }
    }

    protected abstract int internalSize();

    @Override
    public boolean isEmpty() {
        readLock.lock();
        try {
            return internalIsEmpty();
        } finally {
            readLock.unlock();
        }
    }

    protected abstract boolean internalIsEmpty();

    @Override
    public void clear() {
        writeLock.lock();
        try {
            internalClear();
        } finally {
            writeLock.unlock();
        }
    }

    protected abstract void internalClear();
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy