package org.deuce.transaction.strongiso; import java.util.Iterator; import org.deuce.transaction.strongiso.field.FinalReadFieldAccess; import org.deuce.transaction.strongiso.field.LocalFieldAccess; import org.deuce.transaction.strongiso.field.ReadFieldAccess; import org.deuce.transaction.strongiso.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); final LocalFieldAccess read = new LocalFieldAccess(); public void clear() { writeSet.clear(); } public boolean isEmpty() { return writeSet.isEmpty(); } public boolean forEach(TObjectProcedure<WriteFieldAccess> procedure) { return writeSet.forEach(procedure); } public Iterator<WriteFieldAccess> getWsIterator() { return writeSet.iterator(); } public void put(WriteFieldAccess write) { // Add to write set if (!writeSet.add(write)) writeSet.replace(write); } public WriteFieldAccess contains(FinalReadFieldAccess read) { // Check if it is already included in the write set return writeSet.get(read); } public WriteFieldAccess contains(Object ref, long field) { // Check if it is already included in the write set read.init(ref, field); return writeSet.get(read); } public int size() { return writeSet.size(); } }