diff options
author | Christophe Grand <christophe@cgrand.net> | 2009-08-10 18:49:22 +0200 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2009-08-26 12:02:57 -0400 |
commit | 0a7e6eda4d4bcb38048f61e120c333b954b57c25 (patch) | |
tree | c34821ac200e3e88012fe3bf1ad21f989d400dce | |
parent | 652d53e93309d5cd6e3c7c9c078b1defe2d10c29 (diff) |
factory methods use transients
Signed-off-by: Rich Hickey <richhickey@gmail.com>
-rw-r--r-- | src/jvm/clojure/lang/PersistentHashMap2.java | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/src/jvm/clojure/lang/PersistentHashMap2.java b/src/jvm/clojure/lang/PersistentHashMap2.java index 19e98560..1859baa3 100644 --- a/src/jvm/clojure/lang/PersistentHashMap2.java +++ b/src/jvm/clojure/lang/PersistentHashMap2.java @@ -37,6 +37,7 @@ package clojure.lang; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.concurrent.atomic.AtomicReference; /* @@ -60,29 +61,29 @@ final public static PersistentHashMap2 EMPTY = new PersistentHashMap2(0, null, f final private static Object NOT_FOUND = new Object(); static public IPersistentMap create(Map other){ - IPersistentMap ret = EMPTY; + ITransientMap ret = EMPTY.asTransient(); for(Object o : other.entrySet()) { Map.Entry e = (Entry) o; ret = ret.assoc(e.getKey(), e.getValue()); } - return ret; + return ret.persistent(); } /* * @param init {key1,val1,key2,val2,...} */ public static PersistentHashMap2 create(Object... init){ - IPersistentMap ret = EMPTY; + ITransientMap ret = EMPTY.asTransient(); for(int i = 0; i < init.length; i += 2) { ret = ret.assoc(init[i], init[i + 1]); } - return (PersistentHashMap2) ret; + return (PersistentHashMap2) ret.persistent(); } public static PersistentHashMap2 create(List init){ - IPersistentMap ret = EMPTY; + ITransientMap ret = EMPTY.asTransient(); for(Iterator i = init.iterator(); i.hasNext();) { Object key = i.next(); @@ -91,30 +92,25 @@ public static PersistentHashMap2 create(List init){ Object val = i.next(); ret = ret.assoc(key, val); } - return (PersistentHashMap2) ret; + return (PersistentHashMap2) ret.persistent(); } static public PersistentHashMap2 create(ISeq items){ - IPersistentMap ret = EMPTY; + ITransientMap ret = EMPTY.asTransient(); for(; items != null; items = items.next().next()) { if(items.next() == null) throw new IllegalArgumentException(String.format("No value supplied for key: %s", items.first())); ret = ret.assoc(items.first(), RT.second(items)); } - return (PersistentHashMap2) ret; + return (PersistentHashMap2) ret.persistent(); } /* * @param init {key1,val1,key2,val2,...} */ public static PersistentHashMap2 create(IPersistentMap meta, Object... init){ - IPersistentMap ret = EMPTY.withMeta(meta); - for(int i = 0; i < init.length; i += 2) - { - ret = ret.assoc(init[i], init[i + 1]); - } - return (PersistentHashMap2) ret; + return create(init).withMeta(meta); } PersistentHashMap2(int count, INode root, boolean hasNull, Object nullValue){ |