![JAR search and dependency download from the Maven repository](/logo.png)
com.maxifier.mxcache.clean.CustomCleanableInstanceList Maven / Gradle / Ivy
/*
* Copyright (c) 2008-2014 Maxifier Ltd. All Rights Reserved.
*/
package com.maxifier.mxcache.clean;
import com.maxifier.mxcache.caches.CleaningNode;
import java.util.List;
import java.util.ArrayList;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* CustomCleanableInstanceList
*
* @author Andrey Yakoushin ([email protected])
* @author Alexander Kochurov ([email protected])
*/
final class CustomCleanableInstanceList implements CleanableInstanceList {
private final List> list;
private final Lock readLock;
private final Lock writeLock;
private volatile int version;
public CustomCleanableInstanceList() {
//noinspection CollectionWithoutInitialCapacity
list = new ArrayList>();
ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readLock = readWriteLock.readLock();
writeLock = readWriteLock.writeLock();
}
//------------------------------------------------------------------------------------------------------------------
public void add(ClassCleanableInstanceList classList, int[] classIds, int[] instanceIds) {
writeLock.lock();
try {
version++;
list.add(new CustomClassCleanableInstanceList(classList, classIds, instanceIds));
} finally {
writeLock.unlock();
}
}
//------------------------------------------------------------------------------------------------------------------
public void clearCache() {
CleaningHelper.clear(this);
}
@Override
public void getCaches(List caches) {
readLock.lock();
try {
for (CustomClassCleanableInstanceList> customClassCleanableInstanceList : list) {
customClassCleanableInstanceList.getCaches(caches);
}
} finally {
readLock.unlock();
}
}
@Override
public void deepUnlock() {
readLock.unlock();
}
@Override
public int deepLock() {
readLock.lock();
return version;
}
@Override
public void getLists(List> lists) {
for (CustomClassCleanableInstanceList> customClassCleanableInstanceList : list) {
lists.add(customClassCleanableInstanceList.classList);
}
}
//------------------------------------------------------------------------------------------------------------------
private static class CustomClassCleanableInstanceList {
private final ClassCleanableInstanceList classList;
private final int[] staticIds;
private final int[] instanceIds;
public CustomClassCleanableInstanceList(ClassCleanableInstanceList classList, int[] staticIds, int[] instanceIds) {
this.classList = classList;
this.staticIds = staticIds;
this.instanceIds = instanceIds;
}
public void getCaches(List caches) {
Cleanable cleanable = classList.getCleanable();
for (int id : staticIds) {
caches.add(cleanable.getStaticCache(id));
}
for (T t : classList) {
for (int id : instanceIds) {
caches.add(cleanable.getInstanceCache(t, id));
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy