/* * Copyright 2012 Phil Pratt-Szeliga and other contributors * http://chirrup.org/ * * See the file LICENSE for copying permission. */ package org.trifort.rootbeer.remap; import java.io.Serializable; public class GpuAtomicLong extends Number implements Serializable { private static final long serialVersionUID = 1L; private volatile long value; public GpuAtomicLong(long start_value){ value = start_value; } public GpuAtomicLong(){ value = 0; } public synchronized long get(){ return value; } public synchronized void set(long set_value){ value = set_value; } public synchronized void lazySet(long set_value){ value = set_value; } public synchronized long getAndSet(long set_value){ long ret = value; value = set_value; return ret; } public synchronized boolean compareAndSet(long expect, long update){ if(value == expect){ value = update; return true; } else { return false; } } public synchronized boolean weakCompareAndSet(long expect, long update){ if(value == expect){ value = update; return true; } else { return false; } } public synchronized long getAndIncrement(){ long ret = value; value++; return ret; } public synchronized long getAndDecrement(){ long ret = value; value--; return ret; } public synchronized long getAndAdd(long add_value){ long ret = value; value += add_value; return ret; } public synchronized long incrementAndGet(){ value++; return value; } public synchronized long decrementAndGet(){ value--; return value; } public synchronized long addAndGet(long add_value){ value += add_value; return value; } @Override public String toString(){ long value = get(); return ""+value; } @Override public int intValue() { synchronized(this){ return (int) value; } } @Override public long longValue() { synchronized(this){ return value; } } @Override public float floatValue() { synchronized(this){ return (float) value; } } @Override public double doubleValue() { synchronized(this){ return (double) value; } } }