package org.deuce.transaction.estmmvcc; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; public class BackUp { private AtomicInteger oldVersion = new AtomicInteger(Integer.MAX_VALUE); private AtomicReference<Object> oldValue = new AtomicReference<Object>(); long field; Object obj; public BackUp() { super(); } public BackUp(int ver) { oldVersion.set(ver); } public void setOldVersion(Object o, long f, int version) { if (this.oldVersion.get() != Integer.MAX_VALUE) { if (this.obj == null) { // this has never been set this.field = f; this.obj = o; } } this.oldVersion.set(version); } public int getOldVersion(Object o, long f) { if (this.oldVersion.get() != Integer.MAX_VALUE) { // this has alredy been set if (this.obj != null) if (!(this.obj.equals(o) && field == f)) { // this hash is shared by another field return -1; } } return oldVersion.get(); } public void setOldValue(Object value) { this.oldValue.set(value); } public Object getOldValue(Object obj, long field) { return this.oldValue.get(); } }