package org.deuce.transaction.estmmvcc.field;
import org.deuce.transaction.estmmvcc.BackUpTable;
import org.deuce.transaction.estmmvcc.field.ReadFieldAccess.Field.Type;
import org.deuce.transform.Exclude;
@Exclude
final public class WriteFieldAccess extends ReadFieldAccess {
final private Type type;
private Object value;
private WriteFieldAccess next;
public WriteFieldAccess(Object reference, long field, Type type, Object value, int hash, int lock) {
super(reference, field, hash, lock);
this.type = type;
this.value = value;
this.next = null;
this.lock = lock;
}
public void setValue(Object value) {
this.value = value;
}
public Object getValue() {
return value;
}
public void setNext(WriteFieldAccess next) {
this.next = next;
}
public WriteFieldAccess getNext() {
return next;
}
public void writeOldField(int hash, int id) {
Object val = Field.getValue(reference, field, type);
BackUpTable.setVersion(reference, field, this.getLock());
//if (!BackUpTable.setVersion(reference, field, this.getLock()))
//return false;
BackUpTable.setValue(reference, field, val);
//return true;
}
/*public boolean writeOldField(int timestamp) {
Object val = Field.getValue(reference, field, type);
if (!BackUpTable.setVersion(reference, field, timestamp))
return false;
BackUpTable.setValue(reference, field, val);
return true;
}*/
/*public void resetOldField() {
int version = BackUpTable.getVersion(reference, field);
if (version != Integer.MAX_VALUE) {
Object val = BackUpTable.getValue(reference, field);
Field.putValue(reference, field, val, type);
// this do not need to C&S
LockTable.lock(LockTable.hash(reference, field), version);
}
//BackUpTable.setVersion(reference, field, Integer.MAX_VALUE);
}*/
public void writeField() {
Field.putValue(reference, field, value, type);
}
}