10888a09821a98ac0680fad765217302858e70fa4Paul Duffin/* 20888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Copyright (C) 2009 The Guava Authors 30888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 40888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); 50888a09821a98ac0680fad765217302858e70fa4Paul Duffin * you may not use this file except in compliance with the License. 60888a09821a98ac0680fad765217302858e70fa4Paul Duffin * You may obtain a copy of the License at 70888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 80888a09821a98ac0680fad765217302858e70fa4Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0 90888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 100888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Unless required by applicable law or agreed to in writing, software 110888a09821a98ac0680fad765217302858e70fa4Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS, 120888a09821a98ac0680fad765217302858e70fa4Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130888a09821a98ac0680fad765217302858e70fa4Paul Duffin * See the License for the specific language governing permissions and 140888a09821a98ac0680fad765217302858e70fa4Paul Duffin * limitations under the License. 150888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 160888a09821a98ac0680fad765217302858e70fa4Paul Duffin 170888a09821a98ac0680fad765217302858e70fa4Paul Duffinpackage java.util.concurrent.atomic; 180888a09821a98ac0680fad765217302858e70fa4Paul Duffin 190888a09821a98ac0680fad765217302858e70fa4Paul Duffin/** 200888a09821a98ac0680fad765217302858e70fa4Paul Duffin * GWT emulated version of {@link AtomicInteger}. It's a thin wrapper 210888a09821a98ac0680fad765217302858e70fa4Paul Duffin * around the primitive {@code int}. 220888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 230888a09821a98ac0680fad765217302858e70fa4Paul Duffin * @author Hayward Chan 240888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 250888a09821a98ac0680fad765217302858e70fa4Paul Duffinpublic class AtomicInteger extends Number implements java.io.Serializable { 260888a09821a98ac0680fad765217302858e70fa4Paul Duffin 270888a09821a98ac0680fad765217302858e70fa4Paul Duffin private int value; 280888a09821a98ac0680fad765217302858e70fa4Paul Duffin 290888a09821a98ac0680fad765217302858e70fa4Paul Duffin public AtomicInteger(int initialValue) { 300888a09821a98ac0680fad765217302858e70fa4Paul Duffin value = initialValue; 310888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 320888a09821a98ac0680fad765217302858e70fa4Paul Duffin 330888a09821a98ac0680fad765217302858e70fa4Paul Duffin public AtomicInteger() { 340888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 350888a09821a98ac0680fad765217302858e70fa4Paul Duffin 360888a09821a98ac0680fad765217302858e70fa4Paul Duffin public final int get() { 370888a09821a98ac0680fad765217302858e70fa4Paul Duffin return value; 380888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 390888a09821a98ac0680fad765217302858e70fa4Paul Duffin 400888a09821a98ac0680fad765217302858e70fa4Paul Duffin public final void set(int newValue) { 410888a09821a98ac0680fad765217302858e70fa4Paul Duffin value = newValue; 420888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 430888a09821a98ac0680fad765217302858e70fa4Paul Duffin 440888a09821a98ac0680fad765217302858e70fa4Paul Duffin public final void lazySet(int newValue) { 450888a09821a98ac0680fad765217302858e70fa4Paul Duffin set(newValue); 460888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 470888a09821a98ac0680fad765217302858e70fa4Paul Duffin 480888a09821a98ac0680fad765217302858e70fa4Paul Duffin public final int getAndSet(int newValue) { 490888a09821a98ac0680fad765217302858e70fa4Paul Duffin int current = value; 500888a09821a98ac0680fad765217302858e70fa4Paul Duffin value = newValue; 510888a09821a98ac0680fad765217302858e70fa4Paul Duffin return current; 520888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 530888a09821a98ac0680fad765217302858e70fa4Paul Duffin 540888a09821a98ac0680fad765217302858e70fa4Paul Duffin public final boolean compareAndSet(int expect, int update) { 550888a09821a98ac0680fad765217302858e70fa4Paul Duffin if (value == expect) { 560888a09821a98ac0680fad765217302858e70fa4Paul Duffin value = update; 570888a09821a98ac0680fad765217302858e70fa4Paul Duffin return true; 580888a09821a98ac0680fad765217302858e70fa4Paul Duffin } else { 590888a09821a98ac0680fad765217302858e70fa4Paul Duffin return false; 600888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 610888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 620888a09821a98ac0680fad765217302858e70fa4Paul Duffin 630888a09821a98ac0680fad765217302858e70fa4Paul Duffin public final int getAndIncrement() { 640888a09821a98ac0680fad765217302858e70fa4Paul Duffin return value++; 650888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 660888a09821a98ac0680fad765217302858e70fa4Paul Duffin 670888a09821a98ac0680fad765217302858e70fa4Paul Duffin public final int getAndDecrement() { 680888a09821a98ac0680fad765217302858e70fa4Paul Duffin return value--; 690888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 700888a09821a98ac0680fad765217302858e70fa4Paul Duffin 710888a09821a98ac0680fad765217302858e70fa4Paul Duffin public final int getAndAdd(int delta) { 720888a09821a98ac0680fad765217302858e70fa4Paul Duffin int current = value; 730888a09821a98ac0680fad765217302858e70fa4Paul Duffin value += delta; 740888a09821a98ac0680fad765217302858e70fa4Paul Duffin return current; 750888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 760888a09821a98ac0680fad765217302858e70fa4Paul Duffin 770888a09821a98ac0680fad765217302858e70fa4Paul Duffin public final int incrementAndGet() { 780888a09821a98ac0680fad765217302858e70fa4Paul Duffin return ++value; 790888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 800888a09821a98ac0680fad765217302858e70fa4Paul Duffin 810888a09821a98ac0680fad765217302858e70fa4Paul Duffin public final int decrementAndGet() { 820888a09821a98ac0680fad765217302858e70fa4Paul Duffin return --value; 830888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 840888a09821a98ac0680fad765217302858e70fa4Paul Duffin 850888a09821a98ac0680fad765217302858e70fa4Paul Duffin public final int addAndGet(int delta) { 860888a09821a98ac0680fad765217302858e70fa4Paul Duffin value += delta; 870888a09821a98ac0680fad765217302858e70fa4Paul Duffin return value; 880888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 890888a09821a98ac0680fad765217302858e70fa4Paul Duffin 900888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override public String toString() { 910888a09821a98ac0680fad765217302858e70fa4Paul Duffin return Integer.toString(value); 920888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 930888a09821a98ac0680fad765217302858e70fa4Paul Duffin 940888a09821a98ac0680fad765217302858e70fa4Paul Duffin public int intValue() { 950888a09821a98ac0680fad765217302858e70fa4Paul Duffin return value; 960888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 970888a09821a98ac0680fad765217302858e70fa4Paul Duffin 980888a09821a98ac0680fad765217302858e70fa4Paul Duffin public long longValue() { 990888a09821a98ac0680fad765217302858e70fa4Paul Duffin return (long) value; 1000888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1010888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1020888a09821a98ac0680fad765217302858e70fa4Paul Duffin public float floatValue() { 1030888a09821a98ac0680fad765217302858e70fa4Paul Duffin return (float) value; 1040888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1050888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1060888a09821a98ac0680fad765217302858e70fa4Paul Duffin public double doubleValue() { 1070888a09821a98ac0680fad765217302858e70fa4Paul Duffin return (double) value; 1080888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1090888a09821a98ac0680fad765217302858e70fa4Paul Duffin} 110