public class Pointer {
    public Element ptr;
    public int count;
    public Pointer(Element initItem, int initCount) {
        ptr = initItem;
        count = initCount;
    }
    public synchronized void copyTo(Pointer x) {
        // assumes that x is accessed by at most one process
        x.ptr = ptr;
        x.count = count;
    }
    public synchronized boolean
            CAS(Pointer localPtr, Element newPtr, int newCount) {
        if ((ptr == localPtr.ptr) && (count == localPtr.count)) {
            ptr = newPtr;
            count = newCount;
            return true;
        } else
            return false;
    }
}