MCPcopy Index your code
hub / github.com/clojure/clojure / Atom

Class Atom

src/jvm/clojure/lang/Atom.java:17–174  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15import java.util.concurrent.atomic.AtomicReference;
16
17final public class Atom extends ARef implements IAtom2{
18final AtomicReference state;
19
20public Atom(Object state){
21 this.state = new AtomicReference(state);
22}
23
24public Atom(Object state, IPersistentMap meta){
25 super(meta);
26 this.state = new AtomicReference(state);
27}
28
29public Object deref(){
30 return state.get();
31}
32
33public Object swap(IFn f) {
34 for(; ;)
35 {
36 Object v = deref();
37 Object newv = f.invoke(v);
38 validate(newv);
39 if(state.compareAndSet(v, newv))
40 {
41 notifyWatches(v, newv);
42 return newv;
43 }
44 }
45}
46
47public Object swap(IFn f, Object arg) {
48 for(; ;)
49 {
50 Object v = deref();
51 Object newv = f.invoke(v, arg);
52 validate(newv);
53 if(state.compareAndSet(v, newv))
54 {
55 notifyWatches(v, newv);
56 return newv;
57 }
58 }
59}
60
61public Object swap(IFn f, Object arg1, Object arg2) {
62 for(; ;)
63 {
64 Object v = deref();
65 Object newv = f.invoke(v, arg1, arg2);
66 validate(newv);
67 if(state.compareAndSet(v, newv))
68 {
69 notifyWatches(v, newv);
70 return newv;
71 }
72 }
73}
74

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected