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

Class ATransientMap

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

Source from the content-addressed store, hash-verified

15import clojure.lang.PersistentHashMap.INode;
16
17public abstract class ATransientMap extends AFn implements ITransientMap, ITransientAssociative2 {
18 abstract void ensureEditable();
19 abstract ITransientMap doAssoc(Object key, Object val);
20 abstract ITransientMap doWithout(Object key);
21 abstract Object doValAt(Object key, Object notFound);
22 abstract int doCount();
23 abstract IPersistentMap doPersistent();
24
25 public ITransientMap conj(Object o) {
26 ensureEditable();
27 if(o instanceof Map.Entry)
28 {
29 Map.Entry e = (Map.Entry) o;
30
31 return assoc(e.getKey(), e.getValue());
32 }
33 else if(o instanceof IPersistentVector)
34 {
35 IPersistentVector v = (IPersistentVector) o;
36 if(v.count() != 2)
37 throw new IllegalArgumentException("Vector arg to map conj must be a pair");
38 return assoc(v.nth(0), v.nth(1));
39 }
40
41 ITransientMap ret = this;
42 for(ISeq es = RT.seq(o); es != null; es = es.next())
43 {
44 Map.Entry e = (Map.Entry) es.first();
45 ret = ret.assoc(e.getKey(), e.getValue());
46 }
47 return ret;
48 }
49
50 public final Object invoke(Object arg1) {
51 return valAt(arg1);
52 }
53
54 public final Object invoke(Object arg1, Object notFound) {
55 return valAt(arg1, notFound);
56 }
57
58 public final Object valAt(Object key) {
59 return valAt(key, null);
60 }
61
62 public final ITransientMap assoc(Object key, Object val) {
63 ensureEditable();
64 return doAssoc(key, val);
65 }
66
67 public final ITransientMap without(Object key) {
68 ensureEditable();
69 return doWithout(key);
70 }
71
72 public final IPersistentMap persistent() {
73 ensureEditable();
74 return doPersistent();

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected