package org.deuce.transaction.tl2;
import org.deuce.transaction.tl2.field.ReadFieldAccess;
import org.deuce.transaction.tl2.field.WriteFieldAccess;
import org.deuce.transform.Exclude;
import org.deuce.trove.THashSet;
import org.deuce.trove.TObjectProcedure;
/**
* Represents the transaction write set.
*
* @author Guy Korland
* @since 0.7
*/
@Exclude
public class WriteSet{
final private THashSet<WriteFieldAccess> writeSet = new THashSet<WriteFieldAccess>( 16);
public void clear() {
writeSet.clear();
}
public boolean isEmpty() {
return writeSet.isEmpty();
}
public boolean forEach(TObjectProcedure<WriteFieldAccess> procedure){
return writeSet.forEach(procedure);
}
public void put(WriteFieldAccess write) {
// Add to write set
if(!writeSet.add( write))
writeSet.replace(write);
}
public WriteFieldAccess contains(ReadFieldAccess read) {
// Check if it is already included in the write set
return writeSet.get( read);
}
public int size() {
return writeSet.size();
}
}