package arida.ufc.br.moap.datamodelapi.spi;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
*
* @author igobrilhante
*/
public abstract class AbstractTrajectoryModel<S, T> implements ITrajectoryModel<S,T> {
protected final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();
public void readLock() {
this.readWriteLock.readLock().lock();
}
public void readUnLock() {
this.readWriteLock.readLock().unlock();
}
public void readUnlockAll() {
ReentrantReadWriteLock lock = readWriteLock;
final int nReadLocks = lock.getReadHoldCount();
for (int n = 0; n < nReadLocks; n++) {
lock.readLock().unlock();
}
}
public void writeLock() {
if (readWriteLock.getReadHoldCount() > 0) {
throw new IllegalMonitorStateException("Impossible to acquire a write lock when currently holding a read lock. Use toArray() methods on NodeIterable and EdgeIterable to avoid holding a readLock.");
}
readWriteLock.writeLock().lock();
}
/**
*
*/
public void writeUnlock() {
readWriteLock.writeLock().unlock();
}
}